Skocz do zawartości

Automatyka domowa - wybór systemu


Pomocna odpowiedź

Cześć, jestem czytelnikiem Forbota od dłuższego czasu interesuje się elektroniką ale tylko hobbystycznie przez co mam wiedzę znikomą w wielu tematach - proszę o wyrozumiałość 😔

Robiłem kilka przymiarek to automatyki domowej zanim odkryłem że są „gotowe” rozwiązania takie jak: Supla, HomeAssistant, OpenHab, Domoticz i inne. Szukałem porównania, możliwości skalowalność i nie znalazłem odpowiedzi na pytanie który system by sprostał tematowi jaki mam, a jest ono dość proste:

- Arduino (kilka sztuk)
- komunikacja z Arduino tylko LAN (moduł Ethernet lub Serial + moduł Wifi)
- Arduino jako klient, przekażniki czujniki sterowane przewodowo przez Arduino
- serwerze własny z Linuxem (offline !) jak Domoticz, OpenHab itp.

Teraz mam „zrobiony” od podstaw taki system bardzo prosty i działa dobrze ale ciągle rozbudowuje go o kolejne dodatki i tak się zastanawiam - jak było wiele razy powtarzane żeby nie wyważać otwartych drzwi - lepiej pomóc już działającej społeczności niż samemu ją tworzyć od nowa.

Nie oczekuje gotowego rozwiązania tylko wskazania drogi którą pójść czy rozwijać swój projekt? czy jest rozwiąznie które wyżej wymienione wymagania ogarnie? Z Domoticzem przez chwilę było dobrze ale nie po kablu.

Jeżeli będzie zainteresowanie tematem mogę rozpisać co teraz zostało zrobione i jak to działa teraz, może mam dobry pomysł tylko go trzeba opakować sensowniej i nie pakować się w gotowe (ogromne programowo) rozwiązania.

Dziękuję za przeczytanie.

Link do komentarza
Share on other sites

@upgrade wszystko fajnie opisałeś, ale dalej nic nie wiemy. Napisałeś, że masz mieć: kilka kółek, dyszel, szyby, 4 szt kabelków i guzik, a następnie pytasz 

3 godziny temu, upgrade napisał:

czy rozwijać swój projekt

Tak, zawsze warto, ale jeśli oczekujesz pomocy to napisz proszę co chcesz zbudować. 

Edytowano przez SOYER
Link do komentarza
Share on other sites

3 godziny temu, upgrade napisał:

mogę rozpisać co teraz zostało zrobione i jak to działa teraz, może mam dobry pomysł tylko go trzeba opakować sensowniej i nie pakować się w gotowe (ogromne programowo) rozwiązania

Opisanie tego co masz to na pewno dobry pomysł. Co do gotowych rozwiązań... myślisz, że podołasz zadaniu zrobienia całej domowej automatyki bez gotowców?

Link do komentarza
Share on other sites

(edytowany)
20 godzin temu, ethanak napisał:

Opisanie tego co masz to na pewno dobry pomysł. Co do gotowych rozwiązań... myślisz, że podołasz zadaniu zrobienia całej domowej automatyki bez gotowców?

Jak na razie daje rade z systemem, Stack Overflow moim przyjacielem 😉 i jest ok.
Opiszę temat ale muszę na brudno napisać wszystko tak żeby było zrozumiałe i logiczne bez domysłów a to mi chwile zajmie bo nie brałem pod uwagę że ktoś tym się zainteresuje ale podzielę to na etapy. Jak będzie zainteresowanie to dalej będę wyjaśniał temat.

21 godzin temu, SOYER napisał:

@upgrade wszystko fajnie opisałeś, ale dalej nic nie wiemy. Napisałeś, że masz mieć: kilka kółek, dyszel, szyby, 4 szt kabelków i guzik, a następnie pytasz 

Tak, zawsze warto, ale jeśli oczekujesz pomocy to napisz proszę co chcesz zbudować. 

Tak jak wcześniej napisałem:

- Arduino (kilka sztuk)
w każdym pokoju po jednym jako element wykonawczy
 

- komunikacja z Arduino tylko LAN (moduł Ethernet lub Serial + moduł Wifi)
mam w każdym pokoju kabel Ethernet pociągnięty
 

