Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze

p.kaczmarek2 18 Jul 2022 08:56 2211 17
  • WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Witajcie, przedstawię tu wnętrze oraz zmianę firmware kolejnej lampki LED. Temat wyróżni się tym, że ta LEDówka korzysta z protokołu I2C do kontroli swoich kolorów, a dokładniej do komunikacji między modułem WiFi/Bluetooth WBLC5 (BK7231T) i stałoprądowym kontrolerem LED SM2135Eh. Opiszę tu też sam protokół komunikacji z SM2135Eh i dam prosty przykład jego implementacji bazujący na cyfrowym IO, czyli bez sprzętowego I2C.
    Na koniec tematu też pokażę jej konfiguracje w OpenBeken.


    Zakup WOJ14415
    Lampką tą zakupiłem na polskim portalu aukcyjnym na skutek prośby jednego z użytkowników mojego OpenBeken - zostałem poproszony, by dodać wsparcie układu SM2135.
    Produkt znalazłem pod hasłem Żarówka LED GU10 5W RGB SPECTRUM SMART WIFI TUYA, poza tytułem oferty jest też jego kod producenta - WOJ14415.
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Kupiłem go wraz z innymi lampkami smart, dzięki czemu miałem darmową przesyłkę.
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Produkt przybył w takim pudełeczku:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    UWAGA - produkt jest brandowany na "spectrum", ale jest kompatybilny z aplikacją Tuya! Sprawdzane.

    Wnętrze WOJ14415
    Plastikowe "szkiełko" wyjąć jest dość łatwo. Wtedy już widać, że w środku jest SM2135:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Z usunięciem płytki z LED trochę się siłowałem. Ciężko było. Ostatecznie zrobiłem mały otwór z drugiej strony i ją wypchałem na zewnątrz.
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Piny od płytki są podpisane. Widać tu m. in CLK, które jest zegarem od I2C. Niepodpisany obok pin to pewnie DATA, linia danych I2C. Oprócz tego m. in. jest 3.3V (zasilanie kontrolera LED), 20V (zasilanie LEDów?), masa...
    LEDy są osobno ciepłe, zimne i kolorowe (RGB).
    Reszta układu z modułem WiFi:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Na płytce raczej to co zwykle, rezystor bezpiecznikowy (FR1, Fusible Resistor), jakaś przetwornica step down 8HMP (wraz z dławikiem 4R7 czyli 4.7uH), pewnie do zasilania modułu WiFi...
    Te 8HMP to może być TP6841S6:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Co kryje się pod naklejką? Moduł z BK7231T:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    WBLC5. Wymiary:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Wyprowadzenia:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Niestety piny od programowania nie są podpisane. Na szczęście uzupełniłem dla was grafikę:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Przylutować trzeba się będzie pod co najmniej TX1 i RX1.
    Jeszcze dla zasady, spód płytki, m. in. mostek prostowniczy, jakiś jeszcze inny element w SMD (ktoś rozpozna?):
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Nie analizowałem głębiej już płytki z zasilaniem, pora skupić się na SM2135.


    Pięciokanałowy kontroler I2C LED SM2135
    Kontroler SM2135 służy do obsługi lampek RGBCW, czyli obsługuje 5 osobnych kanałów. Sterowany jest poprzez linie I2C, czyli do sterowania 5-cioma kanałami starczają dwie linie, DAT i CLK. Dodatkowo wymaga też zasilania. 5 kanałów + 2 linie + zasilanie daje nam już 8 pinów, więc sprytny producent masę dał na spodzie układu:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    SM2135 pracuje na wyprostowanym napięciu sieciowym. Nie potrzeba dla niego dodatkowego zasilacza. Przykładowa aplikacja SM2135 przedstawiona jest poniżej:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Niezbyt zgadzam się z tym podpisem "AC->DC" na przetwornicy step down zasilającej mikrokontroler (moduł WiFi/Bluetooth), gdyż tam już na wejściu jest już DC. Oprócz tego wszystko się zgadza, choć czasem między step down a modułem MCU nie ma osobnego regulatora LDO, o ile przetwornica daje stabilne 3.3V dla układów ESP czy tam Beken (bądź innych, rzadziej stosowanych).
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Diagram komunikacji I2C:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Oto jego opis z noty katalogowej, niezbyt się z nim zgadzam, chociażby to "8byte + 1ack" to raczej błąd, powinno być 8 bitów i jeden ack.
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Spróbuję go Wam przetłumaczyć i wyjaśnić.
    Start transmisji oznaczany jest poprzez przejście DATA ze stanu wysokiego na niski gdy CLK jest wysoki.
    Koniec transmisji oznaczany jest poprzez przejście DATA ze stanu niskiego na wysoki gdy CLK jest wysoki.
    W trakcie wysyłania danych, zmiana stanu DAT powinna następować gdy zegar jest nisko.
    Po 9 cyklach zegara układ sam generuje ACK, tj. ustawia pin DATA w stan niski.
    Wysyłanie danych odbywa się poprzez podanie bajtu adresu rejestru i kolejnych bajtów zawartości (można podać ich kilka).
    Jeśli chodzi o rejestry, to kolejno mamy:
    - limit prądu (1 bajt) - adres 0xC0
    - tryb RGB lub CW (1 bajt) - adres 0xC1
    - dane koloru (5 bajtów, RGBCW) - adres 0xC2 itd
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Wartości limitu prądu:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Wartości koloru oraz wyboru trybu:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Po wysłaniu danych (można wysyłać różne ilości bajtów, wskaźnik na docelowy adres zwiększa się sam) należy również wygenerować sygnał stop.
    Oto cała transmisja:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Wiem, że to wszystko może wydawać się niezbyt intuicyjne, więc spójrzmy już na praktyczny przykład:
    Code: c
    Log in, to see the code

    Uważny czytelnik zobaczy tu już pewną nieścisłość... tryb RGB ale 5 kolorów? W praktyce tak to działa, że w trybie RGB można ustawić wszystkie 5 wyjść i dodatkowo w ten sposób sterować również odcieniami bieli (zimny i ciepły). Kolejność bajtów z tablicy jest zmieniona, bo na tej płytce tak były podłączone LEDy.
    W moim przypadku tyle starczyło by obsłużyć wszystkie tryby. Innych sposobów nie implementowałem.
    Zostaje kwestia samego I2C. Można użyć sprzętowego, ale można też zrobić to w software poprzez proste digitalWrite i digitalRead, czyli zmiany stanów pinów cyfrowych w stylu Arduino.
    Dokładnie taką implementację mają popularne software dla ESP (bazujące na Arduino) i to z tego podejścia skorzystałem.
    (Uzupełnienie: poprzez "taką implementację" mam na myśli implementację komunikacji z SM2135, nie ogólnie całe software I2C. Podkreślam to dla zasady - dzięki @khoam)
    Code: c
    Log in, to see the code

    Tu już powinno pojawić się pierwsze pytanie od czytelnika - czemu "SetHigh" ustawia w tryb.... wejścia? A nie wyjścia w stanie wysokim?
    To dlatego, że urządzenie powinno móc wygenerować odpowiedź, te właśnie słynne ACK, czyli "nadpisać" stan wysoki ustawiony poprzez rezystor pull up (programowalny) na pinie input.
    Można to sobie wyobrazić tak jak działanie przycisku, gdy na pinie wejściowym mamy przycisk (między nim a masą) to ustawiamy programowany pull-up i domyślnie jest stan 1, ale jak ktoś wciśnie przycisk to jest stan 0.
    Code: c
    Log in, to see the code

    Oto procedura pisania jednego bajtu. Ta dziwna pętla z przesunięciem bitowym po prostu iteruje kolejne bity bajtu i kolejno sprawdza, czy dany bit jest zapalony w bajcie który chcemy wysłać.
    Następnie ma miejsce odebranie bitu ACK, zgodnie z tym co pisałem wcześniej pin DAT ustawiony jest w tryb wysoki ale poprzez input pullup (a nie output o stanie 1), dzięki czemu można odczytać odpowiedź od układu poprzez ReadDigitalInput. Stanowi to proste sprawdzenie, czy komunikacja się powiodła.
    To był dość uproszczony opis, ale myślę, że tyle starczy. Wiemy już jak działa ustawianie kolorów w lampkach na SM2135 oraz przy okazji też nieco dowiedzieliśmy się o samym I2C.
    Swoją drogą nie widzę tu opcji wyboru adresu urządzenia (czyli nie ma możliwości chyba połączenia wielu SM2135 na jednej magistrali), ale chyba producent tego wcale nie planował...
    Pełny kod implementacji komunikacji na którym się wzorowałem (oparty o digitalWrite itd):
    https://github.com/arendst/Tasmota/blob/devel...tasmota/tasmota_xlgt_light/xlgt_04_sm2135.ino

    Szybki test z aplikacją Tuya
    Aplikacja Tuya była omawiana wielokrotnie, więc bez większego komentarza.
    W tryb parowania wszedłem poprzez pięciokrotne podłączenie i odcięcie zasilania lampki. Bluetooth musiał być włączony w telefonie. Parowanie wymagało podania danych mojego WiFi, by podłączyć lampkę do internetu. Parowanie przebiegło bez problemów.
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze


    SM2135 w OpenBeken
    Ten akapit przeznaczony jest już dla użytkownika. Wgrywanie OpenBeken realizujemy tak jak np. opisywałem tutaj:
    Ogrodowy podwójny przekaźnik Tuya CCWFIO232PK - BK7231T - programowanie
    RESET wykonałem poprzez odcięcie zasilania. Aby nie przeciążyć portu USB prądem pobieranym po podłączeniu przez kondensatory, zasilanie pociągnąłem osobno. Oczywiście przez zewnętrzny LDO 3.3V.
    W samym OpenBeken po standardowej konfiguracji wybieramy piny SM2135 I2C:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    To zasadniczo wszystko. Od tego momentu możemy kontrolować lampkę z Home Assistant:
    Code: yaml
    Log in, to see the code

    (konfiguracja YAML nie różni się niczym od konfiguracji lampki RGBCW opartej o pięć kanałów PWM na BK7231T)
    Można też kontrolować ją z poziomu OpenBeken, ale wymaga to jeszcze zaznaczenia jednej flagi w Options->General, gdyż bez pinów PWM sam system na razie nie wykryje, że to RGBCW:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Od tego momentu uzyskujemy panel:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    Opcja poziomu jasności jest wspólna, natomiast z trybów "temperatura bieli" oraz "barwa RGB" możemy wybrać tylko jeden w danym momencie. Tak jak w Home Assistant.


    Kolejność kanałów w OpenBeken
    Kolejność kanałów RGB nie jest standaryzowana. Przekonałem się o tym dzięki pomocy testerów mojego firmware. W związku z tym do OpenBeken dodana została komenda:
    Code:

    SM2135_Map 0 1 2 3 4

    Komenda ta mapuje kolejno kanały RGBCW (pięć kanałów) na indeksy kanałów SM2135.
    Urządzenie nie zapamiętuje mapowania samo z siebie, komendę należy dodać do "short startup command" z Options bądź "autoexec.bat" z LittleFS w nowym panelu javascript.

    Kompatybilność z Tasmota Device Groups
    OpenBeken jest kompatybilny z Tasmota Device Groups, które pozwalają synchronizować pracę wielu urządzeń jednocześnie, jak również sterować dużą ilością urządzeń bez pośrednictwa Home Assistant.

    Podsumowanie
    W ten sposób udało uruchomić się SM2135. Dzięki dobrej dokumentacji oraz dostępności gotowych sterowników nie było z tym żadnego problemu. Proste operacje na pinach IO są dostępne na każdej platformie, więc wystarczy przeportować kod. Co prawda w przypadku mojego OpenBeken sterowanie jest zrealizowane nieco inaczej niż w innych systemach (na ten moment wszystko idzie przez tryb RGB, wszystkie 5 kolorów) ale na ten moment nie odczułem z tym żadnych problemów.
    Na koniec dodam, że obecność I2C (jak i tym bardziej modułu WiFi/Bluetooth, 32-bitowego) w zwykłych LEDówkach (no dobra, kolorowych) w pewien sposób skłania mnie do przemyśleń. Pomału wszystko robi się "online", nic dziwnego, że prowadzę projekt OpenBeken który pozwala odciąć takie gadżety od serwerów producenta i uniezależnić się od inwigilacji i ewentualnych problemów (co jak chmura padnie?).
    Chciałbym też podziękować użytkownikowi @Rawilson za polecenie mi sprawdzenia tej lampki. Przygoda była ciekawa a OpenBeken zyskał kolejny sterownik.
    Załączam notę katalogową omawianego układu SM2135 .

    Cool? Ranking DIY
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
    About Author
    p.kaczmarek2
    Level 27  
    Offline 
  • #2
    khoam
    Level 41  
    p.kaczmarek2 wrote:
    Zostaje kwestia samego I2C. Można użyć sprzętowego, ale można też zrobić to w software poprzez proste digitalWrite i digitalRead, czyli zmiany stanów pinów cyfrowych w stylu Arduino. Dokładnie taką implementację mają popularne software dla ESP (bazujące na Arduino) i to z tego podejścia skorzystałem.

    Oczywiście, nie jest to prawda. Obsługa programowa I2C w Arduino Core dla ESP8266 bazuje na przerwaniach i nie korzysta z funkcji digitalWrite() czy digitalRead() - Link. Natomiast w ESP32, Arduino Core korzysta z kontrolerów sprzętowych I2C (Link).
  • #3
    p.kaczmarek2
    Level 27  
    Obsługa programowa komunikacji I2C dla SM2135, której dotyczy tamto zdanie i którą omawiałem i pokazywałem w tym temacie, korzysta z funkcji digitalWrite i digitalRead, co może zobaczyć każdy kto chce poszukać nieco więcej informacji niż te zawarte w artykule:
    https://github.com/arendst/Tasmota/blob/devel...tasmota/tasmota_xlgt_light/xlgt_04_sm2135.ino
    O proszę, implementacji Tasmoty oparta o digitalWrite i digitalRead.
    Zresztą, pisałem o portowaniu.

    Mimo wszystko, dziękuję za próbę weryfikację moich informacji. To się chwali. Jakbyś znalazł jakieś rzeczywiste błędy to pisz śmiało. A te zdanie może i poprawię, chociaż mam wrażenie, że Twój komunikat wynika z Twojej nieświadomości, jak zrealizowany jest sterownik SM2135 (brzmi tak, jakbyś myślał, że korzysta z biblioteki programowego I2C w Arduino a nie z prostych operacji cyfrowych zdefiniowanych w tym samym pliku).

    Mimo wszystko, masz ode mnie plusika za przeczytanie.


    EDIT: By nie było, tu masz to samo w ESPHome:
    https://github.com/esphome/esphome/blob/dev/esphome/components/sm2135/sm2135.h
    Linkuję byście nie musieli szukać.
    Code: c
    Log in, to see the code
  • #4
    khoam
    Level 41  
    p.kaczmarek2 wrote:
    chociaż mam wrażenie, że Twój komunikat wynika z Twojej nieświadomości, jak zrealizowany jest sterownik SM2135 (brzmi tak, jakbyś myślał, że korzysta z biblioteki programowego I2C w Arduino

    Nie ma czegoś takiego, jak sterownik I2C w Arduino dla SM2135. To, że akurat w Tasmota (oraz dalej kopia tego softu w ESPHome [1]) została zaimplementowana obsługa typu bit-bang dla układu SM2135 wynika głównie z faktu, że to co jest nazywane "IIC" w SM2135 nie jest do końca kompatybilne ze standardem I2C. Być może niezbyt uważnie przeanalizowałeś notę tego układu i stąd wynika Twoja nieświadomość o różnicach pomiędzy implementacją obsługi I2C w Arduino Core dla ESP a tzw. "IIC" w SM2135. Nie zawsze należy dowierzać chińskim notom aplikacyjnym - chociaż w tym wypadku używają oni sformułowań CLK/DATA zamiast SCL/SDA, zapewne z przezorności.

    [1]
    Code: c
    Log in, to see the code
  • #5
    p.kaczmarek2
    Level 27  
    khoam wrote:

    Nie ma czegoś takiego, jak sterownik I2C w Arduino dla SM2135. To, że akurat w Tasmota

    A czy ja gdzieś napisałem, że w samym Arduino jest sterownik SM2135?

    A co do nazewnictwa... oficjalne nazewnictwo Tuya jest I2C/IIC:
    https://github.com/TuyaInc/tuya_zigbee_sdk/bl...ee/app/light/common/src/light_driver/sm2135.c
    Code: c
    Log in, to see the code


    Swoją drogą, mają też driver sm16726b, przyda się:
    https://github.com/TuyaInc/tuya_zigbee_sdk/bl.../app/light/common/src/light_driver/sm16726b.c
    Znasz jakiś produkt z sm16726b?
  • #6
    khoam
    Level 41  
    p.kaczmarek2 wrote:
    A co do nazewnictwa... oficjalne nazewnictwo Tuya jest I2C/IIC

    Tuya nie ustanawia standardów w zakresie protokołu I2C.
  • #7
    rawilson
    Level 11  
    @p.kaczmarek2 dzieki za ogarniecie sterownika! Oczywiscie wszystko dziala, nic tylko pozostaje teraz poczekac na stworzenie profilu urzadzenia dla tuya-cloudcutter
  • #8
    p.kaczmarek2
    Level 27  
    Nie ma za co, podziękuj Theo za przetarcie szlaków z tym driverem, jeszcze te kilka lat temu.

    Teraz będę finalizować kompatybilność z Tasmota DGR, by móc grupować urządzenia na różnych mikrokontrolerach (mam też ledówki na BL602, więc będzie jak znalazł).
    https://tasmota.github.io/docs/Device-Groups/
    Driver od razu ruszy u mnie na platformach: BK7231T, BK7231N, XR809, BL602, W800 (pewnie docelowo na W600 i RTL też).

    Miałem problem z testowaniem tego drivera DGR, bo jakoś na złość nie mogłem dostać żadnej LEDówki RGBCW z ESP8266, mimo iż kupowałem je losowo (a nie wedle wytycznych "gdzie jest beken" - za wyjątkiem tej, którą wskazałeś), ale ostatnio przyfarciłem no i mam. Dużo mi to prób zajęło. Znalezione ESPowe LEDówki to BKL1262 i BKL1250 (z tym, że była przy nich data 2019).

    @rawilson , czy Twoim zdaniem jest teraz nieco trudniej trafić na produkt Tuya z ESP niż kilka lat temu? :)
  • #9
    rawilson
    Level 11  
    Niestety tak, sam o tym sie przekonalem - wtedy jednak przeszczep był mozliwy :)

    Co do zarówki - zauwazyłem, ze w trybie standby delikatnie sie ona grzeje, powierdza to miernik - pokazuje jakies 0,5W w idle - po podpieciu innej sztuki z oryginalnym firmware pobor spada niemal do zera. Moglbys sprawdzic po swojej stronie czy tez tak masz?
  • #10
    p.kaczmarek2
    Level 27  
    Całkiem możliwe, że oni usypiają moduł WiFi, zwłaszcza, że SM2135 "trzyma" kolory po ich ustawieniu, bez potrzeby dalszej ingerencji modułu WiFi. Tym dopiero będę musiał się zająć.

    Co do Tuya-cloudcutter - może uda się nam zrobić profil samodzielnie?
    Jak masz chwilę to spróbuj:
    spectrum-W...k7231t.zip Download (3.24 MB)
    Instrukcja po angielsku (częściowa, moje notatki):
    Quote:

    1. Read flash from device
    2. Decrypt with https://github.com/notkmhn/bk7231tools

    $ pipenv run python bk7231tools.py dissect_dump -e -O dump_extract_dir dump.bin

    RBL containers:
    0x10f9a: bootloader - [encoding_algorithm=NONE, size=0xdd40]
    extracted to dump_extract_dir
    0x129f0a: app - [encoding_algorithm=NONE, size=0xfd340]
    extracted to dump_extract_dir


    3. So you get bk7231s_dump-2022- 5-19-21-41-28_app_1.00_decrypted file
    4. Use haxomatic
    https://github.com/tuya-cloudcutter/cloudcutter-bk7231-haxomatic

    W:\GIT\cloudcutter-bk7231-haxomatic>haxomatic.py "C:\Users\openshw\Downloads\bk_writer1.60-20210523\orange_socket-Mycket PE-01E IP44\after_pairing\extracted\bk7231s_dump-2022- 5-19-21-41-28_app_1.00_decrypted.bin"
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    [+] mf_cmd_process gadget address (THUMB): 0x92041
    [+] Found usable intermediate gadget at address 0x9ea48:

    5. Decrypt settings
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    6. Command decrypt_settings.py "bk7231s_dump-2022- 5-19-21-13-22.bin" result.bin
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    7. Open result in text viewer


    Jak masz chwilę to zrób to do punktu haxomatic i pokaż jakie adresy znalazł, jak nie to ja spróbuję w wolnym momencie...

    Jeśli natomiast haxomatic nie znajdzie (rzuci wyjątkiem) to trzeba z Ghidra siedzieć ale z tym raczej już nie pomogę.
  • #11
    rawilson
    Level 11  
    Code:
    [!] Loading and disassembling code - may take a moment
    
    [+] Code loaded!
    [!] Searching for post-vuln code patterns
    0[+] Found a post-vuln code pattern match!
    [+] Matched instructions:
            0xb678c: adds r4, #0xfc
            0xb678e: ldr r3, [r4, #0x50]
            0xb6790: ldr r1, [pc, #0xb0]
            0xb6792: adds r0, r6, #0
    [+] Identified lan object register as r4
    [!] Searching for JSON object register
    [+] Identified JSON object register as r7
    [!] Searching for ty_cJSON_Parse function address
    [+] ty_cJSON_Parse address: 0xc79b8
    [!] Searching for mf_cmd_process gadget address
    [+] mf_cmd_process gadget address (THUMB): 0xad51d
    [!] Searching for a mov r0, r7 intermediate gadget
    [+] Found usable intermediate gadget at address 0xba664:
            0xba664: ldr r3, [r4]
            0xba666: adds r0, r7, #0
            0xba668: blx r3
    [+] Payload gadgets (THUMB): intermediate_gadget_addr=0xba665 mf_cmd_gadget_addr=0xad51d
  • #12
    p.kaczmarek2
    Level 27  
    Ale fart, no to można łatwo zrobić profil.

    Ciąg dalszy instrukcji angielskojęzycznej z moich notatek (na brudno, mam nadzieję, że nie ma dużych błędów):
    Quote:


    5. Decrypt settings
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    6. Command decrypt_settings.py "bk7231s_dump-2022- 5-19-21-13-22.bin" result.bin
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    7. Open result in text viewer
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    8. Find schema
    Copy schema
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    9. Fix string
    10. My string (I chosen secnd one):
    [{"type":"obj","mode":"rw","property":{"type":"bool"},"id":1},{"mode":"rw","property":{"min":0,"max":86400,"scale":0,"step":1,"type":"value"},"id":9,"type":"obj"},{"mode":"ro","property":{"min":0,"max":50000,"scale":3,"step":100,"type":"value"},"id":17,"ty:"obj"},{"mode":"ro","property":{"min":0,"max":100000000,"scale":0,"step":1,"type":"value"},"id":23,"type":"obj"},{"mode":"ro","property":{"min":0,"max":1000000000,"scale":0,"step":1,"type":"value"},"id":24,"type":"obj"},{"mode":"ro","property":{"min":0,"max":1000000,"scale":0,"step":1,"type":"value"},"id":25,"type":"obj"},{"mode":"ro","property":{"type":"bitmap","maxlen":6},"id":26,"type":"obj"}]
    11. Generate profile, open payload_builder.py, add here:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    12. Copy
    [+] mf_cmd_process gadget address (THUMB): 0x92041
    [+] Found usable intermediate gadget at address 0x9ea48:
    intermediate gadget = prep_gadget
    mf_cmd_gadget = pwn gadget
    And copied:
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    13. Run it
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    14. Result
    {
    "chip": "BK7231T",
    "payload": "eyJhdXprZXkiOiJBVVRIS0VZQUFBQUFBQUFBIiwidXVpZCI6IlVVSURBQUFBQUFBQSIsInBza0tleSI6IiIsInByb2RfdGVzdCI6ZmFsc2UsImFwX3NzaWQiOiJBIiwic3NpZCI6IkE
    iLCJ0b2tlbiI6IkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUjqCSJ9",
    "authkey_template": "AUTHKEYAAAAAAAAA",
    "uuid_template": "UUIDAAAAAAAA",
    "datagram_padding": "QkJCQkEgCQBBIAkAQSAJAEEgCQBBIAkAQSAJAEEgCQBBIAkAQSAJAA=="
    }
    15. In device-profiles, create directory for manufacturer and device . copy template ( I copied fromk treatlife nl10)
    16. Update profile (with generated one)
    17. Open tuya.device.active.json
    18. Escape your string
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    into
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    19. Replace into copied active json
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
    C:\Users\openshw\Downloads\bk_writer1.60-20210523\orange_socket-Mycket PE-01E IP44\after_pairing\extracted\bk7231s_dump-2022- 5-19-21-41-28_app_1.00_decrypted.bin



    Mój dodatkowy komentarz - w punkcie 8 znajdujesz schema opisujące urządzenie, przy przekopiowywaniu go musisz uważać bo kopiujesz ASCII z danych binarnych, z systemu plików i tam mogą być nagłówki sektorów które musisz pominąć (np jak widzisz nienaturalnie przerwany napis to go poprawriasz ręcznie)
    Schema można też wziąć z innego gotowego urządzenia w Tuya-cloudcutter, o ile jest to ten sam, powiedzmy, typ urządzenia.

    W 11 payload_builder.py tworzysz 'payload' stringa do przepełnienia bufora json (do nadpisania adresów)

    Ogółem weź profil analogicznie działającej lampki (RGBCW też) gotowy i w nim rób zmiany (może nawet schema przypasuje).

    Tu masz przykład mojego pull request dla nich jak sam zrobiłem profil dla urządzenia:
    https://github.com/tuya-cloudcutter/tuya-cloudcutter/pull/97
    Obejrzyj sobie diff:
    https://github.com/tuya-cloudcutter/tuya-clou...mits/41f82d20b0e4d450ec6d788441e612910740dc32

    Wymagane skrypty Python:
    payload_bu..der.zip Download (2.54 kB)
    decrypt_se..ngs.zip Download (890 bytes)
    O ile dobrze pamiętam, decrypt_settings.py modyfikowałem by brał zrzuty z BKwriter 1.60 a nie z bk7231tools, gdyż bkWriter1.60 pomija bootloader (jest inny offset).

    Na razie tyle, zwłaszcza że zaraz wychodzę a potem będę na innej maszynie, ale masz chyba wszystko by zrobić pełny profil. Jak coś to spróbuję pomóc.

    UWAGA: sprawdź każdy krok dwa razy i pamiętaj, że istnieje ryzyko że zablokujesz sobie urządzenie jak zrobisz źle
  • #13
    chemik_16
    Level 25  
    oo dzięki za temat, akurat zastanawiałem się dlaczego moduły zdemontowane z żarówek DGM dają mi fazę na wyjściach esp8266.
    Sterownik LED oparty jest na SM2123, i faktycznie idzie do niego faza.
    Sam zasilacz wygląda na odseparowany od sieci, trafo ma 2 pary odczepów.
    Spaliłem już jeden łącząc GPIO4 i 5 z wejściem modbus falownika. Poszła różnicówka, esp8266, max485 i układ zasilacza ?L700?
    Na każdym z wyjść esp8266 i VCC mam fazę, zapala się neonówka.
    WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze WiFi LED RGBCW WOJ14415 z SM2135 - I2C protokół komunikacji, wnętrze
  • #14
    rawilson
    Level 11  
    @p.kaczmarek2 dzis postaram sie zrobic profil i go przetestowac - jesli zadziała stworze PR na githubie.
  • #15
    hode0055
    Level 2  
    Czy ktoś ma problemy z mqtt i homeassistant . z jakiegoś powodu chip nie reaguje na żadne polecenia mqtt i homeassistant go nie wykrywa. wszystko wydaje się być skonfigurowane ok
  • #16
    p.kaczmarek2
    Level 27  
    Hej @hode0055, czy możesz podać nam więcej informacji o swojej konfiguracji? Moja żarówka I2C działa dobrze z HA. Co masz na myśli przez ,,wykryj to"? Obecnie musisz dodać go ręcznie do configuration.yaml, czy próbowałeś tego?
    Czy możesz pokazać zrzuty ekranu swojej konfiguracji?
    Zrobię co w mojej mocy, aby ci pomóc.
  • #17
    hode0055
    Level 2  
    Cześć @p.kaczmarek2 :) Dzięki za tak szybki powrót .
    Myślę, że teraz to rozumiem. Używałem nieprawidłowej konfiguracji w pliku configuration.yaml. Nowością jest

    mqtt:
    światło:
    nazwa: "Lampa nocna"
    rgb_command_template: "{{ '%02x%02x%02x' | format(czerwony, zielony, niebieski)}}"
    rgb_state_topic: "lampka_łóżkowa/led_basecolor_rgb/get"
    rgb_command_topic: "cmnd/lampa_łóżkowa/led_basecolor_rgb"
    rgb_value_template: "{{ value[0:2]|int(base=16) }},{{ value[2:4]|int(base=16) }},{{ value[4:6]|int( baza=16) }}"
    command_topic: "cmnd/lampa_łóżkowa/led_enableAll"
    state_topic: "lampka_łóżkowa/led_enableAll/get"
    Availability_topic: "lampka_łóżkowa/podłączona"
    payload_on: "1"
    payload_off: "0"
    bright_command_topic: "cmnd/bedside_lamp/led_dimmer"
    jasność_skala: 100
    bright_state_topic: "lampka_łóżkowa/ściemniacz led/get"
    bright_value_template: "{{value}}"
    color_temp_command_topic: "cmnd/lampka_łóżkowa/temperatura_led"
    color_temp_state_topic: "lampka_łóżkowa/temperatura_led/pobierz"
    #color_temp_value_template: "{{value}}"
    zachowaj: prawda

    i wydaje się, że działa dobrze. Będę musiał zrobić jeszcze jakiś test jak wrócę z pracy bo w tej chwili chip nie jest w żarówce .

    Spodziewałem się, że komar odkryje to automagicznie lub wykryje wiadomości mqtt z mojego urządzenia, ale tak nie jest. To mnie zdezorientowało.
  • #18
    p.kaczmarek2
    Level 27  
    Ach ok, martwię się, że jest jakiś błąd, a jak wszyscy wiemy, błędy się zdarzają.

    Automatyczne wykrywanie jest na mojej liście TODO, teraz są rzeczy z większymi priorytetami.