UWAGA: Strona oraz Forum Smart'ny Dom nie będzie dostępne 23 Grudnia 2024 ze względu na przenoszenie serwisu na mocniejszą maszynę.
W tym czasie polecam poświęcenie swojego czasu na pomoc partnerowi w przygotowaniu udanych Świąt 😉
Za niedogodności z góry przepraszam, admin
Przeglądam różne rozwiązania i zgłupiałem totalnie. To są moje początki z HA jaki i z Arduino, ale chciałbym zrobić sobie sterowanie na ATmega328 gdzie będzie 8 przycisków i 8 przekaźników, a te płytki mają się łączyć z bramą po RS485, brama ma się łączyć z HA po Ethernet.
Do brzegu... co mam wybrać, aby to wszytko zadziałało z HA? Gdzie znajdę kod do bramy Ethernet z RS485 oraz dla modułów wykonawczych?
W szufladzie mam moduł Ethernet WIZnet W5500 USR-ES1 - nada się?
PS
Ja mam szukać zwykłej bramki czy MQTT?
Atmega to cc+ więc Mysensors pod HA i do przodu ,
Chcesz przykład pod Domoticz to pisz
@isom, a mógłbyś (jeżeli to nie problem) podpowiedzieć (link czy coś) co ja konkretnie potrzebuję aby to zadziało?
@piotrm kod albo jak wolisz skech do tej atmegi i własny serwer HA , w kodzie podajesz IP serwera i to co chcesz wysłać a reszta się robi sama
Są chyba gotowce pod HA pewnie tylko mysensors mqtt
kod albo jak wolisz skech do tej atmegi
he he trochę bawiłem się ATmegami, ale w BASCOM i tam zawsze był kod, a tu w Arduino mamy sketch 😊
Serwer HA już mam, udało się uruchomić i nawet działa.
Podsumowując... szukam bramy MySensors Ethernet RS485 MQTT, tak?
A czy przypadkiem kolega nie potrzebuje po prostu 8przycisków i 8 przekaźników sterowanych z HA ( i żadne bramy są niepotrzebne).
Jeśli tak , to ja mam ESP8266 (wemos) ,który steruje przez mcp23017 16 przekaźnikami , na sofcie ESPHome ( on bezposrednio komunikuje się z HA) , służy mi to do sterowania zaworami do zraszaczy.
Niestety połączenie WiFi , a nie ethernet.
A czy przypadkiem kolega nie potrzebuje po prostu 8przycisków i 8 przekaźników sterowanych z HA ( i żadne bramy są niepotrzebne).
Tak, potrzebuję 8 przycisków i 8 przekaźników w jednym module, ale dodatkowo chciałbym aby to było niezależne od HA czy innego systemu. Chodzi o to, że przyciski mają sterować przekaźnikami, a jak podłącze pod np HA to będę miał dodatkowe możliwości - gdyby coś się wydarzyło z serwerem czy coś to podstawowa funkcjonalność pozostanie.
Ogólnie mój pomysł polega na tym aby wykorzystać to co mam, a dokładniej:
- płytki które kiedyś tam zaprojektowałem, ale kod pisany w BASCOM i nie do końca potrafiłem zrobić jakieś sensowne sterowanie przez przeglądarkę. Aby dopasować swoje moduły do Arduino muszę tylko wymienić ATmegę8 na ATmegę328 oraz rezonator kwarcowy 11.0592MHz na 16MHz
- mam też przeciągnięty kabelek przez całe mieszkanie, wszystkie pomieszczenia
Myślę, że kabelek RS485 będzie pewniejszy niż Wi-Fi (oczywiście również myślałem o ESP) Pomysł z bramą Ethernet znów wziął się stąd, że wcześniej plan był taki iż montuję Raspberry Pi na szynie DIN w rozdzielnicy domowej i to będzie "serce" sterowania w domu, ale po przebojach z kartami SD etc stwierdziłem, że to nie to i teraz system jest na serwerze domowym - wirtualna maszyna. Łatwiej jest mi podpiąć bramę pod LAN niż kombinować z USB itd.
Mały krok w moich podbojach HA, Arduino i MySensors 😉
Mam taki oto kod do bramy - proszę się nie śmiać jak coś jest nie tak, jak już mówiłem wcześniej, Arduino to dla mnie trochę taki język eskimoski he he
// Włącz wydruki debugowania do monitora szeregowego #define MY_DEBUG // Włącz warstwę transportową RS485 #define MY_RS485 // Włącz warstwę transportową RS485 #define MY_RS485_DE_PIN 2 // Zdefiniuj to, aby umożliwić zarządzanie DE-pin na zdefiniowanym pinie #define MY_RS485_BAUD_RATE 57600 // Ustaw szybkość transmisji RS485 do użycia //#define MY_RS485_HWSERIAL Serial // Włącz tę opcję, jeśli RS485 jest podłączony do sprzętowego portu szeregowego //#define MY_NODE_ID 1 // Adres modułu w sieci RS485 //#define MY_SPLASH_SCREEN_DISABLED // Wyłącz ekran powitalny MySensors // Włącz typ modułu ethernetowego bramy #define MY_GATEWAY_W5100 // W5100 moduł Ethernet SPI włączony (opcjonalnie w przypadku korzystania z osłony/modułu zarządzającego sygnałem SPI_EN) //#define MY_W5100_SPI_EN 4 // Włącz komunikację UDP //#define MY_USE_UDP // Jeśli używasz UDP, musisz ustawić MY_CONTROLLER_IP_ADDRESS lub MY_CONTROLLER_URL_ADDRESS poniżej // Włącz tutaj MY_IP_ADDRESS, jeśli chcesz mieć statyczny adres IP (bez DHCP) #define MY_IP_ADDRESS 192,168,1,21 // Jeśli używasz statycznego adresu IP, możesz również zdefiniować adres bramy i podsieci #define MY_IP_GATEWAY_ADDRESS 192,168,1,1 #define MY_IP_SUBNET_ADDRESS 255,255,255,0 // Okres odnowienia w przypadku korzystania z DHCP //#define MY_IP_RENEWAL_INTERVAL 60000 // Port, który ma być otwarty w trybie serwera węzła lub port do kontaktu w trybie klienta #define MY_PORT 5003 // Adres IP kontrolera. Włącza tryb klienta (domyślnie tryb „serwer”). // Włącz to również, jeśli używane jest MY_USE_UDP i chcesz gdzieś wysłać dane z czujnika. //#define MY_CONTROLLER_IP_ADDRESS 192,168,1,11 //#define MY_CONTROLLER_URL_ADDRESS "my.controller.org" // Adres MAC może być dowolny, ale powinien być unikalny w Twojej sieci. // Nowsze płyty mają adres MAC wydrukowany na spodzie płytki PCB, którego można (opcjonalnie) użyć. // Zauważ, że większość przykładów Arduino używa "DEAD BEEF FEED" jako adresu MAC. #define MY_MAC_ADDRESS 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED // Włącz tryb dołączania #define MY_INCLUSION_MODE_FEATURE // Włącz przycisk trybu dołączania na bramie //#define MY_INCLUSION_BUTTON_FEATURE // Ustaw czas trwania trybu włączenia (w sekundach) #define MY_INCLUSION_MODE_DURATION 60 // Cyfrowy pin używany do przycisku trybu włączania //#define MY_INCLUSION_MODE_BUTTON_PIN 3 // Ustaw okres migania #define MY_DEFAULT_LED_BLINK_PERIOD 300 // Diody na RX/TX/Err // Usuń komentarz, aby zastąpić domyślne konfiguracje sprzętowe //#define MY_DEFAULT_ERR_LED_PIN 7 // Err LED pin //#define MY_DEFAULT_RX_LED_PIN 8 // RX LED pin //#define MY_DEFAULT_TX_LED_PIN 9 // TX LED pin #if defined(MY_USE_UDP) #include <EthernetUdp.h> #endif #include <Ethernet.h> #include <MySensors.h> #define W5500_RESET_PIN 4 void before() { pinMode(W5500_RESET_PIN, OUTPUT); digitalWrite(W5500_RESET_PIN, LOW); delay(10); digitalWrite(W5500_RESET_PIN, HIGH); delay(1000); } void setup() { // Skonfiguruj lokalnie podłączone czujniki } void presentation() { // Tutaj zaprezentuj lokalnie podłączone czujniki } void loop() { // Wyślij lokalnie dołączone dane z czujników tutaj }
I teraz tak:
- debugowanie bramy pokazuje
0 MCO:BGN:INIT GW,CP=RSNGA---,FQ=16,REL=255,VER=2.3.2 4 MCO:BGN:BFR 1015 TSM:INIT 1016 TSF:WUR:MS=0 1018 TSM:INIT:TSP OK 1020 TSM:INIT:GW MODE 1022 TSM:READY:ID=0,PAR=0,DIS=0 1026 MCO:REG:NOT NEEDED 1588 GWT:TIN:IP=192.168.1.21 2591 MCO:BGN:STP 2592 MCO:BGN:INIT OK,TSP=1 2595 TSM:READY:NWD REQ 2600 ?TSF:MSG:SEND,0-0-255-255,s=255,c=3,t=20,pt=0,l=0,sg=0,ft=0,st=OK: 24091 GWT:TSA:ETH OK 24095 GWT:RFC:MSG=0;255;3;0;2; 24100 GWT:RFC:MSG=255;255;3;0;20; 24107 ?TSF:MSG:SEND,0-0-255-255,s=255,c=3,t=20,pt=1,l=1,sg=0,ft=0,st=OK:0 34192 GWT:RFC:MSG=0;255;3;0;2; 44293 GWT:RFC:MSG=0;255;3;0;2; 54393 GWT:RFC:MSG=0;255;3;0;2; 64493 GWT:RFC:MSG=0;255;3;0;2; 74604 GWT:RFC:MSG=0;255;3;0;2; 84705 GWT:RFC:MSG=0;255;3;0;2; 94804 GWT:RFC:MSG=0;255;3;0;2; 104905 GWT:RFC:MSG=0;255;3;0;2; 115006 GWT:RFC:MSG=0;255;3;0;2; 125106 GWT:RFC:MSG=0;255;3;0;2; 135206 GWT:RFC:MSG=0;255;3;0;2;
Mogę pingować swoją bramę.
Gdy wszedłem HA -> Konfiguracja -> Urządzenia oraz usługi -> Dodaj integrację -> znalazłem i dodałem MySensors
I teraz w HA -> Konfiguracja -> Urządzenia i usługi mam (chyba) swoją bramę 😉
Czy to znaczy, że wszytko poszło dobrze i teraz mogę się zająć swoimi modułami?
Przy pomocy ESPEasy,ESP8266 i mcp23017 zrealizujesz niezależne od HA 8przycisków 8 przekaźników , których stan jak i sterowanie przekaźników będą możliwe z HA ,jak będzie połączenie wifi.
Na tą chwilę nie bardzo chcę modułów Wi-Fi, jeżeli mój plan się nie powiedzie to może, ale na tą chwilę będę próbował z RS485 + LAN
Na podstawie kodów znalezionych w sieci zmajstrowałem coś takiego:
//#define MY_DEBUG // Włącz warstwę transportową RS485 #define MY_RS485 // Włącz warstwę transportową RS485 #define MY_RS485_DE_PIN 2 // Zdefiniuj to, aby umożliwić zarządzanie DE-pin na zdefiniowanym pinie #define MY_RS485_BAUD_RATE 57600 // Ustaw szybkość transmisji RS485 do użycia #define MY_RS485_HWSERIAL Serial // Włącz tę opcję, jeśli RS485 jest podłączony do sprzętowego portu szeregowego #define MY_NODE_ID 1 // Adres modułu w sieci RS485 #define MY_SPLASH_SCREEN_DISABLED // Wyłącz ekran powitalny MySensors #define SN "SocketNT_RS485" #define SV "1.0" #include <MySensors.h> #include <Bounce2.h> #define RELAY_ON 1 #define RELAY_OFF 0 #define noRelays 8 const int relayPin[] = {5, 3, A0, A1, A2, A3, A4, A5}; const int buttonPin[] = {13, 12, 11, 10, 9, 8, 7, 6}; class Relay { public: int buttonPin; int relayPin; boolean relayState; }; Relay Relays[noRelays]; Bounce debouncer[noRelays]; MyMessage msg[noRelays]; void setup() { for (int i = 0; i < noRelays; i++) { Relays[i].buttonPin = buttonPin[i]; Relays[i].relayPin = relayPin[i]; msg[i].sensor = i; msg[i].type = V_LIGHT; pinMode(Relays[i].buttonPin, INPUT_PULLUP); pinMode(Relays[i].relayPin, OUTPUT); Relays[i].relayState = loadState(i); digitalWrite(Relays[i].relayPin, Relays[i].relayState?RELAY_ON:RELAY_OFF); send(msg[i].set(Relays[i].relayState?true:false)); debouncer[i] = Bounce(); debouncer[i].attach(buttonPin[i]); debouncer[i].interval(5); } } void presentation() { sendSketchInfo(SN, SV); for (int i = 0; i < noRelays; i++) present(i, S_LIGHT); } void loop() { for (byte i = 0; i < noRelays; i++) { if (debouncer[i].update()) { int value = debouncer[i].read(); if ( value == LOW) { Relays[i].relayState = !Relays[i].relayState; digitalWrite(Relays[i].relayPin, Relays[i].relayState?RELAY_ON:RELAY_OFF); send(msg[i].set(Relays[i].relayState?true:false)); saveState(i, Relays[i].relayState); } } } } void receive(const MyMessage &message) { if (message.type == V_LIGHT) { if (message.sensor < noRelays) { Relays[message.sensor].relayState = message.getBool(); digitalWrite(Relays[message.sensor].relayPin, Relays[message.sensor].relayState?RELAY_ON:RELAY_OFF); saveState( message.sensor, Relays[message.sensor].relayState); } } }
Sprzęt to chwilowo pająk (Arduino UNO jako brama i NANO jako moduł) zanim nie kupię i nie wymienię ATmegi w swoim module.
Kod ruszył i działa naprawdę dobrze na pierwsze testy, ale niestety sterowanie przyciskami działa tylko jak jestem podłączony do bramy 🙁
@piotrm Sterowanie działa w połączeniu z bramą bo brama jak sama nazwa wskazuje łączy noda czyli twoje NANO z serwerem , nie spodziewaj się innego działania , jeżeli chcesz korzystać z bardziej rozbudowanej sieci , a jeśli to ma być jeden moduł to do kodu bramy trzeba dopisać to co odpowiada za przyciski i przekaźniki i wtedy brama jesst jednocześnie nodem i działa zupełnie niezależnie, oczywiście na tym UNO zabraknie GPIO ale testy możesz robić. Jak to ma działać po rs485 to w czym widzisz problem ? Brama i tak musi mieć połączenie ze wszystkimi nodami żeby działała komunikacja
@isom oczywiście masz racje 😉
Cały ten pomysł, aby działało bez bramy wziął się stąd, że wcześniej miąłem projekt gdzie to Raspberry Pi było bramą dla RS485. Gdy coś się wydarzyło z malinką (a to coś z systemem, a to karta SD itd.) to wszyto padało i dlatego robiłem cos takiego, że moduł bez podłączenia do RS485 musiał pracować samodzielnie. Tu rzeczywiście jest inaczej, brama jest na AVR i trzeba się mocno postarać aby "zabić" uC. Teraz po odłączeniu kabelka Ethernet od bramy wszystko działa bez serwera czyli uważam, że wszystko jest OK
Wszystko ma działać po RS485, brama ma być jedna, a modułów co najmniej kilka. Brama ma być bramą, bez żadnych dodatkowych rzeczy (przekaźniki, przyciski etc)
To teraz mam jeszcze jedno pytanie bo coś nie bardzo mogę to zrozumieć. Czytam, że w MySensors można też używać MQTT W takim razie, jeżeli zmienię na swojej bramie konfigurację to coś zmieni w szybkości działaniu, będzie lepiej/gorzej? Chodzi oczywiście o bramę RS485 <> Ethernet <> HA