- Arduino jako klient, przekażniki czujniki sterowane przewodowo przez Arduino
• sterowanie oświetleniem przez tranzystory (stan wysoki na pinie 4 zapala taśmę ledową)
• czujnik ruchu podpięty pod pin 5 zwraca wartość do "systemu" i na tej podstawie podejmuje akcje
• kontaktrony na dzwiach (wejścowe, balkonowe) działanie jak wyżej

w planach:
- sterownie plafonem led za pomocą diody IR (teraz jest pilot dedykowany do tego, który już zgrałem sobie)
- 'zrobienie' (kpienie bardziej) czujników na RF 433 (sonoff ma takie za 17zł) i sparowanie ich (zgranie kodu sniferem na arduino) i wykorzystanie go ako akcję

- użycie czujnika temperatury

Na chwilę obecną działa mi kilka fajnych rzeczy ale to opiszę póżniej.

Moje pytanie bardziej brzmi czy jest jakiś system który pozwala na uzycie Arduino + modół ethernet jako klienta, w Domoticzu tak można ale bramki są tylko po wifi po kablu nie ma takich opcji (po za RS 485). Tak jak napisałem mogę się dostowsować do czegoś nowego ale nie zan systemy automatyki co ładnie działa przez TCP.

Edytowano przez upgrade
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

ok, udało się zrobić taki ogólny zarys sytuacyjny

Zasada działania jest bardzo prosta. Na Arduino wgrywany jest jeden program (taki sam dla Mega, Nano i UNO - zmiana jest tylko w konfigu ilości pinów i port)

Sposobem komunikacji jest tylko adres IP serwera i port dla klienta

serwer ma IP 192.168.1.10 i nasłuchuje na portach (5001, 5002, 5003, 5004)

klient ma IP (obojętnie jakie z tej klasy) i komunikuje się na wcześniej wybranym porcie z serwerem

np. każdy klient łączy się na innym porcie tj.: KUCHNIA / 5001 ; POKÓJ / 5002  [...]

na zaletą tego rozwiązania jest to, że muszę się martwić tylko o adres IP serwera i zapisać gdzieś sobie jaki port ma Arduino w np. kuchni

Kolejną zaletą jest to, że całe Arduino jest konfigurowalne na serwerze w każdej chwili w pliku konfiguracyjnym lub po prostu przez polecenie:

 <F 10 O>  <function / nr pin / output>

zmieniam funkcje tego pinu np z input na output (w załączniku cała tabelka)

 

W Domoticzu musiałem wcześniej wiedzieć jakie piny będę używał i do czego, przy wgrywaniu oprogramowania (mySensors) i przy każdej zmianie wgrywać oprogramowanie od nowa, tutaj mogę na bieżąco zmieniać funkcję pinu. (co czyni klienta końcowego "prawie" bezobsługowego, w teorii)

Ustawienie stanu wysokiego na pinie: (więcej w grafikach które dołączyłem)

<S 10 H>  <set / nr pin / HIGH (hard)>

 

Do sterowania wszystkim potrzebny jest odpalony skrypt z "serwerem" który nasłuchuje na wybranym porcie i zapisuje pliki w RamDisku

Drugi skrypt który zamienia postać tekstową na postać binarną i wysyła dane do Arduino, gdzie to są analizowane bit po bicie i podejmowane decyzje na tej podstawie.

np.

S 10 H

 --- >  S (ustaw na pinie wartość) 10 (numer pinu) H (stan wysoki)

 

Nie wiem czy dobrze to opisałem i logicznie?

Nie opisuje tutaj jak dokładnie działają programy bo musze porobić komentarze żeby było to zrozumiałe.

 

Tak wiem, że można coś zrobić / lepiej / szybciej / łatwiej, zrobiłem to na tyle dobrze na ile mam wiedzy zdobytej hobbistycznie i pomocy dobrych ludzi takich jak Wy.

 

 

01 Serwer Oprogramowanie.jpg

02 Schemat Ogolny.jpg

03 Transmisja.jpg

04 Komunikacja.jpg

Link do komentarza
Share on other sites

Ponieważ ten etap mam już za sobą (i wiem co popsułem), jedna uwaga:

