Integracja Arduino Mega + Ethernet Shield z HA przez MQTT

Na Twoim miejscu po jednej skrętce rozszerzył bym sieć po lan i na końcu dał AP czy inny router w tej samej sieci z wyłączonym DHCP. Połączć wszystko w jedną sieć (po kablu), zwiększając przy okazji zasięg wi-fi o ogród z nowego punktu dostępowego.

Ale po co robić dodatkowe WiFi na zewnątrz gdzie mamy dużo większą możliwość włamania do takiej sieci jeśli możemy wykorzystać Arduino z Ethernet Shield i mieć wszystko po kablu… pewniej i bezpieczniej…

Wszystko mam po Ethernecie i RS-485. Po USB nie mam spiętego arduino z bramką bo to zawodne rozwiązanie (patrz mysensors).

Fajnie, że mój projekt może komuś posłużyć :slight_smile: Zasadnicze pytanie jaka to odległość od switcha/routera przewodowego w domu? Jeśli powyżej 90m to jedynie po RS485 proponuję to zrobić tak jak w moim projekcie. Jeśli do 90m to po ethernecie.
Dlaczego jedna skrętka będzie za mało ?
W skrzynce wstawiasz Uno albo Mega w zależności od ilości potrzebnych wejść. Pewnie Uno w zupełności wystarczy.

Czyli mogę do Mega w skrzynce podłączy praktycznie wszystko, i to puścić po RS485 do drugiego mega? Nie ma tu ograniczenia w ilości czujników, twitchy, sensorów itd??

Ogólnie oprogramowanie RS485 jest dosyć trudne żeby sterować dwukierunkowo dużą ilością przekaźników i do tego np. bistabilne. Da się to oczywiście zrobić. Najlepiej RS485 spisuje się do zbierania danych z sensorów lub do sterowanie np. tylko z bramki. Do sterowania dwukierunkowego najlepiej użyć Ethernet Shield i po MQTT sterować z bramki. No chyba, że odległość jest ponad 100m to albo zastosowanie po drodze switcha lub uzycie RS-485.

Ograniczenie jest zawsze do ilości wejść w danym arduino ale zawsze można zastosować ekspandery wejść aby to zwiększyć.

1 polubienie

Cześć. Super projekt, idealnie spełnia moje oczekiwania. Przystąpiłem do wdrażania. Napotkałem taki błąd przy kompilowaniu sketchu na nano :
‘output’ was not declared in this scope
O co może chodzić? Dodam że wszystkie potrzebne biblioteki zainstalowałem.
Fajnie by było gdyby dało się zainstalować BME680 w miejsce BME280. Fajnie mierzy jakość powietrza -mogłoby być bardzo przydatne przy automatyzacji jakiegoś przewietrzania /wentylowania pomieszczeń. Głownie mi chodzi o sypialnie. Mam teraz taki czujnik podłączony bezpośrednio do maliny z HA. Widzę jak spada jakość powietrza jak w pomieszczeniu siedzą np 2 osoby.
Ogólnie to gratulacje za super robotę przy tym projekcie. Chętnie będę się dzielił uwagami.

Na GitHubie tego projektu masz output.ino - to jest potrzebne jedynie do odczytu kodów RF 433.
https://github.com/ironek69/Arduino-to-Home-Assistant-MQTT-multisensor/blob/master/output.ino

https://github.com/ironek69/Arduino-to-Home-Assistant-MQTT-multisensor/

OK. Dzięki za podpowiedź. Udało się pominąć fragment odpowiedzialny za RF433. Zadziałało! A gdybym jednak chciał mieć odbiornik RF433 to jak powinien wyglądać sketch?

Na GitHubie jest kod z odbiornikiem RF 433. Wtedy output.ino musi być w folderze z głównym Sketchem i tyle.

Trzeba bylo w końcu zrobić porządek z kabelkami i Arduino Mega wpakować w skrzynkę. Do tego doszedł wyświetlacz LCD 16x2 który zalegał w szafie. Gotowy shield pasujący do Arduino Mega i Uno. Jedyną modyfikację którą należy zrobić aby działał równocześnie z Ethernet Shield to wypiąć 10 pin z wyświetlacza gdyż jest on używany przez Ethernet Shield który nie działa gdy LCD go używa. Shield posiada także 4 przyciski podpięte pod pin analogowy A0. Na wyświetlaczu możemy cyklicznie lub jako scroll - wyświetlać dane z każdego zdalnego sensora, stany sprawności komunikacji, itp…
Dodatkowo użyłem w projekcie serwera czasu NTP który mam w swojej sieci.
Można dzięki niemu przesyłać godzinę i datę po RS485 do multisensorów.
Dodatkowo można wykorzystać czas do zapisu logów lub odczytów na kartę SD której gniazdo jest w Ethernet Shield.

1 polubienie

Naprawdę nieźle to ogarnąłeś. Gratulacje.

1 polubienie

A gdzie w sketchu bramki można wpisać usera i hasło do brokera MQTT?

W funkcji reconnect() jest linia client.connect(“arduino01”,“DVES_USER”,“”,“arduino01/tele/LWT”,1,true,“Nieaktywny”)

