Przekaźniki i oddalone wejścia modbus

Cześć temat modbus i oddalonych wejść wyjść.
Zgodnie z dokumentacją aby odczytać stan wejść trzeba odpytać rejestr 02.
Można tylko odpytać jednocześnie o wszystkie wejścia binarne.

Czytaj stan wejścia transoptora
wyślij: FF 02 00 00 00 08 6C 12
powrót: FF 02 01 01 51 A0
uwagi: Czwarty bajt ramki Return, Bit0 - Bit7 0x01 reprezentuje sygnał wejściowy transoptora 1 - transoptor 8, 0 reprezentuje niski poziom, 1 reprezentuje wysoki poziom

I teraz problem się zaczyna jak rozdzielić to na poszczególne sensory binarne w Esphome??

Czy przerabiał ktoś już ten temat??

Nie przerabiałem ale się wypowiem :wink: - tu jest odpowiedź (maski bitowe)

Podrzucenie jakiegoś przykładowego kody znacznie by ułatwiło.

Nie wiem czy coś więcej jeszcze można dodać niż to co podlinkowałem?
Z ilości wyświetleń to chyba nawet tam nie zaglądałeś :wink:
To jest tylko jedna opcja więcej w definicji sensora.

bitmask: 0x1

Czytałem to już kilka razy ale z implementacją ma problemy wieczorem podeśle kod yaml to może uda się jakoś rozwiązać

To ja spróbuje wyjaśnić, masz wynik w postaci bajtu (8 bitów), np. 10001001 czyli:
1 (bit 7) - transoptor 8: 1 - poziom wysoki
0 (bit 6) - transoptor 7: 0 - poziom niski
0 (bit 5) - transoptor 6: 0 - poziom niski
0 (bit 4) - transoptor 5: 0 - poziom niski
1 (bit 3) - transoptor 4: 1 - poziom wysoki
0 (bit 2) - transoptor 3: 0 - poziom niski
0 (bit 1) - transoptor 2: 0 - poziom niski
1 (bit 0) - transoptor 1: 1 - poziom wysoki
Jeżeli chcesz mieć wynik tylko:

  • z transoptor’a 1 to robisz maskę bitową bitmask: 0x1 i wszystko pozostałe jest zerowane, wynik ostateczny to bajt w postaci 00000001
  • z transoptor’a 4 to robisz maskę bitową bitmask: 0x8 i wszystko pozostałe jest zerowane, wynik ostateczny to bajt w postaci 00001000
  • z transoptor’a 8 to robisz maskę bitową bitmask: 0x80 i wszystko pozostałe jest zerowane, wynik ostateczny to bajt w postaci 10000000
2 Likes