Identyfikacja klienta na podstawie numeru portu, z którym się łączy to owszem nowatorski pomysł, ale jakoś tak niespecjalnie użyteczny. W końcu te wszystkie Arduini nie służą jedynie do zbierania danych (czyli serwer główny wie, czy światło w toalecie jest włączone) ale są również urządzeniam wykonawczymi (tzn. serwer potrafi zapalić/zgasić światło w toalecie). Stąd konieczność albo posiadania przez serwer informacji o IP tych klientów (czyli cała kołomyjka z różnymi portami jest niepotrzebna - bo przecież można zidentyfikować "toaletę" po adresie IP przychodzącego połączenia) - albo walenia broadcastami po sieci przy każdym komunikacie (taki wynalazek rodem z wczesnych Windowsów, raczej słabo używalny).

Przypominam, że Linux potrafi się posługiwać zeroconfem (w końcu to linuksowy wynalazek, Apple go tylko rozwinął) i nawet znajomość IP klienta nie jest potrzebna - klient się bardzo grzecznie może przedstawić przez mDNS, odpadają kombinacje z ustawianiem IP na klientach, wystarczy proste DHCP.

Założenie, że w każdym pokoju jest dokładnie jedno Arduino podłączone do ethernetu to też takie niezbyt rozwojowe. Bo o ile kolejnego pokoju pewnie nie dobudujesz - o tyle ilość urządzeń komunikujących się z serwerem może wzrastać (i najpewniej będzie wzrastać) i jedno Arduino przestanie wystarczać. W opisywanym przez Ciebie modelu dodanie kolejnego klienta to ciężka fizyczna robota...

Poza tym rozumiem, że użyty termin "offline" oznacza, że serwer nie jest podłączony do Internetu a nie że jest wyłączony 😉

Ot, tak przed poranną kawą...

  • Lubię! 2
Link do komentarza
Share on other sites

(edytowany)

ad.1,2  tak też była o tym dyskusja i kolega który mi pomagał (bardzo łebski człowiek i kumaty - niestety nie ma już z nim kontaktu) po licznych przmyśleniach (jak na moje warunki i wiedzę) powiedział że to bardzo dobry sposób. Tak wiem że można coś takiego zrobić próbował mi napisać początek progamu który identyfikuje podłączających się klientów. Jaka napisałes na podstawie tego jak się przedstawią ale to już było w QT a tam mam wiedzę = 0

ad.3 No właśnie nie, mogę dodać Ardu+ESP wpisuje numer portu 5010 ilośc pinów i już gotowe za np. szafą sobie lezy. A który pin gdzie wpinam to już na serwerze w konfigu robię.

ad.4 Tak 😬

dziękuję za uwagi ad 1i2 zapiszę sobie to do planów i może kiedyś przerobię 😉 jak się nauczę.

Edytowano przez upgrade
Link do komentarza
Share on other sites

14 minut temu, upgrade napisał:

ale to juz było w QT a tam mam wiedzę = 0

Bo kolega znał Qt a wiedzę o C/Pythonie miał pewnie zerową... Przecież IP klienta bierzesz bezpośrednio z socketa (on raczej wie kto się z nim łączy), a rozwiązywanie IP->nazwa poprzez zwykłe gethostbyaddr. I wtedy nie ma różnicy, czy klient przedstawia się przez mDNS, czy masz jakiś lokalny serwer DNS (np. sprzęgnięty z DHCP) , czy może po prostu IP jest wpisany do /etc/hosts.

Bez obrazy - ale coś mi się wydaje, że jednak powinieneś skorzystać z gotowca 😉

 

 

Link do komentarza
Share on other sites

ok trochę się nie zrozumieliśmy, zgadzam się ze wszystkim, to co napisałem to kolega mi próbował napisać początek programu żebym sobie go dalej rozwijał w Qt a że mam wiedzę = 0 na temat Qt pytona i C (po za Arduino) no to poległem. Mimo wszystko dzięki za radę. Jeszcze powalczę z gotowcami, już znalazłem bramkę po TCP na arduino jako klient Domoticza.

Link do komentarza
Share on other sites

Zaraz moment... owszem, nie zrozumieliśmy się.

Napisałeś najpierw:

