Szukam i nie mogę znaleźć czy jest gotowe rozwiązanie czy jedynie droga dookoła aby to wykonać.
Mam w domu sterownik WAGO 750-881, na który napisałem program do sterowania większością automatyki w domu, lecz ma on dość wolną wizualizację, z której się ciężko korzysta, więc chce przenieść część wizualizacyjną do HA, lecz mój program jest napisany tak aby wszystkie wejścia rozpoznawał po R/F-TRIG, a więc po zboczu narastania bądź opadania stanu wejściowego. W HA znalazłem jedynie przyciski zmieniające stan 0 lub 1, można by zrobić to jako switch + automatyzację co zmieni jego stan z 1 na 0 po 1s.
Jak po modbus z HA wysyłać najlepiej jedynie krótką “1” ?
Ktoś wie z jaką częstotliwością można odpytywać WAGO po modbus TCP/IP, aby prezentacja stanów pracowała płynnie i nie powodowała problemów z komunikacją ? (Mam ok 300 rejestrów do odpytywania, większość to stany 0/1, a część to jakieś wartości jak np. położenie rolety itd.)
PS: Czy ktoś wie gdzie można znaleźć przykłady implementacji do HA, najlepiej wraz z prezentacja działania. Na oficjalnej stronie jest instrukcja jak i co, lecz często jest tak, że spędzam kilka godzin aby to stworzyć, a finalnie i tak działa inaczej niż chciałem.
Z tego wynika: Modbus - Home Assistant
Że platforma light korzysta z komend ON / OFF podawanych na stałe, a ja mam np. krótką “1” jako ON, kolejna krótka 1 jako OFF. Z roletami podobnie krótka “1” jako praca (góra czy dół), druga krótka “1” jako stop.
Switch, ma tak samo Modbus - Home Assistant komenda ON / OFF.
W moim przypadku jeden przycisk jest jako on i off w zależności od aktualnego stanu urządzenia.
To nie do konca tak działa: w HA działa zgodnie z funkcjami Modbus, w którym są dostępne następujące kody:
#01 – odczyt wyjść bitowych (Coils)
#02 – odczyt wejść bitowych (Discrete Inputs)
#03 – odczyt n rejestrów (Holding Registers)
#04 – odczyt n rejestrów wejściowych (Input Registers)
#05 – zapis 1 bitu (Coil)
#06 – zapis 1 rejestru (Holding Register)
#07 – odczyt statusu
#08 – test diagnostyczny
#0F – zapis n bitów (Coils)
#10 – zapis n rejestrów (Holding Registers)
#11 – identyfikacja urządzenia slave
#80 – #FF – zarezerwowane na odpowiedzi błędne
Wyjście Modbus ma swój określony rejestr, w przypadku powyżej to jest coil (jeden bit - 0 albo1) o np. adresie 2005 (light name: “MR-DIO-1 out6”), aby włączyć wyjście wysyłane jest polecenie #05 (zapis 1 bitu (coil)) przez HA poprzez wywołanie “pod spodem usługi” modbus.write_coil:
Poczytaj jak działa komunikacja Modbus i wszystko będzie jasne, HA tylko wywołuje odpowiednie kody funkcji na odpowiednich rejestrach.
Jeżeli źle skonfigurujesz w HA light np. podasz, że jest to coils (bajt) a powinno być coil (bit) (bo tak jest w specyfikacji urządzenia) to dojdzie do wysłania poprawnych funkcji do niepoprawnych rejestrów i nie będzie działać.
Tak, tylko on tą “1” wysyła i trzyma aż nie zmienisz stanu na 0, a ja potrzebuje wysłać 1 i zaraz zmienić to na 0.
Czy “zerowanie” muszę wykonać po stronie PLC wtedy ?
Nie, HA tylko wysyła komendą “1” a to sterownik PLC trzyma w rejestrze tę wartość, tę wartość może zmienić program w sterowniku PLC, np. na podstawie przycisku podłaczonego do wejscia tego sterownika - Ty to robisz na podstawie zbocza - zbocze ustawia wyjście, kolejne zbocze zeruje wyjście, prawda?
HA zgodnie z parametrem scan_interval w konfiguracji Modbus również odczytuje stan tego wyjścia ze sterownika PLC więc statusy wejść/wyjść są synchronizowane.
Masz rację, problem tylko, że ja ten zmiennej nigdzie nie zeruje… w wago jest opcja toggle lub tap i wszystkie mam jako tap, a więc same się zerują po puszczeniu przycisku. Muszę w takim razie zmienić to w programie w WAGO.
WAGO ma modbus tcp, wystawia IO fizyczne na modbus i da się je czytać bez problemu (pisać do nich też chociaż to trochę niebezpieczne bo da się nadpisać program nawet). A jak chcesz inne zmienne to przy deklaracji musisz przypisać im rejestr.
Jest tak jak myślałem, zrobiłem test i muszę w PLC zerować zmienne. Jak w HA przełączy to trzyma “1”, a więc muszę po wykryciu “1” zmieniać stan na “0”.
W wago masz różne możliwości jeżeli chodzi o modbusa.
Do rejestrów 4096 … 12287 i 12288 … 24575 masz możliwość programowania swoich zmiennych (deklarowania ich w programie) np:
test AT %MX0.0 : BOOL; > dostępny jest na rejestrze 12288 jako R/W.
Natomiast do zmiennych 0 … 255 masz dostęp, są to 1:1 wystawione wejścia fizyczne sterownika
To samo 512…767 tyczy się wyjść.
Zmienna wyzerowana np. modbus pool, zmienia stan w HA po kilku sekundach również na “0” także stan czyta poprawnie.
Chyba to zrobię wykorzystując obecne zmienne do sterowania z wizualizacji w wago, a na “feedback” zadeklaruje nowe zmienne, które przypisane zostaną do fizycznych wyjść, a jeżeli staną się “1” wyzerują stan zmiennej wejściowej.
Chociaż wolałbym aby switch w HA wysyłał, krótką “1” i zmieniał w “0” wtedy jako potwierdzenie mógłbym użyć wartości wyjścia np. załączenie światła wysłałoby “1”->“0”, a potwierdzenie załączenia = fizyczne wyjście ze sterownika, a program w WAGO mógłby pozostać bez zmian (tam już niestety prawie nie mam miejsca).
Ojj różne, głównie mam takie jakie zdobyłem za darmo np. z demontażu przy modernizacjach z jakiś obiektów itd.
Więc część mam WAGO 788-312, część phoenixa 2961105 - one na 230VAC jak mają zwierać to lubią się kleić więc korzystam z nich do zwierania sygnałów jak np otwarcie bramy czy coś, jeszcze jakieś findera - generalnie co było to mam, większych problemów nie ma jedynie te phoenixa cienkie co się kleiły - ale te interfejsówki mają to do siebie.
Tak, dlatego na PLC zrobiłem dom, a nie na jakimś gotowym rozwiązaniu, bo wszystkie sprzęty miałem za darmo z demontaży (a te sterowniki PLC WAGO potrafią działać niezawodnie i po 20 lat z mojego doświadczenia) teraz walczę z HA bo nie mam miejsca już w sterowniku, a wizualizacja na wago działa wolno, stąd lepiej to robić na zewnątrz. Z HA pracuję od ok tygodnia, i musze się nauczyć go bo dużo rzeczy trzeba niestety robić trochę w koło jak to w programowaniu, a często część da się zrobić prościej tylko nie wie się jak…
Co niestety nie działa. Jest jakiś prosty sposób aby to zrobić ? Czy muszę po stronie WAGO wyjścia wpisać do zmiennych logicznych ? np do tej samej ale na bicie 2 ?
Wychodzi na to, że HA ma bug i dlatego verify do discrete_input nie działa.