Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Eltrox HurtonEltrox Hurton
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Sterownik domu inteligentnego C++ Mysql PHP

przetrwac 03 Jan 2018 23:09 960 6
  • #1
    przetrwac
    Level 2  
    Posiadam komputer Banana Pi M3 i planuje zaprogramować na nim sterownik domu inteligentnego.

    Planuje wykonać to w następujący sposób:

    Program napisany w C++ komunikujący się z bazą danych zapisując i odczytując stany przekaźników i czujników. Do tego strona www napisana w PHP edytująca tą bazę danych.

    Czy jest to odpowiedni i bezpieczny sposób sterowania inteligentnym domem?
    Ethernet jednoparowy (SPE) - rozwiązania w przemyśle. Szkolenie 29.09.2021r. g. 11.00 Zarejestruj się za darmo
  • Eltrox HurtonEltrox Hurton
  • Eltrox HurtonEltrox Hurton
  • #3
    JacekCz
    Level 38  
    1. co do architektury, baza nie jest jedynym medium "łączącym". Jeśli jest oczekiwana wysoka dynamika, a żeby programy nie męczyły bazy w nieustających pętlach, można pomyśleć o message queue
    Tu masz "ewangelizację", nie patrz na produkt Kafka, nie rekomenduję go dla Twojego projektu, ale na treść ogólną.
    https://www.youtube.com/watch?v=7Xjy2ewPJFA

    Ewentualnie sugerowanie rozwiązanie to MQTT, ale nie znalazłem materiału "dydaktycznego"

    2. C++ jest dość rozwlekłym (np w ilości linii) językiem, i o pewnych ryzykach (UB). Np nie ma zestandaryzowanego interfejsu z bazami danych.
    Ale pytasz, więc pewnie go znasz.
  • #4
    przetrwac
    Level 2  
    czareqpl wrote:
    A jak dokładnie będziesz sterował tymi przekaźnikami? Jakieś schematy?

    Banana Pi M3 posiada piny GPIO którymi można sterować za pomocą biblioteki WiringPi. Wystarczy podpiąć przekaźnik sterowany 5V po pin i już można nim sterować. Oczywiście sam komputer posiada tych złącz dosyć mało więc przy bardziej rozbudowanym systemie trzeba zaprojektować płytkę rozszerzającą ilość pinów lub komunikować się np. z arduino za pomocą pinów rx, tx.
    Dodano po 25 [minuty]:
    JacekCz wrote:
    1. co do architektury, baza nie jest jedynym medium "łączącym". Jeśli jest oczekiwana wysoka dynamika, a żeby programy nie męczyły bazy w nieustających pętlach, można pomyśleć o message queue
    Tu masz "ewangelizację", nie patrz na produkt Kafka, nie rekomenduję go dla Twojego projektu, ale na treść ogólną.
    https://www.youtube.com/watch?v=7Xjy2ewPJFA

    Ewentualnie sugerowanie rozwiązanie to MQTT, ale nie znalazłem materiału "dydaktycznego"

    2. C++ jest dość rozwlekłym (np w ilości linii) językiem, i o pewnych ryzykach (UB). Np nie ma zestandaryzowanego interfejsu z bazami danych.
    Ale pytasz, więc pewnie go znasz.


    Znam tylko podstawy programowania a projekt inteligentnego domu który chcę wykonać ma być projektem przy którym nauczę się wielu rzeczy o których do tej pory nie miałem pojęcia. Programowanie w C++ znam tylko na poziomie tego czego nauczyli mnie w szkole (Technikum Informatyczne) + trochę więcej(ale nie dużo).
    Puki co chcę zebrać informacje na jakiej architekturze mam oprzeć swój projekt. I czego mam się nauczyć.

    Poczytałem trochę o MQTT i będzie to lepsze rozwiązanie niż baza danych.

    Może przedstawie ten projekt trochę szerzej:

    Sterownik ma być finalnie dość rozbudowany:
    - Sterowanie oświetleniem (230V - wł/wył 12V - ściemnianie i zmiana koloru)
    - Sterowanie gniazdami zasilania (gniazda 230V oraz gniazda USB)
    - Sterowanie roletami zewnętrznymi
    - System alarmowy (czujniki ruchu, dymu, gazu, czadu, czujniki otwarcia okien i drzwi, czujniki zalania, kamery, czujnik poziomu szamba, czujnik deszczu(po informuje o otwartym oknie i zamknie roletę zewnętrzną).
    - Sterowanie zamkami elektronicznymi i automatyką bram
    - Sterowanie ogrzewaniem podłogowym lub grzejnikowym
    - Sterowanie kotłem na pellet
    - Sterowanie rekuperacją, klimatyzacją i wentylacją
    - Sterowanie domofonem i skrzynką na listy
    - Sterowanie domem poprzez „sceny”

    Całość ma opierać się na sterowniku postawionym na Banana Pi M3 który połączony jest z płytką wykonawczą (wejścia/wyjścia) oraz stronie internetowej (lub aplikacji) komunikującej się z sterownikiem.
    System chcę zaprojektować w sposób uniwersalny, czyli strona lub aplikacja ma pozwolić mi na konfiguracje całego systemu (w trybie serwisowym). Konfiguracja ma pozwolić mi korzystać z jednej wersji programu i płytki do sterowanie różnymi domami.

    Oczywiście wiem że rzucam się na głęboką wodę ale myślę że krok po kroku dam rade zbudować taki system. Potrzebuje tylko nakierować się w jakich technologiach powinienem to wykonać.
  • #5
    JacekCz
    Level 38  
    Im mniejszy mam wpływ na debugowanie (np oprogramowanie na serwerach, na tzw "produkcji"), tym mniej chętnie używam C/C++, na rzecz języków opartych na bardziej bezpiecznych, łatwiej debugowalnych maszynach wirtualnych (Java/C#), czy interpreterach. Jednak wyraźny wyjątek (np w logach) jest milion razy lepszy od niejasnych "zwisów".

    Na raspberry bym "niedyskretnie wskazał" na mocną pozycję Pythona, to chyba jeden z języków tam referencyjnych, i domyślam się dobrego wsparcia.
    A i moduły webowe się znajdą. Zarazem w odróżnieniu od PHP jest językiem uniwersalnym, generalnego zastosowania, a nie tylko do skryptów webowych. Na pewno warto go poznać.

    Dodano po 35 [minuty]:

    przetrwac wrote:
    Banana Pi M3 posiada piny GPIO którymi można sterować za pomocą biblioteki WiringPi.
    ...
    Oczywiście wiem że rzucam się na głęboką wodę ale myślę że krok po kroku dam rade zbudować taki system. Potrzebuje tylko nakierować się w jakich technologiach powinienem to wykonać.


    Ja na WiringPI patrzę z tzw uczuciami ambiwalentnymi. Opór budzi już główny zamysł, żeby to wyglądało podobnie jak arduino, zamazywanie faktu że tu jest system operacyjny, a tam "bare metal" itd ... Implementacja digitalWrite i wszystkich innych "wyglądających jak arduino" usilnie stara się to ukryć, ale tego ukryć się nie da. To nie prosty port, ale cały system, z plikami, prawami, wątkami, jądrem itd

    Mam świadomość, że nie wszyscy muszą się z tym zgodzić.
  • #6
    przetrwac
    Level 2  
    JacekCz wrote:
    Im mniejszy mam wpływ na debugowanie (np oprogramowanie na serwerach, na tzw "produkcji"), tym mniej chętnie używam C/C++, na rzecz języków opartych na bardziej bezpiecznych, łatwiej debugowalnych maszynach wirtualnych (Java/C#), czy interpreterach. Jednak wyraźny wyjątek (np w logach) jest milion razy lepszy od niejasnych "zwisów".

    Na raspberry bym "niedyskretnie wskazał" na mocną pozycję Pythona, to chyba jeden z języków tam referencyjnych, i domyślam się dobrego wsparcia.
    A i moduły webowe się znajdą. Zarazem w odróżnieniu od PHP jest językiem uniwersalnym, generalnego zastosowania, a nie tylko do skryptów webowych. Na pewno warto go poznać.
    Dodano po 35 [minuty]:
    przetrwac wrote:
    Banana Pi M3 posiada piny GPIO którymi można sterować za pomocą biblioteki WiringPi.
    ...
    Oczywiście wiem że rzucam się na głęboką wodę ale myślę że krok po kroku dam rade zbudować taki system. Potrzebuje tylko nakierować się w jakich technologiach powinienem to wykonać.


    Ja na WiringPI patrzę z tzw uczuciami ambiwalentnymi. Opór budzi już główny zamysł, żeby to wyglądało podobnie jak arduino, zamazywanie faktu że tu jest system operacyjny, a tam "bare metal" itd ... Implementacja digitalWrite i wszystkich innych "wyglądających jak arduino" usilnie stara się to ukryć, ale tego ukryć się nie da. To nie prosty port, ale cały system, z plikami, prawami, wątkami, jądrem itd

    Mam świadomość, że nie wszyscy muszą się z tym zgodzić.


    Szukałem bibliotek do sterowania GPIO pod Pythona i niestety nie znalazłem bibliotek działających na BPI M3. W jaki sposób sterować pinami nie używając gotowych bibliotek?
  • #7
    JacekCz
    Level 38  
    przetrwac wrote:

    Szukałem bibliotek do sterowania GPIO pod Pythona i niestety nie znalazłem bibliotek działających na BPI M3. W jaki sposób sterować pinami nie używając gotowych bibliotek?


    Nie będę ściemniał, że używałem itd...

    To jest komputer wyposażony w jakiś system operacyjny (jakiej wersji zamierzasz użyć? to czysty serwer, czy procesor graficzny też będziesz używał?)
    A moduły oprogramowania sa (np pythonowe) pod system *)

    Nawet w opisie modułu nie będzie pisało, że pod Banana M3. Jakby szukać ... linuksa pod płytę główną MSI czy Gigabyte.
    W RPI myli jedno: że to jest małe i podobne do mikrokontrolera. A jest bardziej podobne do peceta z sytemem ... np na którym używa się surowego portu LPT1: ... albo pisanie aplikacji windowsowej pod myszkę Logitech

    więc inne spojrzenie

    *) goggle GPIO+python, bardzo wiele linków, wydaje się są na rynku - nie, nie mam własnego zdania)