Pokażę tutaj dziwny przekaźnik sterowany przez WiFi zbudowany w oparciu o zewnętrzny MCU komunikający się z modułem WiFi przez protokół TuyaMCU. W przypadku tak prostego przekaźnika jest to dla mnie zupełna nowość i wcześniej się z tym nie spotkałem. Z tego powodu najpierw przetestuję ten produkt z aplikacją Tuya, potem przechwycę komunikacje MCU z BK7231 a na koniec dopiero zmienię mu wsad na OpenBeken.
Zakup WL-SW1
Przy zakupie gadżetu nic nie wskazuje na to, że ma on tak nietypową budowę, chociaż cena jest dość duża:
Sprzedawca chwali się załączaniem światła o danej godzinie bądź porze, ale czy to nie jest obecne w każdym urządzeniu Tuya?
Nawet w OpenBeken też mamy zdarzenia wschodu i zachodu słońca...
Zobaczmy zatem co dostajemy w praktyce:
Zawartość zestawu:
Kod QR do instrukcji:
Wnętrze WL-SW1
Podważamy obudowę i zaglądamy do środka:
Początkowo wygląda normalnie, ale po chwili....
Widać, żę tu jest osobno moduł WiFi - CB2S (oparty na BK7231N) oraz osobno jest mikrokontroler i chyba też układ od kontroli RF.
To by tłumaczyło, czemu tu zastosowano zewnętrzny MCU.
Pewnie komunikują się one przez protokół TuyaMCU, opisywany tutaj:
TuyaMCU - komunikacja pomiędzy mikrokontrolerem a modułem WiFi
Reszta fotek:
Układ zwyczajowo zasila step down oparty na BP2525:
Podsłuchiwanie komunikacji WL-SW1
TuyaMCU, tak jak opisane jest to w poświęconym temu protokołowi temacie, opiera się o UART. Mamy do tego gotowy analizator który jest w stanie podsłuchać pakiety i wyświetlić je w czytelny dla człowieka sposób:
Analizator TuyaMCU - dekoder pakietów UART dla urządzeń Tuya - dpID detektor
Repozytorium: https://github.com/openshwprojects/TuyaMCUAnalyzer
Idea cała polega na tym, że wykonuje się w aplikacji Tuya jakąś operację i jednocześnie podsłuchuje się wysyłane pakiety.
Zatem trzeba najpierw sparować produkt z chmurą:
Ok, sparowane, zobaczmy co tu mamy z opcji dostępne:
Troszkę tego jset, mamy m. in:
- konfigurację przełącznika (bistabilny, monostabilny, itd)
- stan przekaźnika - nie wiem co to jest, opcje są wpisane jako "Option1", potem "Option2" itd...?
- tryb pracy LED - albo świeci wtedy co przekaźnik jest załączony, albo odwrotnie...
Jest też child lock, czyli blokada przed dziećmi, odblokowywana specjalną sekwencją operacji:
Oczywiście są też powiadomienia offline, itd:
Wersja firmware:
No i mój układ do przechwytywania dpID:
Zebrane informacje - komunikacja TuyaMCU
Zgodnie z zapowiedzią. Najpierw log z parowania, a potem poszczególne dpID. Parowanie:
Received by WiFi module:
55 AA 03 01 00 2A 7B2270223A22666B6B31646732317678676D6B6B6E30222C2276223A22312E302E31222C226D223A307D C1
HEADER VER=03 Product LEN {"p":"fkk1dg21vxgmkkn0","v":"1.0.1","m":0} CHK
Received by WiFi module:
55 AA 03 02 00 00 04
HEADER VER=03 McuConf LEN CHK
Received by WiFi module:
55 AA 03 03 00 00 05
HEADER VER=03 WifiState LEN CHK
Received by WiFi module:
55 AA 03 00 00 01 01 04
HEADER VER=03 Heartbeat LEN 01 CHK
Received by WiFi module:
55 AA 03 00 00 01 01 04
HEADER VER=03 Heartbeat LEN 01 CHK
after pair
Received by WiFi module:
55 AA 03 00 00 01 01 04
HEADER VER=03 Heartbeat LEN 01 CHK
Received by WiFi module:
55 AA 03 1C 00 00 1E
HEADER VER=03 Date LEN CHK
Received by WiFi module:
55 AA 03 00 00 01 01 04
HEADER VER=03 Heartbeat LEN 01 CHK
Received by WiFi module:
55 AA 03 00 00 01 01 04
HEADER VER=03 Heartbeat LEN 01 CHK
Received by WiFi module:
55 AA 03 03 00 00 05
HEADER VER=03 WifiState LEN CHK
Received by WiFi module:
55 AA 03 07 00 05 01 01 00 01 00 11
HEADER VER=03 State LEN fnId=1 Bool V=0 CHK
Received by WiFi module:
55 AA 03 07 00 05 26 04 00 01 00 39
HEADER VER=03 State LEN fnId=38 Enum V=0 CHK
Received by WiFi module:
55 AA 03 03 00 00 05
HEADER VER=03 WifiState LEN CHK
Received by WiFi module:
55 AA 03 07 00 05 2F 04 00 01 00 42
HEADER VER=03 State LEN fnId=47 Enum V=0 CHK
Received by WiFi module:
55 AA 03 07 00 05 27 04 00 01 01 3B
HEADER VER=03 State LEN fnId=39 Enum V=1 CHK
Received by WiFi module:
55 AA 03 07 00 05 28 01 00 01 00 38
HEADER VER=03 State LEN fnId=40 Bool V=0 CHK
Received by WiFi module:
55 AA 03 07 00 04 29 03 00 00 39
HEADER VER=03 State LEN fnId=41 Str V= CHK
Received by WiFi module:
55 AA 03 07 00 04 2A 03 00 00 3A
HEADER VER=03 State LEN fnId=42 Str V= CHK
Received by WiFi module:
55 AA 03 07 00 04 2B 03 00 00 3B
HEADER VER=03 State LEN fnId=43 Str V= CHK
Received by WiFi module:
55 AA 03 07 00 05 01 01 00 01 00 11
HEADER VER=03 State LEN fnId=1 Bool V=0 CHK
Received by WiFi module:
55 AA 03 07 00 05 26 04 00 01 00 39
HEADER VER=03 State LEN fnId=38 Enum V=0 CHK
Received by WiFi module:
55 AA 03 07 00 05 2F 04 00 01 00 42
HEADER VER=03 State LEN fnId=47 Enum V=0 CHK
Received by WiFi module:
55 AA 03 07 00 05 27 04 00 01 01 3B
HEADER VER=03 State LEN fnId=39 Enum V=1 CHK
Received by WiFi module:
55 AA 03 07 00 05 28 01 00 01 00 38
HEADER VER=03 State LEN fnId=40 Bool V=0 CHK
Received by WiFi module:
55 AA 03 07 00 04 29 03 00 00 39
HEADER VER=03 State LEN fnId=41 Str V= CHK
Received by WiFi module:
55 AA 03 07 00 04 2A 03 00 00 3A
HEADER VER=03 State LEN fnId=42 Str V= CHK
Received by WiFi module:
55 AA 03 07 00 04 2B 03 00 00 3B
HEADER VER=03 State LEN fnId=43 Str V= CHK
Received by WiFi module:
55 AA 03 03 00 00 05
HEADER VER=03 WifiState LEN CHK
Received by WiFi module:
55 AA 03 00 00 01 01 04
HEADER VER=03 Heartbeat LEN 01 CHK
Received by WiFi module:
55 AA 03 00 00 01 01 04
HEADER VER=03 Heartbeat LEN 01 CHK
Zmiana on/off w apce:
Received by WiFi module:
55 AA 03 00 00 01 01 04
HEADER VER=03 Heartbeat LEN 01 CHK
Received by WiFi module:
55 AA 03 00 00 01 01 04
HEADER VER=03 Heartbeat LEN 01 CHK
Received by WiFi module:
55 AA 03 07 00 05 01 01 00 01 01 12
HEADER VER=03 State LEN fnId=1 Bool V=1 CHK
Received by WiFi module:
55 AA 03 07 00 05 01 01 00 01 00 11
HEADER VER=03 State LEN fnId=1 Bool V=0 CHK
Received by WiFi module:
55 AA 03 07 00 05 01 01 00 01 01 12
HEADER VER=03 State LEN fnId=1 Bool V=1 CHK
Received by WiFi module:
55 AA 03 07 00 05 01 01 00 01 00 11
HEADER VER=03 State LEN fnId=1 Bool V=0 CHK
Rocker switch - ustawiam state synchronous:
Received by WiFi module:
55 AA 03 07 00 05 2F 04 00 01 01 43
HEADER VER=03 State LEN fnId=47 Enum V=1 CHK
Received by WiFi module:
55 AA 03 00 00 01 01 04
HEADER VER=03 Heartbeat LEN 01 CHK
Rocker switch - ustawiam button switch:
Received by WiFi module:
55 AA 03 07 00 05 2F 04 00 01 02 44
HEADER VER=03 State LEN fnId=47 Enum V=2 CHK Rocker switch - flip to state change:
Received by WiFi module:
55 AA 03 00 00 01 01 04
HEADER VER=03 Heartbeat LEN 01 CHK
Received by WiFi module:
55 AA 03 07 00 05 2F 04 00 01 00 42
HEADER VER=03 State LEN fnId=47 Enum V=0 CHK Relay status - ustawiam option 2:
Received by WiFi module:
55 AA 03 07 00 05 26 04 00 01 01 3A
HEADER VER=03 State LEN fnId=38 Enum V=1 CHK Relay status - ustawiam option 3:
Received by WiFi module:
55 AA 03 07 00 05 26 04 00 01 02 3B
HEADER VER=03 State LEN fnId=38 Enum V=2 CHK Relay status - ustawiam option 1:
Received by WiFi module:
55 AA 03 07 00 05 26 04 00 01 00 39
HEADER VER=03 State LEN fnId=38 Enum V=0 CHK
Received by WiFi module:
55 AA 03 00 00 01 01 04
HEADER VER=03 Heartbeat LEN 01 CHK Light mode - ustawiam option 3:
55 AA 03 07 00 05 27 04 00 01 00 3A
HEADER VER=03 State LEN fnId=39 Enum V=0 CHK Light mode - ustawiam option 1:
55 AA 03 07 00 05 27 04 00 01 01 3B
HEADER VER=03 State LEN fnId=39 Enum V=1 CHK Child lock on:
Received by WiFi module:
55 AA 03 00 00 01 01 04
HEADER VER=03 Heartbeat LEN 01 CHK
Received by WiFi module:
55 AA 03 07 00 05 28 01 00 01 01 39
HEADER VER=03 State LEN fnId=40 Bool V=1 CHK Child lock off:
55 AA 03 07 00 05 28 01 00 01 00 38
HEADER VER=03 State LEN fnId=40 Bool V=0 CHK Countdown - 13h:
Received by WiFi module:
55 AA 03 07 00 08 09 02 00 04 0000B6D0 A6
HEADER VER=03 State LEN fnId=9 Val V=46800 CHK Countdown usunięty:
55 AA 03 07 00 08 09 02 00 04 00000000 20
HEADER VER=03 State LEN fnId=9 Val V=0 CHK Countdown - 1h:
55 AA 03 07 00 08 09 02 00 04 00000000 20
HEADER VER=03 State LEN fnId=9 Val V=0 CHK Wgrywanie i konfiguracja OBK
BK7231 komunikuje się z TuyaMCU na tym samym porcie UART który służy do programowania, więc trzeba usunąć spoiwo, by zerwać połączenie:
Potem lutujemy przewody do nóżek CB2S ale nie zwieramy ich do płytki-matki:
Wsad wgrywamy standardowo naszym flasherem:
https://github.com/openshwprojects/BK7231GUIFlashTool
Nie ma tu GPIO do konfigurowania, tylko trzeba napisać autoexec.bat:
https://github.com/openshwprojects/OpenBK7231T_App/blob/main/docs/autoexecExamples.md
Powyższa dokumentacja linkuje do tematów Elektrody powiązanych z danym przykładem autoexec.
Oto podstawowy, przykładowy autoexec.bat dla tego urządzenia:
startDriver TuyaMCU
// set TuyaMCU baud rate
//tuyaMcu_setBaudRate 115200
// set TuyaMCU default wifi state 0x04, which means "paired",
// because some TuyaMCU MCUs will not report all data
// unless they think they are connected to cloud
tuyaMcu_defWiFiState 4
// dpID 1 is relay
setChannelType 1 Toggle
linkTuyaMCUOutputToChannel 1 bool 1
Powyższy autoexec.bat mapuje dpID 1 czyli stan przekaźnika (boolean, on lub off) na kanał pierwszy OBK i ustawia mu typ jako toggle. Po wykonaniu Home Assistant Discovery nawet nasz HA będzie w stanie wykryć tak skonfigurowane urządzenie:
W razie potrzeby można analogicznie zmapować pozostałe dpID, więcej info w dokumentacji:
https://github.com/openshwprojects/OpenBK7231T_App/tree/main/docs
Podsumowanie
To urządzenie wspiera również komunikację RF, pewnie właśnie te piloty Milight z opisu od sprzedawcy. To wyjaśnia też troszkę jego cenę oraz to czemu jest zrealizowane ono w oparciu o dodatkowy MCU - Tuya jakoś nie lubi podłączać odbiornika RF bezpośrednio do modułu WiFi, nie wiem czemu tak jest, ale każde urządzenie z RF jakie rozbierałem do tej pory było albo oparte o TuyaMCU, albo o zwykły MCU obsługują przyciski i odbiornik RF (była o tym już mowa na forum, ale wtedy ten MCU po odebraniu sygnału RF "symuluje" wciśnięcie przycisku, więc RF działa dalej po zmianie firmware modułu WiFi).
Oprócz tego moją uwagę przykuł childlock, po utracie instrukcji mógłby być problem z jego zdjęciem, ale wszystko dla Was udokumentowałem, więc może nie będzie aż tak źle....
Podsumowując, wyjaśniło się nieco czemu ten produkt jest taki drogi, ale i tak chyba bym się skłaniał ku tańszym odpowiednikom, ale każdy zdecyduje wedle uznania. Na pewno można go uwolnić od chmury i połączyć z HA, co pokazałem w tym temacie.
Fajne? Ranking DIY Pomogłem? Kup mi kawę.
