Dzisiaj zaglądamy do wnętrza prostego "smart" czujnika oświetlenia, który o dziwo został zrealizowany przez producenta w oparciu o TuyaMCU, czyli w oparciu o dodatkowy mikrokontroler komunikujący się z modułem WiFi przez UART. Przeanalizujemy tutaj ich protokół komunikacji oraz spróbujemy uwolnić ten czujnik od chmury, chociaż na ten moment zrealizujemy to poprzez podmiankę modułu WiFi. Na koniec podamy gotową konfigurację OpenBeken dla tego czujnika oraz sprawdzimy jego działanie z Home Assistant.
Temat powstał we współpracy z @DeDaMrAz , ja tego urządzenia fizycznie u siebie nie miałem, jedynie kierowałem poczynaniami kolegi. Wszystkie zdjęcia też pochodzą od kolegi.
Zakup czujnika
Czujnik można znaleźć pod hasłami typu "Tuya WiFi Light sensor illumination brightness sensor" i tak dalej, trzeba uważać, czy wybieramy wersję Zigbee czy WiF:
Czujnik zasilany jest z USB, kabel jest w zestawie:
Czujnik jest dość mały:
Tak wygląda w apce Tuya:
Oryginalne opakowanie:
Lightsensor, GB 9254-2008, mało konkretów
Wnętrze i protokół komunikacji
Zaglądamy do środka, podważamy plastikową pokrywę:
Mamy tu WBR3... pracuję nad nim, ale to nie jest Beken. Data 2022-09-20.
Jest tu oczywiście regulator LDO AMS1117-3.3V by uzyskać 3.3V z 5V z USB, ale widzimy tu też dodatkowy mikrokontroler.
Wygląda to tak, jakby to urządzenie korzystało z TuyaMCU:
Protokół TuyaMCU był opisywany tutaj:
https://www.elektroda.pl/rtvforum/topic3880546.html
Mamy również do tego własny analizator:
https://www.elektroda.com/rtvforum/topic3970199.html#20528459
W związku z tym uruchomiliśmy analizator, kolejno zbierając dane na RX i TX modułu WiFi. Bingo!
Najważniejszy podsłuch pakietów został wykonany na RX modułu WiFi. Patrzymy co MCU do nas wysyła:
Na początku, poza zameldowaniem się, MCU nie dawał pomiarów. Wynikało to stąd, że trzeba było go sparować.
Od tego momentu pojawiły się zmienne:
W aplikacji Tuya dostępna jest opcja "FindMe", która sprawia, że dioda miga. Zmianę jej stanu również udało nam się podsłuchać, jest to zmienna boolean o dpID 101. Podsłuch został wykonany na TX modułu WiFi (to moduł WiFi wysyła jej zmianę do MCU):
Po analizie oceniliśmy:
- dpID 6 to enumeracja, poziom oświetlenia, 0, 1 lub 2
- dpID 7 to poziom oświetlenia w lux
- dpID 101 to "find me" opcja z aplikacji Tuya
Te dpID6 w apce wygląda tak:
Zmiana firmware?
Prace nad WBR3 trwają, ale kolega miał wolny moduł CB3S, więc wlutowaliśmy go na jego miejsce by przetestować kod wsparcia TuyaMCU z OpenBeken:
Potem przygotowaliśmy autoexec.bat OpenBeken:
startDriver TuyaMCU
// always report paired
tuyaMcu_defWiFiState 4
setChannelType 1 Illuminance
setChannelLabel 1 Lux
linkTuyaMCUOutputToChannel 7 val 1
setChannelType 2 Toggle
setChannelLabel 2 FindMe
linkTuyaMCUOutputToChannel 101 bool 2
setChannelType 3 ReadOnly
setChannelLabel 3 LightLevel
linkTuyaMCUOutputToChannel 6 enum 3
Powyższy kod mapuje zmienne z TuyaMCU na kanały OpenBeken. Ustawia im labele do wyświetlenia oraz typy kanałów. Typy kanałów potem determinują też sposób w jaki wyświetla je Home Assistant.
Początkowo próbowaliśmy bez "default wifi state 4", ale bez tego w razie braku MQTT byśmy nie dostawali pomiarów. MCU musi "myśleć", że jest sparowany z chmurą by dawać pomiary.
Sukces! Mamy pomiary na panelu OBK. Teraz jeszcze warto wykonać Home Assistant Discovery, które już jest u nas automatyczne. Poniżej zrzuty ekranu jeszcze sprzed wprowadzenia typu kanału Illuminance:
Jeszcze po dodaniu tej enumeracji poziomu oświetlenia:
Wszystko działa, chociaż docelowo jeszcze ten poziom oświetlenia (enumeracja) dostanie swój typ kanału tak aby wyświetlało się to tekstowo na panelu HA. A w razie czego możecie zawsze to dodać sami we własnym zakresie przez configuration.yaml.
Przycisk parowania w TuyaMCU
Warto jeszcze wrócić uwagę co takiego wysyła TuyaMCU gdy wciśniemy przycisk parowania. Ten przycisk podłączony jest do mikrokontrolera, nie do modułu WiFI:
Wysyłany jest pakiet 55AA0002000001, czyli typ 02 pakietu z 00 00 bajtami danych (czyli bez danych, ostatni bajt, 01 tutaj, to suma kontrolna).
Podsumowanie
Poszło bardzo prosto, a po porcie OBK na WBR3 nawet nie trzeba będzie przelutowywać modułu. Kod obsługi TuyaMCU się sprawdził w nowym środowisku i nie wymagał żadnych zmian. Wszystko działa.
Jedyne co mnie zastanawia to to, czemu w ogóle ten czujnik zrealizowano na TuyaMCU, tj. czemu jest tam dodatkowy mikrokontroler do wykonywania pomiarów oświetlenia?
Raz jeszcze dziękuję @DeDaMrAz za współpracę, poszło bardzo szybko i sprawnie, a my na forum nie mieliśmy jeszcze analizy wnętrza czujnika oświetlenia na USB, więc to też zawsze coś nowego dla naszego działu. Thank you!
Fajne? Ranking DIY Pomogłem? Kup mi kawę.
