Zapraszam na analizę wnętrza, budowy oraz protokołu komunikacji (TuyaMCU - oparte o UART) nietypowego kontrolera paska LED Miboxer FUT037W+.
Omawiany tu produkt wyróżnia się tym, że oprócz komunikacji WiFi wspiera też sterowanie przez RF, z tego też powodu producent zdecydował się zbudować go w oparciu o dwa mikrokontrolery.
Mamy tu osobno moduł WiFi CB3S (BK7231N) oraz osobno zewnętrzny MCU, do którego w zasadzie wszystko jest podłączone. Ale zacznijmy od początku...
Zakup Miboxer FUT037W+
Produkt podrzucił mi czytelnik bym mu wgrał OBK w celu sparowania sprzętu z Home Assistant, ale z tego co wiem, kupiony był on za około 90 zł:
Zobaczmy do opisu przedmiotu od sprzedawcy:
Tak jest, sterować tym można przez WiFi bądź przez piloty. Teraz specyfikacja:
Informacje o Bluetooth z opisu sugerują, że w środku nie znajdziemy ESP8266.
Co dostajemy w praktyce?
Zawartość zestawu:
Kody QR:
Ten sterownik ma osobno wejście na DC jack, a osobno na przewody - sprytne i wygodne.
A tu są wyjścia na pasek LED:
Wnętrze Miboxer FUT037W+
Wystarczy podważyć pokrywę, nie ma tu śrubek:
Od razu widać mocniejsze niż zazwyczaj tranzystory MOSFET, tylko czemu są takie skurzone?
Nieco lepiej:
K50N03A, rzeczywiście niezłe parametry:
Możemy już wyjąć PCB i obejrzeć resztę elektroniki:
Moduł WiFi to WB3S, ale on jest na osobnej płytce i z podstawą łączy się tylko czteroma goldpinami. Mamy tu 3.3V, masę oraz TX i RX.
To jest typowy przykład urządzenia opartego o TuyaMCU. Szczegóły w tym temacie:
Protokół TuyaMCU - komunikacja pomiędzy mikrokontrolerem a modułem WiFi
Tu z kolei widzę kontroler step down, on pewnie generuje 3.3V z 12V od paska:
A tu mamy układ RF PL1166 A110K48 (MCU jest pod modułem WiFi):
Wylutowałem płytkę z modułem WiFi by zobaczyć jakie tam jest MCU:
To Nuvoton MS51FC0AE:
Ten MCU obsługuje tu układ RF oraz tranzystory, z modułem WiFi komunikuje sie przez UART.
Testy z aplikacją Tuya, czyli podsłuchujemy komunikację UART
Wspomniany już protokół TuyaMCU opiera się na UART i służy do przesyłania wartości zmiennych w obie strony, zmienne TuyaMCU mają swoje ID, tzw. dpID.
Opisywałem to szerzej w tym temacie: Analizator TuyaMCU - dekoder pakietów UART dla urządzeń Tuya - dpID detektor
A więc, apka Tuya z daleka rozpoznaje urządzenie:
Mimo jednego niepowodzenia ("weak signal") parowanie się powodzi:
W środku mamy typowy kontroler RGBCW:
Oczywiście są tu opcje takie jak stan początkowy, kalendarz, itp, ale to omawiałem już kiedyś, więc pomijam.
Wszystko działa:
A więc, zgodnie z zalinkowanym tematem o analizatorze TuyaMCU zebrałem dane i uruchomiłem analizator:
https://github.com/openshwprojects/TuyaMCUAnalyzer
Najpierw bez parowania:
55AA00000000FF55AA000100000055AA000200000155AA03000001000355AA0307000816020004000003E81855AA030300000555AA0307000817020004000002124255AA030700101803000C3031363030336538303365380755AA030700201903001C30303030303030303030303030303030303030303030633830303030DC55AA0307000514010001012555AA0307000515040001012955AA030700121E00000E00000001010106000000000014006455AA030700061F00000200003055AA030700062000000200003155AA0307000522010001013355AA030700102100000C000100000000000003E800003255AA03070006D10000020000E255AA03070006D20000020000E355AA0307000568040001017C55AA0307000569040001017D55AA030700106500000C4200000001FA1464000D04C61655AA030000010104
Rezultat:
Warto podkreślić, że TuyaMCU analizator nawet dekoduje kolory!
I po sparowaniu, kolejno, ustawienie ciepłej bieli:
55 AA 00 06 00 19 1C 03 00 15 31 30 30 30 30 30 30 30 30 30 30 30 30 30
33 65 38 30 30 30 30 83 55 AA 00 06 00 08 17 02 00 04 00 00 00 00 2A 55
AA 00 06 00 05 15 04 00 01 00 24
55 AA 00 06 00 19 1C030015313030303030303030303030303033653830303030 83
HEADER VER=00 Unk LEN fnId=28 Str V=31 30 30 30 30 30 30 30 30 30 30 30 30 30 33 65 38 30 30 30 30 CHK
55 AA 00 06 00 08 1702000400000000 2A
HEADER VER=00 Unk LEN fnId=23 Val V=0 CHK
55 AA 00 06 00 05 1504000100 24
HEADER VER=00 Unk LEN fnId=21 Enum V=0 CHK
Ustawienie zimnej bieli:
55 AA 00 06 00 19 1C 03 00 15 31 30 30 30 30 30 30 30 30 30 30 30 30 30
33 65 38 30 33 65 38 C3 55 AA 00 06 00 08 17 02 00 04 00 00 03 E8 15 55
AA 00 06 00 05 15 04 00 01 00 24 55 AA 00 00 00 00 FF
55 AA 00 06 00 19 1C030015313030303030303030303030303033653830336538 C3
HEADER VER=00 Unk LEN fnId=28 Str V=31 30 30 30 30 30 30 30 30 30 30 30 30 30 33 65 38 30 33 65 38 CHK
55 AA 00 06 00 08 17020004000003E8 15
HEADER VER=00 Unk LEN fnId=23 Val V=1000 CHK
55 AA 00 06 00 05 1504000100 24
HEADER VER=00 Unk LEN fnId=21 Enum V=0 CHK
55 AA 00 00 00 00 FF
HEADER VER=00 Heartbeat LEN CHK
Ustawienie temperatury bieli 50%:
55 AA 00 06 00 19 1C 03 00 15 31 30 30 30 30 30 30 30 30 30 30 30 30 30
33 65 38 30 31 66 37 C1 55 AA 00 06 00 08 17 02 00 04 00 00 01 F7 22 55
AA 00 06 00 05 15 04 00 01 00 24
55 AA 00 06 00 19 1C030015313030303030303030303030303033653830316637 C1
HEADER VER=00 Unk LEN fnId=28 Str V=31 30 30 30 30 30 30 30 30 30 30 30 30 30 33 65 38 30 31 66 37 CHK
55 AA 00 06 00 08 17020004000001F7 22
HEADER VER=00 Unk LEN fnId=23 Val V=503 CHK
55 AA 00 06 00 05 1504000100 24
HEADER VER=00 Unk LEN fnId=21 Enum V=0 CHK
Ustawienie temperatury bieli 75% (bardziej zimna biel):
55 AA 00 00 00 00 FF 55 AA 00 06 00 19 1C 03 00 15 31 30 30 30 30 30 30
30 30 30 30 30 30 30 33 65 38 30 33 31 37 8E 55 AA 00 06 00 08 17 02 00
04 00 00 03 17 44 55 AA 00 06 00 05 15 04 00 01 00 24
55 AA 00 00 00 00 FF
HEADER VER=00 Heartbeat LEN CHK
55 AA 00 06 00 19 1C030015313030303030303030303030303033653830333137 8E
HEADER VER=00 Unk LEN fnId=28 Str V=31 30 30 30 30 30 30 30 30 30 30 30 30 30 33 65 38 30 33 31 37 CHK
55 AA 00 06 00 08 1702000400000317 44
HEADER VER=00 Unk LEN fnId=23 Val V=791 CHK
55 AA 00 06 00 05 1504000100 24
HEADER VER=00 Unk LEN fnId=21 Enum V=0 CHK
Ustawienie koloru zielonego:
55 AA 00 06 00 19 1C 03 00 15 31 30 30 36 66 30 33 65 38 30 33 65 38 30
30 30 30 30 30 30 30 FF 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06
00 10 18 03 00 0C 30 30 36 62 30 33 65 38 30 33 65 38 34 55 AA 00 00 00
00 FF
55 AA 00 06 00 19 1C030015313030366630336538303365383030303030303030 FF
HEADER VER=00 Unk LEN fnId=28 Str V=31 30 30 36 66 30 33 65 38 30 33 65 38 30 30 30 30 30 30 30 30 CHK
55 AA 00 06 00 05 1504000101 25
HEADER VER=00 Unk LEN fnId=21 Enum V=1 CHK
55 AA 00 06 00 10 1803000C303036623033653830336538 34
HEADER VER=00 Unk LEN fnId=24 Str V=30 30 36 62 30 33 65 38 30 33 65 38 CHK
55 AA 00 00 00 00 FF
HEADER VER=00 Heartbeat LEN CHK
Ustawienie kodu czerwonego:
55 AA 00 06 00 19 1C 03 00 15 31 30 31 36 31 30 33 65 38 30 33 65 38 30
30 30 30 30 30 30 30 CB 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06
00 10 18 03 00 0C 30 31 36 31 30 33 65 38 30 33 65 38 04
55 AA 00 06 00 19 1C030015313031363130336538303365383030303030303030 CB
HEADER VER=00 Unk LEN fnId=28 Str V=31 30 31 36 31 30 33 65 38 30 33 65 38 30 30 30 30 30 30 30 30 CHK
55 AA 00 06 00 05 1504000101 25
HEADER VER=00 Unk LEN fnId=21 Enum V=1 CHK
55 AA 00 06 00 10 1803000C303136313033653830336538 04
HEADER VER=00 Unk LEN fnId=24 Str V=30 31 36 31 30 33 65 38 30 33 65 38 CHK
Ustawienie koloru niebieskiego:
Setting blue:
55 AA 00 06 00 19 1C 03 00 15 31 30 30 65 31 30 33 65 38 30 33 65 38 30
30 30 30 30 30 30 30 F9 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06
00 10 18 03 00 0C 30 30 65 31 30 33 65 38 30 33 65 38 32 55 AA 00 00 00
00 FF
55 AA 00 06 00 19 1C030015313030653130336538303365383030303030303030 F9
HEADER VER=00 Unk LEN fnId=28 Str V=31 30 30 65 31 30 33 65 38 30 33 65 38 30 30 30 30 30 30 30 30 CHK
55 AA 00 06 00 05 1504000101 25
HEADER VER=00 Unk LEN fnId=21 Enum V=1 CHK
55 AA 00 06 00 10 1803000C303065313033653830336538 32
HEADER VER=00 Unk LEN fnId=24 Str V=30 30 65 31 30 33 65 38 30 33 65 38 CHK
55 AA 00 00 00 00 FF
HEADER VER=00 Heartbeat LEN CHK
Wyłączenie toggle:
55 AA 00 06 00 05 14 01 00 01 00 20 55 AA 00 00 00 00 FF
55 AA 00 06 00 05 1401000100 20
HEADER VER=00 SetDP LEN dpId=20 Bool V=0 CHK
55 AA 00 00 00 00 FF
HEADER VER=00 Heartbeat LEN CHK
Włączenie toggle:
55 AA 00 06 00 05 1401000101 21
HEADER VER=00 SetDP LEN dpId=20 Bool V=1 CHK
Dimmer na 46%:
55 AA 00 06 00 19 1C 03 00 15 31 30 30 65 31 30 33 65 38 30 31 64 30 30
30 30 30 30 30 30 30 EE 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06
00 10 18 03 00 0C 30 30 65 31 30 33 65 38 30 31 64 30 27
55 AA 00 06 00 19 1C030015313030653130336538303164303030303030303030 EE
HEADER VER=00 Unk LEN fnId=28 Str V=31 30 30 65 31 30 33 65 38 30 31 64 30 30 30 30 30 30 30 30 30 CHK
55 AA 00 06 00 05 1504000101 25
HEADER VER=00 Unk LEN fnId=21 Enum V=1 CHK
55 AA 00 06 00 10 1803000C303065313033653830316430 27
HEADER VER=00 Unk LEN fnId=24 Str V=30 30 65 31 30 33 65 38 30 31 64 30 CHK
Dimmer na 12%:
55 AA 00 06 00 19 1C 03 00 15 31 30 30 65 31 30 33 65 38 30 30 37 39 30
30 30 30 30 30 30 30 C9 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06
00 10 18 03 00 0C 30 30 65 31 30 33 65 38 30 30 37 39 02 55 AA 00 00 00
00 FF
55 AA 00 06 00 19 1C030015313030653130336538303037393030303030303030 C9
HEADER VER=00 Unk LEN fnId=28 Str V=31 30 30 65 31 30 33 65 38 30 30 37 39 30 30 30 30 30 30 30 30 CHK
55 AA 00 06 00 05 1504000101 25
HEADER VER=00 Unk LEN fnId=21 Enum V=1 CHK
55 AA 00 06 00 10 1803000C303065313033653830303739 02
HEADER VER=00 Unk LEN fnId=24 Str V=30 30 65 31 30 33 65 38 30 30 37 39 CHK
55 AA 00 00 00 00 FF
HEADER VER=00 Heartbeat LEN CHK
Dimmer na 100%:
55 AA 00 06 00 19 1C030015313030653130336538303365383030303030303030 F9
HEADER VER=00 SetDP LEN dpId=28 Str V=100e103e803e800000000 CHK
55 AA 00 06 00 05 1504000101 25
HEADER VER=00 SetDP LEN dpId=21 Enum V=1 CHK
55 AA 00 06 00 10 1803000C303065313033653830336538 32
HEADER VER=00 SetDP LEN dpId=24 Str V=00e103e803e8 Col: ■ CHK
Timer na 5 godzin:
55 AA 00 06 00 08 1A 02 00 04 00 00 46 50 C3
55 AA 00 06 00 08 1A02000400004650 C3
HEADER VER=00 SetDP LEN dpId=26 Val V=18000 CHK
Timer na 1h i 16 minut:
55 AA 00 00 00 00 FF 55 AA 00 06 00 08 1A 02 00 04 00 00 11 D0 0E
55 AA 00 00 00 00 FF
HEADER VER=00 Heartbeat LEN CHK
55 AA 00 06 00 08 1A020004000011D0 0E
HEADER VER=00 SetDP LEN dpId=26 Val V=4560 CHK
Opcja Power On->Initial mode:
55 AA 00 06 00 10 21 00 00 0C 00 00 00 00 00 00 00 00 03 E8 00 00 2D 55
55 AA 00 06 00 10 2100000C000000000000000003E80000 2D
HEADER VER=00 SetDP LEN dpId=33 Raw V=00 00 00 00 00 00 00 00 03 E8 00 00 CHK
Opcja Power On->Restory Memory:
55 AA 00 00 00 00 FF 55 AA 00 06 00 10 21 00 00 0C 00 01 00 00 00 00 00
00 03 E8 00 00 2E 55 AA 00 00 00 00 FF
55 AA 00 00 00 00 FF
HEADER VER=00 Heartbeat LEN CHK
55 AA 00 06 00 10 2100000C000100000000000003E80000 2E
HEADER VER=00 SetDP LEN dpId=33 Raw V=00 01 00 00 00 00 00 00 03 E8 00 00 CHK
55 AA 00 00 00 00 FF
HEADER VER=00 Heartbeat LEN CHK
Skrollowanie kolorów, kolejno: green, yellow, red, pink, blue:
E0 E0 E0 E0 E0 00 E0 E0 E0 00 00 00 00 E0 55 AA 00 06 00 19 1C 03 00 15
31 30 30 36 33 30 33 65 38 30 33 65 38 30 30 30 30 30 30 30 30 CC 55 AA
00 06 00 05 15 04 00 01 01 25 55 AA 00 06 00 10 18 03 00 0C 30 30 36 33
30 33 65 38 30 33 65 38 05 55 AA 00 06 00 19 1C 03 00 15 31 30 30 34 36
30 33 65 38 30 33 65 38 30 30 30 30 30 30 30 30 CD 55 AA 00 06 00 05 15
04 00 01 01 25 55 AA 00 06 00 10 18 03 00 0C 30 30 34 36 30 33 65 38 30
33 65 38 06 55 AA 00 06 00 19 1C 03 00 15 31 30 30 32 62 30 33 65 38 30
33 65 38 30 30 30 30 30 30 30 30 F7 55 AA 00 06 00 05 15 04 00 01 01 25
55 AA 00 06 00 10 18 03 00 0C 30 30 32 62 30 33 65 38 30 33 65 38 30 55
AA 00 06 00 19 1C 03 00 15 31 30 30 30 62 30 33 65 38 30 33 65 38 30 30
30 30 30 30 30 30 F5 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06 00
10 18 03 00 0C 30 30 30 62 30 33 65 38 30 33 65 38 2E 55 AA 00 06 00 19
1C 03 00 15 31 30 31 35 64 30 33 65 38 30 33 65 38 30 30 30 30 30 30 30
30 FD 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06 00 10 18 03 00 0C
30 31 35 64 30 33 65 38 30 33 65 38 36 55 AA 00 06 00 19 1C 03 00 15 31
30 31 33 37 30 33 65 38 30 33 65 38 30 30 30 30 30 30 30 30 CE 55 AA 00
06 00 05 15 04 00 01 01 25 55 AA 00 06 00 10 18 03 00 0C 30 31 33 37 30
33 65 38 30 33 65 38 07 55 AA 00 06 00 19 1C 03 00 15 31 30 31 32 32 30
33 65 38 30 33 65 38 30 30 30 30 30 30 30 30 C8 55 AA 00 06 00 05 15 04
00 01 01 25 55 AA 00 06 00 10 18 03 00 0C 30 31 32 32 30 33 65 38 30 33
65 38 01 55 AA 00 06 00 19 1C 03 00 15 31 30 31 30 34 30 33 65 38 30 33
65 38 30 30 30 30 30 30 30 30 C8 55 AA 00 06 00 05 15 04 00 01 01 25 55
AA 00 06 00 10 18 03 00 0C 30 31 30 34 30 33 65 38 30 33 65 38 01 55 AA
00 06 00 19 1C 03 00 15 31 30 30 65 62 30 33 65 38 30 33 65 38 30 30 30
30 30 30 30 30 2A 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06 00 10
18 03 00 0C 30 30 65 62 30 33 65 38 30 33 65 38 63 55 AA 00 06 00 19 1C
03 00 15 31 30 30 64 30 30 33 65 38 30 33 65 38 30 30 30 30 30 30 30 30
F7 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06 00 10 18 03 00 0C 30
30 64 30 30 33 65 38 30 33 65 38 30 55 AA 00 06 00 19 1C 03 00 15 31 30
30 62 31 30 33 65 38 30 33 65 38 30 30 30 30 30 30 30 30 F6 55 AA 00 06
00 05 15 04 00 01 01 25 55 AA 00 06 00 10 18 03 00 0C 30 30 62 31 30 33
65 38 30 33 65 38 2F
55 AA 00 06 00 19 1C030015313030363330336538303365383030303030303030 CC
HEADER VER=00 SetDP LEN dpId=28 Str V=1006303e803e800000000 CHK
55 AA 00 06 00 05 1504000101 25
HEADER VER=00 SetDP LEN dpId=21 Enum V=1 CHK
55 AA 00 06 00 10 1803000C303036333033653830336538 05
HEADER VER=00 SetDP LEN dpId=24 Str V=006303e803e8 Col: ■ CHK
55 AA 00 06 00 19 1C030015313030343630336538303365383030303030303030 CD
HEADER VER=00 SetDP LEN dpId=28 Str V=1004603e803e800000000 CHK
55 AA 00 06 00 05 1504000101 25
HEADER VER=00 SetDP LEN dpId=21 Enum V=1 CHK
55 AA 00 06 00 10 1803000C303034363033653830336538 06
HEADER VER=00 SetDP LEN dpId=24 Str V=004603e803e8 Col: ■ CHK
55 AA 00 06 00 19 1C030015313030326230336538303365383030303030303030 F7
HEADER VER=00 SetDP LEN dpId=28 Str V=1002b03e803e800000000 CHK
55 AA 00 06 00 05 1504000101 25
HEADER VER=00 SetDP LEN dpId=21 Enum V=1 CHK
55 AA 00 06 00 10 1803000C303032623033653830336538 30
HEADER VER=00 SetDP LEN dpId=24 Str V=002b03e803e8 Col: ■ CHK
55 AA 00 06 00 19 1C030015313030306230336538303365383030303030303030 F5
HEADER VER=00 SetDP LEN dpId=28 Str V=1000b03e803e800000000 CHK
55 AA 00 06 00 05 1504000101 25
HEADER VER=00 SetDP LEN dpId=21 Enum V=1 CHK
55 AA 00 06 00 10 1803000C303030623033653830336538 2E
HEADER VER=00 SetDP LEN dpId=24 Str V=000b03e803e8 Col: ■ CHK
55 AA 00 06 00 19 1C030015313031356430336538303365383030303030303030 FD
HEADER VER=00 SetDP LEN dpId=28 Str V=1015d03e803e800000000 CHK
55 AA 00 06 00 05 1504000101 25
HEADER VER=00 SetDP LEN dpId=21 Enum V=1 CHK
55 AA 00 06 00 10 1803000C303135643033653830336538 36
HEADER VER=00 SetDP LEN dpId=24 Str V=015d03e803e8 Col: ■ CHK
55 AA 00 06 00 19 1C030015313031333730336538303365383030303030303030 CE
HEADER VER=00 SetDP LEN dpId=28 Str V=1013703e803e800000000 CHK
55 AA 00 06 00 05 1504000101 25
HEADER VER=00 SetDP LEN dpId=21 Enum V=1 CHK
55 AA 00 06 00 10 1803000C303133373033653830336538 07
HEADER VER=00 SetDP LEN dpId=24 Str V=013703e803e8 Col: ■ CHK
55 AA 00 06 00 19 1C030015313031323230336538303365383030303030303030 C8
HEADER VER=00 SetDP LEN dpId=28 Str V=1012203e803e800000000 CHK
55 AA 00 06 00 05 1504000101 25
HEADER VER=00 SetDP LEN dpId=21 Enum V=1 CHK
55 AA 00 06 00 10 1803000C303132323033653830336538 01
HEADER VER=00 SetDP LEN dpId=24 Str V=012203e803e8 Col: ■ CHK
55 AA 00 06 00 19 1C030015313031303430336538303365383030303030303030 C8
HEADER VER=00 SetDP LEN dpId=28 Str V=1010403e803e800000000 CHK
55 AA 00 06 00 05 1504000101 25
HEADER VER=00 SetDP LEN dpId=21 Enum V=1 CHK
55 AA 00 06 00 10 1803000C303130343033653830336538 01
HEADER VER=00 SetDP LEN dpId=24 Str V=010403e803e8 Col: ■ CHK
55 AA 00 06 00 19 1C030015313030656230336538303365383030303030303030 2A
HEADER VER=00 SetDP LEN dpId=28 Str V=100eb03e803e800000000 CHK
55 AA 00 06 00 05 1504000101 25
HEADER VER=00 SetDP LEN dpId=21 Enum V=1 CHK
55 AA 00 06 00 10 1803000C303065623033653830336538 63
HEADER VER=00 SetDP LEN dpId=24 Str V=00eb03e803e8 Col: ■ CHK
55 AA 00 06 00 19 1C030015313030643030336538303365383030303030303030 F7
HEADER VER=00 SetDP LEN dpId=28 Str V=100d003e803e800000000 CHK
55 AA 00 06 00 05 1504000101 25
HEADER VER=00 SetDP LEN dpId=21 Enum V=1 CHK
55 AA 00 06 00 10 1803000C303064303033653830336538 30
HEADER VER=00 SetDP LEN dpId=24 Str V=00d003e803e8 Col: ■ CHK
55 AA 00 06 00 19 1C030015313030623130336538303365383030303030303030 F6
HEADER VER=00 SetDP LEN dpId=28 Str V=100b103e803e800000000 CHK
55 AA 00 06 00 05 1504000101 25
HEADER VER=00 SetDP LEN dpId=21 Enum V=1 CHK
55 AA 00 06 00 10 1803000C303062313033653830336538 2F
HEADER VER=00 SetDP LEN dpId=24 Str V=00b103e803e8 Col: ■ CHK
Przesuwanie Dimmer od 100% do 0%:
55 AA 00 06 00 19 1C 03 00 15 31 30 30 62 31 30 33 65 38 30 33 64 31 30 30 30 30 30 30 30 30 EE 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06 00 10 18 03 00 0C 30 30 62 31 30 33 65 38 30 33 35 31 F8 55 AA 00 06 00 19 1C 03
00 15 31 30 30 62 31 30 33 65 38 30 33 30 62 30 30 30 30 30 30 30 30 EB 55 AA 00 06 00 05 15 04 00 01 01 25 55
AA 00 06 00 10 18 03 00 0C 30 30 62 31 30 33 65 38 30 32 37 61 29 55 AA 00 06 00 19 1C 03 00 15 31 30 30 62 31 30 33 65 38 30 32 34 32 30 30 30 30 30 30 30 30 BE 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06 00 10 18 03 00
0C 30 30 62 31 30 33 65 38 30 31 39 36 FF 55 AA 00 06 00 19 1C 03 00 15 31 30 30 62 31 30 33 65 38 30 31 62 34
30 30 30 30 30 30 30 30 ED 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06 00 10 18 03 00 0C 30 30 62 31 30 33 65 38 30 30 66 34 29 55 AA 00 06 00 19 1C 03 00 15 31 30 30 62 31 30 33 65 38 30 30 64 65 30 30 30 30 30 30 30 30
1F 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06 00 10 18 03 00 0C 30 30 62 31 30 33 65 38 30 30 33 64 26 55
AA 00 06 00 19 1C 03 00 15 31 30 30 62 31 30 33 65 38 30 30 33 39 30 30 30 30 30 30 30 30 C2 55 AA 00 06 00 05 15 04 00 01 01 25 55 AA 00 06 00 10 18 03 00 0C 30 30 62 31 30 33 65 38 30 30 30 61 20 55
55 AA 00 06 00 19 1C030015313030623130336538303364313030303030303030 EE
HEADER VER=00 SetDP LEN dpId=28 Str V=100b103e803d100000000 CHK
55 AA 00 06 00 05 1504000101 25
HEADER VER=00 SetDP LEN dpId=21 Enum V=1 CHK
55 AA 00 06 00 10 1803000C303062313033653830333531 F8
HEADER VER=00 SetDP LEN dpId=24 Str V=00b103e80351 Col: ■ CHK
55 AA 00 06 00 19 1C030015313030623130336538303330623030303030303030 EB
HEADER VER=00 SetDP LEN dpId=28 Str V=100b103e8030b00000000 CHK
55 AA 00 06 00 05 1504000101 25
HEADER VER=00 SetDP LEN dpId=21 Enum V=1 CHK
55 AA 00 06 00 10 1803000C303062313033653830323761 29
HEADER VER=00 SetDP LEN dpId=24 Str V=00b103e8027a Col: ■ CHK
55 AA 00 06 00 19 1C030015313030623130336538303234323030303030303030 BE
HEADER VER=00 SetDP LEN dpId=28 Str V=100b103e8024200000000 CHK
55 AA 00 06 00 05 1504000101 25
HEADER VER=00 SetDP LEN dpId=21 Enum V=1 CHK
55 AA 00 06 00 10 1803000C303062313033653830313936 FF
HEADER VER=00 SetDP LEN dpId=24 Str V=00b103e80196 Col: ■ CHK
55 AA 00 06 00 19 1C030015313030623130336538303162343030303030303030 ED
HEADER VER=00 SetDP LEN dpId=28 Str V=100b103e801b400000000 CHK
55 AA 00 06 00 05 1504000101 25
HEADER VER=00 SetDP LEN dpId=21 Enum V=1 CHK
55 AA 00 06 00 10 1803000C303062313033653830306634 29
HEADER VER=00 SetDP LEN dpId=24 Str V=00b103e800f4 Col: ■ CHK
55 AA 00 06 00 19 1C030015313030623130336538303064653030303030303030 1F
HEADER VER=00 SetDP LEN dpId=28 Str V=100b103e800de00000000 CHK
55 AA 00 06 00 05 1504000101 25
HEADER VER=00 SetDP LEN dpId=21 Enum V=1 CHK
55 AA 00 06 00 10 1803000C303062313033653830303364 26
HEADER VER=00 SetDP LEN dpId=24 Str V=00b103e8003d Col: ■ CHK
55 AA 00 06 00 19 1C030015313030623130336538303033393030303030303030 C2
HEADER VER=00 SetDP LEN dpId=28 Str V=100b103e8003900000000 CHK
55 AA 00 06 00 05 1504000101 25
HEADER VER=00 SetDP LEN dpId=21 Enum V=1 CHK
55 AA 00 06 00 10 1803000C303062313033653830303061 20
HEADER VER=00 SetDP LEN dpId=24 Str V=00b103e8000a Col: ■ CHK
Na koniec porównanie pakietów.
Kolor, czyli dpID 24:
CC CC CC
30 30 36 62 30 33 65 38 30 33 65 38 dpID 24 green
30 31 36 31 30 33 65 38 30 33 65 38 dpID 24 red
30 30 65 31 30 33 65 38 30 33 65 38 dpID 24 blue
Kolor z temperaturą, czyli dpID 28:
CC CC CC
31 30 31 36 31 30 33 65 38 30 33 65 38 30 30 30 30 30 30 30 30 Setting Red
31 30 30 65 31 30 33 65 38 30 33 65 38 30 30 30 30 30 30 30 30 Setting Blue
31 30 30 36 66 30 33 65 38 30 33 65 38 30 30 30 30 30 30 30 30 Setting Green
31 30 30 30 30 30 30 30 30 30 30 30 30 30 33 65 38 30 33 31 37 Temperature 75% cool
31 30 30 30 30 30 30 30 30 30 30 30 30 30 33 65 38 30 31 66 37 Temperature 50%
31 30 30 30 30 30 30 30 30 30 30 30 30 30 33 65 38 30 33 65 38 Temperature cold
31 30 30 30 30 30 30 30 30 30 30 30 30 30 33 65 38 30 30 30 30 Temperature Warm
Mam również schema i tu też są dpID, ale wyciągnięte z serwerów Tuya:
Kod: JSON
Podsumowując, mamy tu zmienne:
- dpID 20 - boolean, stan on/off
- dpID 21 - enum, tryb pracy, kolejno: barwy bieli, kolor, animacja, muzyka
- dpID 22 - value, od 1 do 1000, chyba poziom jasności, ale występuje tylko w trybie bieli, nie RGB
- dpID 23 - value, od 0 do 1000, temperatura bieli
- dpID 24 - kolor RGB jako ASCII string
- dpID 26 - value, timer w sekundach
- dpID 28 - kolor RGBCW jako ASCII string
Wgrywanie OBK
Wgrywamy moim flasherem:
https://github.com/openshwprojects/BK7231GUIFlashTool
Niestety trzeba wyjąć (bądź wylutować - zależy od wersji PCB) moduł WiFi poza układ, bo TuyaMCU korzysta z tego samego portu UART co programowanie.
Potem musimy utworzyć autoexec.bat:
// start driver
startDriver TuyaMCU
// always send wifi state 0x04 to MCU - paired and connected to cloud
tuyaMcu_defWiFiState 4
// set baud rate (if your device is using 9600, remove this line)
tuyaMcu_setBaudRate 115200
// setup Tuya LED color dpID 24 and Color format 1
// (the other dpIDs are taken from default settings)
tuyaMCU_setupLED 24 1
Kod jest naprawdę bardzo krótki, ale pozostałe dpID są ustawione wedle wartości domyślnych. OBK na ten moment nie wysyła dpID 28, ale testy pokazały, że starcza wysłanie dpID 22.
Powyższy kod połączy sterownik LED z OBK z MCU z tego urządzenia, więc wszystkie komendy LED, jak również i Home Assistant Discovery z automatu zadziała.
Podsumowanie
Testowałem już kilka produktów Miboxer (też przekaźniki) i wygląda na to, że one wszystkie mają podobną budowę. Zawsze tam jest TuyaMCU i osobno moduł WiFi. Jest tam też możliwość podłączenia RF, ale tym razem tego nie testowałem.
Urządzenie to jest troszkę bardziej złożone niż typowe kontrolery pasków LED ale mimo wszystko udało uwolnić się je od chmury. Nasz sterownik TuyaMCU LED w OBK jest dość świeży, więc w razie pytań bądź problemów proszę pisać śmiało, postaramy się pomóc.
Co do samej budowy - na pewno tranzystory w środku są lepsze niż w kontrolerze który testowałem (i naprawiałem) kiedyś w temacie WiFi SmartLife ściemniacz jednokolorowego paska LED - test, wnętrze, schemat, więc w zasadzie chyba można polecić ten produkt i do nieco większych instalacji.
PS: Powiązane tematy na forum:
- Miboxer FUT036w and CB3s Issues: Flashing Firmware, WiFi Connectivity, and Button Control
- Does MiBoxer FUT035W+ has Beken chipset and is it supported with OpenBeken?
PS2: Jeśli nie podoba nam się użycie TuyaMCU w tym produkcie i nie potrzebujemy RF to zawsze można wylutować MCU i zrobić zworki do pinów PWM samego modułu z BK ale w tej wersji PCB byłoby to dość problematyczne
Fajne? Ranking DIY Pomogłem? Kup mi kawę.