Dnia 24.03.2020 o 12:53, upgrade napisał:
Dnia 23.03.2020 o 16:40, ethanak napisał:

Opisanie tego co masz to na pewno dobry pomysł. Co do gotowych rozwiązań... myślisz, że podołasz zadaniu zrobienia całej domowej automatyki bez gotowców?

Jak na razie daje rade z systemem, Stack Overflow moim przyjacielem 😉 i jest ok.

A teraz twierdzisz, że:

6 godzin temu, upgrade napisał:

że mam wiedzę = 0 na temat Qt pytona i C (po za Arduino)

Chłopie, zdecyduj się! Ja pisałem od zera niewielki system do domu.. tyle że jestem zawodowym programistą (C, Python), a do tego Domoticz nadawał się wtedy mniej więcej do zdalnego zgaszenia światła w łazience. A przy tym wielu rzeczy musiałem się douczyć...

Weź Domoticza i nie marnuj ludziom czasu.

 

Link do komentarza
Share on other sites

Dnia 25.03.2020 o 22:59, upgrade napisał:

ok, udało się zrobić taki ogólny zarys sytuacyjny

Zasada działania jest bardzo prosta. Na Arduino wgrywany jest jeden program (taki sam dla Mega, Nano i UNO - zmiana jest tylko w konfigu ilości pinów i port)

Sposobem komunikacji jest tylko adres IP serwera i port dla klienta

serwer ma IP 192.168.1.10 i nasłuchuje na portach (5001, 5002, 5003, 5004)

klient ma IP (obojętnie jakie z tej klasy) i komunikuje się na wcześniej wybranym porcie z serwerem

np. każdy klient łączy się na innym porcie tj.: KUCHNIA / 5001 ; POKÓJ / 5002  [...]

na zaletą tego rozwiązania jest to, że muszę się martwić tylko o adres IP serwera i zapisać gdzieś sobie jaki port ma Arduino w np. kuchni

Kolejną zaletą jest to, że całe Arduino jest konfigurowalne na serwerze w każdej chwili w pliku konfiguracyjnym lub po prostu przez polecenie:


 <F 10 O>  <function / nr pin / output>

zmieniam funkcje tego pinu np z input na output (w załączniku cała tabelka)

 

W Domoticzu musiałem wcześniej wiedzieć jakie piny będę używał i do czego, przy wgrywaniu oprogramowania (mySensors) i przy każdej zmianie wgrywać oprogramowanie od nowa, tutaj mogę na bieżąco zmieniać funkcję pinu. (co czyni klienta końcowego "prawie" bezobsługowego, w teorii)

Ustawienie stanu wysokiego na pinie: (więcej w grafikach które dołączyłem)


<S 10 H>  <set / nr pin / HIGH (hard)>

 

Do sterowania wszystkim potrzebny jest odpalony skrypt z "serwerem" który nasłuchuje na wybranym porcie i zapisuje pliki w RamDisku

Drugi skrypt który zamienia postać tekstową na postać binarną i wysyła dane do Arduino, gdzie to są analizowane bit po bicie i podejmowane decyzje na tej podstawie.

np.


S 10 H

 --- >  S (ustaw na pinie wartość) 10 (numer pinu) H (stan wysoki)

 

Nie wiem czy dobrze to opisałem i logicznie?

Nie opisuje tutaj jak dokładnie działają programy bo musze porobić komentarze żeby było to zrozumiałe.

 

Tak wiem, że można coś zrobić / lepiej / szybciej / łatwiej, zrobiłem to na tyle dobrze na ile mam wiedzy zdobytej hobbistycznie i pomocy dobrych ludzi takich jak Wy.

 

 

01 Serwer Oprogramowanie.jpg

02 Schemat Ogolny.jpg

03 Transmisja.jpg

04 Komunikacja.jpg

Jak serwer padnie to wszystko nie działa?

 

Link do komentarza
Share on other sites

15 godzin temu, fast_rabbit napisał:

Jak serwer padnie to wszystko nie działa?

 

Tak, tylko to chyba wszędzie prawie jak serwer nie działa to za wiele się nie poszaleje.

 

17 godzin temu, ethanak napisał:

