Arduino mega na RS485/MODBUS

Przyszedł czas na małe zmiany w szafie i tak jestem zmuszony zmienić sposób podłączenia paru urządzeń i tak jako pierwszy idzie na ogień Arduino Mega z podpiętymi do niego przekaźnikami od oświetlenia. Zaczynając od początku:
Mam terminal a na nim postawionego Proxmoxa. Na Proxmoxie jako VM stoi HA. Do niego mam podpięte Arduino Mega przez port USB, który steruje przekaźnikami. Korzystam z integracji MySensors.
Chciałbym teraz podłączyć kolejne Arduino do sterowania przekaźnikami ale oddalone o ok 50m od terminala. W tym celu chciałbym przejść na RS485/MODBUS i o to w tym miejscu mam parę niewiadomych.

  1. Czy jeżeli posiadam Waveshare RS485 na USB pod który to konwerter mam podłączony SDM630 (licznik energii) jestem w stanie dołączyć do tego Arduimno mega z konwerterem UART na RS485?
  2. Czy jeżeli jest to niemożliwe to muszę np z Arduino zrobić bramkę RS485 i podłączyć ją po USB do HA i wtedy przez MySensors dodać podłączone do niej kolejne Arduino po RS485?
  3. Czy w obu przypadkach się mylę i wygodniej będzie zastosować np. taki konwerter https://allegro.pl/oferta/konwerter-rs485-na-ethernet-rs485-rj45-tcp-ip-11875904543

Będę wdzięczy za wszelkie sugestie i małe naprowadzenie na to jak zrobić aby rozwiązanie było stabilne.

ad 1 - tak jest to możliwe.
ad 2 - Jeśli wybierzesz rozwiązanie z pkt 1 to Mega musi być jako urządzenie modbus slave (nie MySensor). Inne przypadki są wykluczają
ad 3 - daje dość dużą swobodę w wyborze tego co zainstalujesz na Medze.

Dzięki za odpowiedź! :slight_smile:

W takim przypadku dodaje do yaml urządzenie modbus slave - tak jak SDM630 a szkic w arduino ma przypisane poszczególne elementy wykonawcze (przekaźniki) ? Czy musze dodać to do yaml?

Możesz trochę rozwinąć myśl?

Jeśli zbudujesz przekaźniki sterowane przez modbus to dodajesz zamiast sensorów switch jako enecje.
Osobiście tego nie robiłem ale jest to możliwe.
W drugim przypadku będzie to działać jako “przedłużenie” uart i powinno działać w wszystkich rozwiązaniach działający po łączu szeregowym.

Dzięki za odpowiedzi, dopiero teraz mam chwile czasu żeby się tym zająć. Także…
Wolałbym zostać przy tym co mam czyli Arduino Mega z działającym skeczem po USB na mysensors. Chciałbym jedynie zmienić metodę podłączenia czyli wyeliminować USB i zastąpić to RS485. Mam teoretyczne pytanie: czy jeże zakupie Konwerter RS485 TO ETH (np taki https://a.allegroimg.com/…/RS485-TO-ETH-B-przemyslowy… ) połączę go z Arduino mega poprzez konwerter UART TTL do RS485 (np taki https://a.allegroimg.com/…/588-Modul-konwerter-MAX485… ) to czy będę mógł skorzystać w HA z My Sensors i integracją po TCP?
Oprócz możliwości zwiększenia odległość arduino od terminala chciałbym też uzyskać stabilność polegającą na tym, że gdy restartuje terminal to “restartuje” się też arduino co powoduje załadowanie ponowne skeczu skutkujące chwilowym złączeniem się wszystkich przekaźników. Nie wspomnę już o problemach przy kilku arduino z tym samym identyfikatorem sprzętu, każdy restart HA powoduje losowe przypisanie ich do porów USB. Chciałbym tego uniknąć dlatego pomyślałem nad RS485 na ETH, wtedy rozumiem, że reset terminala nie wpływa na działanie arduino?
Zastanawia mnie też czy np restart routera go którego jest wpięty Konwerter nie ma wpływu na nieprzerwane działanie skeczu na arduino a co za tym idzie brak nie przewidzianych załączeń przekaźników. Będę wdzięczny za wszelkie sugestie, bo może jestem w błędzie i jest jakieś lepsze rozwiązanie :slight_smile:

Skoro masz kilka urządzeń nierozpoznawalnych ani w normalny sposób (porty tty są rozdawane losowo w każdym systemie przy starcie, jeśli masz podpiętych kilka identycznych urządzeń z punktu widzenia systemu, to jest nie do przeskoczenia), ani “by-id” to musisz je skonfigurować po portach sprzętowych komputera (“terminala”), czyli podać ścieżki w/g gniazdka USB, gdzie podpiąłeś dany sprzęt - to ścieżka “by-device” (taka ścieżka wymusza, aby nigdy nie przepinać urządzeń w inne gniazda!!)


na rysunku w niebieskiej ramce jest port tty
w czerwonej “by-id” (w przypadku RPi Pico to jest unikalna ścieżka, bo każdy egzemplarz ma unikalny numer seryjny, ale dla urządzeń bez jawnego numery nie będziesz miał zawsze tej samej ścieżki)
a w zielonej jest właśnie ścieżka “po porcie” = “by-path”

To jest problem wadliwej konstrukcji tych twoich urządzeń - są niepoprawnie zaprojektowane do twojego zastosowania i stąd ten problem.
Nie wnikam czy to kwestia błędnego wykorzystania sprzętu - wykorzystanie GPIO, które zmieniają stan podczas bootowania MCU, czy nieodpowiednio napisanego oprogramowania, czyli niewłaściwej inicjalizacji tych GPIO, (na tym obszarze nie pomogę, bo o Atmelu to mam bardzo blade pojęcie), ale problemu powinieneś szukać u źródła czyli odpowiednio przeprojektować ten sprzęt i/lub oprogramowanie, zamiast się kurczowo trzymać rozwiązania, które nie działa poprawnie…

Myślę, że dorzucając dodatkowy sprzęt zrobisz sobie jeszcze dodatkowe problemy do rozwiązania.

1 polubienie

Zgadza się to wiem, ale rozumiem, że mówisz o przypisaniu portów fizycznych do konkretnego urządzenia na poziomie proxmoxa (tak mam zrobione)? Czy gdzieś w HA?

Nie mam pojęcia co się dzieje przy przekazywaniu portów (nie mam takiej konfiguracji by się pobawić i dojść do tego organoleptycznie :stuck_out_tongue: ), ponieważ żaden system nie jest w stanie rozpoznać i rozróżnić nierozróżnialnych urządzeń pewnie musisz zrobić to w obu systemach.

PS masz więcej niż jedną VM? (jeśli nie to trochę byś sobie ułątwił życie instalując HAOS na sprzęcie, a nie w VM).

Mam kilka, dlatego Proxmox…
W takim razie pozostaje mi się z tym samemu pomęczyć, chyba, że ktoś jeszcze coś podsunie :slight_smile: