Integracja Arduino Mega + Ethernet Shield z HA przez MQTT

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

Dzięki :slight_smile:

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”)) {

https://pubsubclient.knolleary.net/api
boolean connect (clientID, [username, password], [willTopic, willQoS, willRetain, willMessage], [cleanSession])

W poniższej linii “DVES_USER” to nazwa użytkownika a następna zmienna - tutaj pusta “” to hasło. AIS nie używa hasła do połączenia z Mosquito dlatego hasło nie jest zdefiniowane.

(client.connect(“arduino01”,“DVES_USER”,"",“arduino01/tele/LWT”,1,true,“Nieaktywny”)

Potrzebuję trochę pomocy, arduino zaprogramowane, broker MQTT “chyba” skonfigurowany, monitor portu potwierdza połączenie lecz nie wiem jak w HA ogarnąć dalej dodanie sensora, chyba autodiscowery powinno to zrobić ? HA na RPI 3 siedzi.

Dokłanie autodiscovery powinno dodać z automatu sensory do HA.

Będę walczył, nie poddaje się bo projekt super i zależy mi żeby to wdrożyć bo pomysł sterowania po LAN a nie WIFI wydaje mi się bardziej bezpieczny.
Jak bym miał prośbę o lekką modyfikację Jolki, a mianowicie pozostawienie tylko jednego przekaźnika i jednego wejścia “kontaktron może być” ale z autodiscovery. Chcę zaadoptować to do sterowania światłem w domu, zależy mi na wejściu pod fizyczny przełącznik na ścianie bistabilny i podpięcie wyjścia arduino pod przekaźnik bistabilny z dwoma stykami do ewentualnej kontroli stanu przekaźnika czy ktoś manualnie nie zapalił światła. Tak czy siak jak bym mógł poprosić o takiego czystego sketcha tylko z przekaźnikiem (bez DHT, RS485 i innych dodatków) będę wdzięczny.

Oczywiście ja innego rozwiązania jak sterowanie po LAN/RS485 nie biorę pod uwagę. Jedynie jakieś mało znaczące sterowniki mogą być po wifi.
Będę robił dokładnie taki projekt na przekaźnikach bistabilnych do sterowanie oświetleniem w domu ale trochę to potrwa bo muszę zakończyć inne projekty i zlecenia. Na razie planuję zakup przekaźników bistabilnych i testowania tego rozwiązania. Założę osobny wątek na forum bo ten dotyczy multisensorów.

Kupiłem w hurtowni przekaźnik F&F BIS 413 z czasówką ale są też wersje bez czasówki BIS 412, mają wyjście przekaźnika NO COM NC pozwoliło by to pobrać sygnał stanu przekaźnika tylko opto izolacja wymagana, tak samo optoizolacja do włączników bistabilnych do arduino bo widzę że sporo osób pisze że często arduino uwalane są przez indukcję w przewodach. Ale faktycznie to na osobny temat.