Chłopie, zdecyduj się! Ja pisałem od zera niewielki system do domu.. tyle że jestem zawodowym programistą (C, Python), a do tego Domoticz nadawał się wtedy mniej więcej do zdalnego zgaszenia światła w łazience. A przy tym wielu rzeczy musiałem się douczyć...

Weź Domoticza i nie marnuj ludziom czasu.

 

Domyślam się że napisanie całęj automatyki domowej to jest mega praca nawet dla kogoś kto to zna i umie temat. Wątek był zaczęty głównie dlatego ze nie mogłem znaleźć bramki ethernet dla Arduino, oraz że to co mam ma tą chwilę działa i nie wiem czy dłubać czy uczyć się gotowca (od nowa). Dziękuję za pomoc.

Link do komentarza
Share on other sites

7 godzin temu, upgrade napisał:
23 godziny temu, fast_rabbit napisał:

Jak serwer padnie to wszystko nie działa?

 

Tak, tylko to chyba wszędzie prawie jak serwer nie działa to za wiele się nie poszaleje.

Jeśli dobrze zaprojektujesz całość to większość będzie działać - lepiej lub gorzej, ale będzie. Tyle że trzeba zmienić całkowicie podejście do tematu - serwer ma dostawać informację typu "ktoś wyszedł z toalety" i wydawać polecenia "zgaś światło w toalecie" a nie "na arduino numer trzy stan pinu zmienił się z wysokiego na niski" i "ustaw stan wysoki na pinie numer siedem w arduin numer dwa".

Link do komentarza
Share on other sites

9 godzin temu, upgrade napisał:

Tak, tylko to chyba wszędzie prawie jak serwer nie działa to za wiele się nie poszaleje.

 

Domyślam się że napisanie całęj automatyki domowej to jest mega praca nawet dla kogoś kto to zna i umie temat. Wątek był zaczęty głównie dlatego ze nie mogłem znaleźć bramki ethernet dla Arduino, oraz że to co mam ma tą chwilę działa i nie wiem czy dłubać czy uczyć się gotowca (od nowa). Dziękuję za pomoc.

W amatorskich systemach tak w dobrych profesjonalnych rozwiązaniach jest inaczej. Nie będzie działać wszystko ale nie całość. Mimo awarii serwera nadal można sterować roletami z domu, co najwyżej nie działa dostęp przez internet.

To co teraz zrobiłeś przypomina Sonoff gdzie aby włączyć oświetlenie telefonem musi działać internet i chiński serwer a nie zawsze tak jest.

Zbudowałeś drogą zabawkę w pewnych sytuacjach utrudniającą życie. Zrobiłeś to dla siebie, nie na sprzedaż więc nie masz problemu, że Twoja firma zbankrutuje, bo klienci takiego systemu nie będą chcieli ale jak jeszcze bardziej rozbudujesz system i zaczną się problemy z serwerem domownicy nie będą zadowoleni z przykładowo korzystania z WC po ciemku i siedzenia w zimnym pomieszczeniu bo regulacja temperatury nie działa. System powinien być zbudowany jak napisał @ethanak. Każdy z modułów powinien być autonomiczy. Serwer tylko pośredniczy w komunikacji z internetem, loguje zdarzenia, symuluje obecność domowników. Może realizować funkcję budzika. Dobrze zrobiony system powinien umożliwiać komunikację z internetem pomijając serwer. W takiej sytuacji, nawet gdy serwer nie działa, można zdalnie zmienić stan urządzenia czy wpłynąć na jego działanie. Serwer powinien być dodatkiem a nie sercem systemu!

Edytowano przez fast_rabbit
Link do komentarza
Share on other sites

Dlatego właśnie na początku tego wątku poprosiłem autora o napisanie co chce zrobić, a nie jak. To forum nauczyło mnie wielu rzeczy, jedną z ważniejszych jest to, że pomysł amatora na rozwiązanie jakiegoś problemu, niekoniecznie jest, a zazwyczaj nie jest tożsamy, ze sposobem rozwiązania tego samego zagadnienia przez zawodowca. 

Dlatego zawsze warto podać założenia i zapytać o sugestie doświadczonych użytkowników, zaoszczędzi to wiele czasu, pracy i nerwów 😉

  • Lubię! 1
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.