Seweryn
(Seweryn Śmigielski)
21 Listopad 2023 12:42
1
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??
RobinI30
(RobinI30)
21 Listopad 2023 12:48
2
Nie przerabiałem ale się wypowiem - tu jest odpowiedź (maski bitowe)
Seweryn
(Seweryn Śmigielski)
21 Listopad 2023 14:04
3
Podrzucenie jakiegoś przykładowego kody znacznie by ułatwiło.
RobinI30
(RobinI30)
22 Listopad 2023 09:00
4
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ś
To jest tylko jedna opcja więcej w definicji sensora.
bitmask: 0x1
Seweryn
(Seweryn Śmigielski)
22 Listopad 2023 10:05
5
Czytałem to już kilka razy ale z implementacją ma problemy wieczorem podeśle kod yaml to może uda się jakoś rozwiązać
macek
22 Listopad 2023 15:40
6
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 polubienia