Składnia tej linni wygląda jak poniżej:
boolean connect (clientID, username, password, willTopic, willQoS, willRetain, willMessage, cleanSession)

W moim sketchu
ClientID = arduino01
username = DVES_USER
password = brak
willTopic = arduino01/tele/LWT
willQoS = 1
willRetain = true
willMessage = Nieaktywny

void reconnect() {
  // Oczekowani na polaczenie z serwerem
  while (!client.connected()) {
    if (SerialPrint == 1) {Serial.print("Attempting MQTT connection...");}
    // Attempt to connect
    if (client.connect("arduino01","DVES_USER","","arduino01/tele/LWT",1,true,"Nieaktywny")) {

Wielkie dzięki. Zadziało. Bramka połączyła się z brokerem MQTT w HA. Udało mi się (chyba) połączyć multisensor z bramką po RS485 bo wyświetlacz przy multisensorze pokzauje OK ! Ale serial monitor w bramce pokazuje “Sensor 1 receive errors: 3” i licznik się zwiększa. W webserwerze wszystkie odczyty z nano są zerowe. W nasłuchu mqtt w HA mam tekie rzeczy np: “Wiadomość 195 otrzymana w homeassistant/sensor/arduino01_pressure1/state o godzinie 21:58: niedostępny” . W MQTT Explorer wszystkie wartości z topików też niedostępne.
Co to może być? Coś trzeba jeszcze zmieniać w sketchach czy powinno wszystko ruszyć od strzała?

Możliwe że nie masz transmisji dwukierunkowej po RS485. Arduino Mega wysyła request do Arduino NANO o przesłanie danych i nano odpowiada wysyłając stany.
Używasz tych samych pinów co ja w mega i nano ? Z tym nie jest tak różowo bo nie na każdych pinach działa transmisja. Jeśli nie chcesz przesyłać requestów z Mega do Nano a tylko odczyty z Nano do Mega to możesz część sketcha odpowiedzialnego za transmisję z Mega do Nano wyrzucić. No i warunki w drugim sketchu żeby Nano wysyłało po odebraniu requesta od Mega.

Próbowałem to samo z Wemos D1 i mam tylko transmisję w jedną stronę. Właśnie Wemos D1 odbiera a nie wysyła. Na razie nie rozwiązałem tego problemu.

Pokombinuje z innymi pinami. Zacznę od tych “standardowych” które wykorzystują projekty RS485 w internetach czyli TX1 i RX0 w Nano i 0 i 1 w Mega. A tak z ciekawości dlaczego nie wykorzystałeś własnie tych portów? Są ku temu jakieś przeciwwskazania?
I zastanawiam się dlaczego w Twoim kodzie na Mega ta linijka jest zdezaktywowana:
//#define RS485 9 // 9 Pin Arduino do ktorego podlaczony jest konwerter RS485

Dziwne w ogóle z tym RS485 że tak dziwnie działa. Gdzieś czytałem że w MySensors bramka i sensory komunikujące się po RS485 działają bardzo niestabilnie. Przecież ta komunikacja to chyab podstawa w całej automatyce gdzie niezawodność jest wymagana na 1 miejscu.

Fajny ten Twój projekt. Śledzę z niecierpliwością dalszy rozwój bo wszędzie wszyscy pchają się w jakieś WIFI/zigbee i inne zwavy a projekty z komunikacją po kablu się jakoś słabo rozwijają.

Trochę testowałem to rozwiązanie i kwestia pinów jest bardzo ważna… W projekcie wykorzystuję software serial więc nie muszą to być piny dedykowane. Szczerze to u mnie na dedykowanych pojawiały się krzaki w serial monitorze ale to tak działa.
Dlatego użyłem:
SoftwareSerial rs485 (50, 48); // receive pin, transmit pin
const byte ENABLE_PIN = 25; // (w RS485 dwa środkowe zmostkowane piny)

Fakt ta zakomentowana linia to jakaś pozostałość moich testów na różnych pinach. Dopiero tak jak powyżej działa prawidłowo.

Też słyszałem takie opinie o niestabilności mysensors. Powiem szczerze że od czasu jak podłączyłem u mnie multi-sensor po RS485 wszystko stabilnie działa.
Mam zrobiony odczyt co 10 sekund a liczba błędów w transmisji RS485 na dobę to około 6-7 a wynika to głównie z opóźnień Arduino Mega. Może to kwestia optymalizacji kodu bo trochę tam napchałem ostatnio jeszcze pobieranie czasu z serwera NTP. Jeśli ktoś nie wysyła danych z HA do multisensora to sam odczyt wystarczy nawet co kilka minut. U mnie steruję lampką LED z poziomu HA.

Cześć
Na wstępie muszę przyznać że kawał dobrej roboty wykonałeś.
Ale potrzebuje Twojej pomocy ponieważ poległem na tym gdzie mam wpisać hasło z mqtt , powiedzmy że mam login “MQTT” i hasło “123456” proszę Cię wskaż mi miejsce gdzie miałbym to umieścić
z góry bardzo dziękuję za pomoc
pozdrawiam