logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Miernik mocy KWS-302WF: Przejście z bocznika na transformator z chipem HT7017 kiedyś w przyszłości .

Lusant 15 Wrz 2024 00:16 12477 30
REKLAMA
Treść została przetłumaczona angielski » polski Zobacz oryginalną wersję tematu
  • #1 21226708
    Lusant
    Poziom 5  
    Posty: 8
    Pomógł: 1
    Ocena: 3
    Cześć,

    To mój pierwszy post na forum, więc przepraszam, jeśli coś jest niezgodne z regulaminem.

    Ostatnio kupiłem miernik mocy KWS-302WF i nie spodobał mi się sposób pomiaru prądu. Rozebrałem więc urządzenie, aby sprawdzić, czy jestem w stanie zmienić bocznik na transformator.
    To jest początek historii.

    Zobaczyłem, że układ pomiarowy to HT7017 od HitrendTech, który jest obsługiwany przez PY32F002A, który z kolei wydaje polecenia do TM1622, który obsługuje wyświetlacz.
    Układ WiFi to CBU (BK7231N ?) podłączony do PY32F.
    Wykonałem kilka prac lutowniczych i przechwyciłem komunikację między CBU a PY32F (a także między tym a HT7017).
    Poniżej kilka zdjęć i plików z danymi komunikacyjnymi.

    Zobaczmy, czy będzie to przydatne do zmiany oprogramowania układowego w CBU ...

    Miernik mocy KWS-302WF z wyświetlaczem cyfrowym i funkcją zdalnego sterowania Wi-Fi.
    Zbliżenie na elektronikę wewnątrz miernika mocy, widoczny moduł CBU i inne elementy. Zbliżenie na rozebrany miernik mocy KWS-302WF z widoczną płytką obwodu. Zdjęcie rozebranego miernika mocy KWS-302WF z widoczną płytką drukowaną i podzespołami. Płytka drukowana miernika mocy KWS-302WF z widocznymi podzespołami elektronicznymi. Przedstawiony jest otwarty miernik mocy KWS-302WF z widoczną płytką drukowaną i komponentami elektronicznymi. Wnętrze miernika mocy KWS-302WF z widocznymi układami scalonymi i modułem WiFi CBU.
    Załączniki:
    • comm between CBU to and from PY32F.zip (1.04 MB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #2 21226735
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14721
    Pomógł: 659
    Ocena: 12802
    Ten plik xlsx to bardzo dobra i profesjonalna robota. Zrobiłeś to bardzo dobrze. To z pewnością może pomóc. Może się wydawać, że w twoim dokumencie brakuje identyfikatorów dpID, ale myślę, że możesz użyć do tego tego tego narzędzia:
    Zrzut ekranu narzędzia TuyaMCU Explorer/Analyzer i arkusza Excel. .
    Zobacz: https://www.elektroda.com/rtvforum/topic3970199.html


    Następnie dane można wykorzystać do zmiany oprogramowania układowego CBU, aby uzyskać szczegółowe informacje, zobacz przewodnik TuyaMCU:
    https://www.elektroda.com/rtvforum/topic4038151.html

    Czy dane zostały przechwycone z prędkością 9600 bodów czy 115200?

    Upewnij się, że utworzyłeś kopię zapasową flash 2 MB i najpierw przeczytałeś przewodnik TuyaMCU, aby uzyskać ogólne informacje.

    Możesz również sprawdzić próbki autoexec.bat tutaj:
    https://github.com/openshwprojects/OpenBK7231T_App/blob/main/docs/autoexecExamples.md

    Pamiętaj, że może być konieczne zerwanie połączenia UART w celu flashowania urządzenia, ponieważ ten sam port UART, który jest używany do flashowania, jest również używany do komunikacji TuyaMCU.

    Oto nasz flasher:
    https://github.com/openshwprojects/BK7231GUIFlashTool

    Jeśli chodzi o zmianę bocznika - może to być bardzo trudne, ponieważ PY32F002A jest odpowiedzialny za większość rzeczy. Musiałbyś jakoś zmienić oprogramowanie układowe PY32F002A, jak sądzę. PY32F002A już raportuje pomiary do modułu WiFi przez UART, więc nie sądzę, aby można było zastosować zmianę bocznika na module WiFi. Ale pewnie już o tym wiesz...

    TM1622 jest również bardzo interesujący dla mnie, ale ponownie, w tym przypadku TM1622 jest obsługiwany przez PY32F002A, więc nie powinieneś się tym martwić. Zawsze zmieniamy tylko firmware modułu WiFi, a nie MCU. Mimo to OBK może już bezpośrednio sterować TM1650 i TM1637/TM1638 i podobnymi, więc jeśli jest taka potrzeba, mógłbym również w jakiś sposób uruchomić sterownik TM1622.

    Czy twoim celem jest tylko zmiana oprogramowania układowego, czy chcesz również zmienić ten bocznik?
    Pomogłem? Kup mi kawę.
  • #3 21226741
    Lusant
    Poziom 5  
    Posty: 8
    Pomógł: 1
    Ocena: 3
    p.kaczmarek2 napisał:
    Ten plik xlsx to bardzo dobra i profesjonalna robota. Zrobiłeś to bardzo dobrze. To z pewnością może pomóc. W twoim dokumencie może brakować identyfikatorów dpID, ale myślę, że możesz użyć do tego tego narzędzia:

    Dzięki za komplement ...
    Nie straciłem dpID, usunąłem go.
    Wyjaśniam dlaczego, jestem nowy w tych rzeczach HA i dając pierwsze kroki, więc to jest moje "uczucie", że ten identyfikator może być używany do Tuya zablokować moje urządzenie ... przepraszam, jeśli jest to duży błąd.

    Przeczytam sugerowane wskazówki ...

    p.kaczmarek2 napisał:
    Czy to zostało przechwycone z prędkością 9600 bodów czy 115200?

    Komunikacja między HT7017 a PY32F odbywa się z prędkością 4800 bps.
    Komunikacja między CBU a PY32F to 115200 bps

    p.kaczmarek2 napisał:
    Pamiętaj, że może być konieczne zerwanie połączenia UART w celu flashowania urządzenia, ponieważ ten sam port UART, który jest używany do flashowania, jest również używany do komunikacji TuyaMCU.


    Aby sflashować CBU, wyjmę go, jest on używany tylko jako rodzaj bramki i są tylko 4 piny do odlutowania.

    p.kaczmarek2 napisał:
    Czy Twoim celem jest tylko zmiana firmware, czy chcesz też zmienić ten bocznik?
    .

    To będzie najtrudniejsza część ... najprawdopodobniej nie uda mi się odczytać PY32F ... chip prawdopodobnie jest chroniony i dozwolone jest tylko programowanie.
    Co więcej ... jest niewiele dokumentów na temat HT7017 ... w każdym razie czytam ....
  • #4 21226744
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14721
    Pomógł: 659
    Ocena: 12802
    Lusant napisał:

    Wyjaśniam dlaczego, jestem nowy w tych sprawach HA i stawiam pierwsze kroki, więc to moje "przeczucie", że ten identyfikator może zostać użyty do zablokowania mojego urządzenia przez Tuya ... przepraszam, jeśli to duży błąd.

    Niemożliwe. Po flashowaniu OpenBeken, Tuya nie ma żadnego dostępu.


    Lusant napisał:

    Komunikacja między HT7017 a PY32F odbywa się z prędkością 4800 bps.
    Komunikacja między CBU a PY32F to 115200 bps

    Przez komunikację TuyaMCU rozumiemy komunikację między modułem WiFi a MCU, więc 115200. Będziesz musiał uwzględnić to w autoexec.bat. Mam nadzieję, że możesz przeczytać nieco więcej o autoexec.bat w przewodniku TuyaMCU, o którym wspomniałem.


    Lusant napisał:

    To będzie najtrudniejsza część ... najprawdopodobniej nie uda mi się odczytać PY32F ... chip prawdopodobnie jest chroniony i dozwolone jest tylko programowanie.
    Więcej ... jest kilka dokumentów o HT7017 ... w każdym razie czytam...

    Dlaczego chcesz zmienić bocznik?
    Było coś takiego:
    https://github.com/no2chem/open-tuyamcu
    ale nadal uważam, że wymagałoby to dużo pracy. PY32F obsługuje komunikację TuyaMCU po stronie MCU, więc flashując go już to stracisz.
    Pomogłem? Kup mi kawę.
  • #5 21230407
    erbharatrankawat01
    Poziom 1  
    Posty: 1
    Cześć Lusant
    Czy mogę uzyskać Twój adres e-mail, potrzebuję Twojej pomocy, ponieważ budujemy produkt pomiarowy przy użyciu HT7017 przez ESP32
  • #6 21230698
    Lusant
    Poziom 5  
    Posty: 8
    Pomógł: 1
    Ocena: 3
    Cześć @erbharatrankawat01,

    Najlepszym i najszybszym sposobem uzyskania wsparcia jest otwarcie wątku na ten temat.
    To jest szlachetny cel forów, ludzie z wątpliwościami, pytają, ludzie, którzy wiedzą, odpowiadają ...
    W ten sposób każdy może uczestniczyć i uczyć się.

    Uwaga: Mam kilka dokumentów, a także kilka nagranych sesji komunikacji szeregowej między HT7017 i PY32F, które mogę opublikować, jeśli chcesz, w każdym razie jest wiele do nauczenia się o tym chipie, ponieważ dokumentacja nie jest zbyt szczegółowa.
  • REKLAMA
  • #7 21335731
    Hypnotics
    Poziom 4  
    Posty: 8
    Ocena: 1
    Lusant napisał:
    Cześć @erbharatrankawat01,
    Uwaga: Mam kilka dokumentów, a także kilka nagranych sesji komunikacji szeregowej między HT7017 i PY32F, które mogę opublikować, jeśli chcesz, w każdym razie jest wiele do nauczenia się o tym chipie, ponieważ dokumentacja nie jest zbyt szczegółowa.


    Cześć, Lusant,
    Mam to samo urządzenie z tym samym cbu i mcu. Chciałbym zapytać, czy już flashowałeś na nim openbeken. A jeśli tak, to czy możesz mi pomóc z konfiguracją pliku autoexec.bat. Z góry dzięki.
  • #8 21337953
    Lusant
    Poziom 5  
    Posty: 8
    Pomógł: 1
    Ocena: 3
    Cześć @Hypnotics

    Jeszcze tego nie zrobiłem.
    Zrobiłem już kopię zapasową za pomocą narzędzia wykonanego przez @p.kaczmarek2, a także uzyskałem więcej danych na temat komunikacji między PY32F a BK7231N.
    W międzyczasie poczytałem trochę więcej o Tuya i jest coś o lokalnym adresie, który chcę przetestować. Ponieważ nie jestem pewien, czy mogę wrócić po flashowaniu, zawieszam projekt, dopóki nie będę miał czasu na ponowne uruchomienie.
  • #9 21338456
    divadiow
    Poziom 38  
    Posty: 5182
    Pomógł: 445
    Ocena: 910
    @Lusant uprzejmie przesłał mi kopię zapasową oprogramowania układowego w celu sanityzacji i wyodrębnienia informacji. Załączam wynik dla wszystkich zainteresowanych tym urządzeniem.

    dane przechowywania:

    Kod: JSON
    Zaloguj się, aby zobaczyć kod


    Sparowane obrazy aplikacji Tuya:
    Ekran aplikacji Tuya pokazujący dodane urządzenie KWS-302WF. Ustawienia aplikacji do zarządzania urządzeniem elektrycznym. Interfejs aplikacji mobilnej z ustawieniem timera odliczania. Ekran aplikacji Tuya z informacją o braku danych czasomierza i przyciskiem Dodaj. Ekran aplikacji Tuya pokazujący zużycie energii elektrycznej z zerowym pomiarem. Ekran aplikacji pokazujący stan miernika energii KWS-302WF z wyłączonym wyjściem.

    boot log:

    Kod: Text
    Zaloguj się, aby zobaczyć kod
    Załączniki:
    • readResult_BK7231N_QIO_kws302_2024-08-12-12-18-44.bin (2 MB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #11 21340103
    Hypnotics
    Poziom 4  
    Posty: 8
    Ocena: 1
    @divadiow tutaj jest fabryczne oprogramowanie dla kws-302wf.
    Załączniki:
    • readResult_BK7231N_QIO_kws-302wf_2024-09-12-14-36-44.bin (2 MB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #12 21340504
    divadiow
    Poziom 38  
    Posty: 5182
    Pomógł: 445
    Ocena: 910
    dzięki. interesujące. Kopia zapasowa Lusant to wersja 2.1.6, która ma teraz profil Cloucutter. Twoja kopia zapasowa to 2.1.17, która jest znaną poprawioną wersją.
  • #13 21346042
    Hypnotics
    Poziom 4  
    Posty: 8
    Ocena: 1
    >>21340504 czy możesz mi pomóc z konfiguracją autoexec.bat dla tego urządzenia.
  • REKLAMA
  • #14 21347403
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14721
    Pomógł: 659
    Ocena: 12802
    Hej, jaki jest twój aktualny autoexec.bat , @Hypnotics ? Jaki masz obecnie problem?

    Czy widziałeś mój samouczek ATORCH, który jest bardzo podobnym urządzeniem z podobnym ekranem?
    Atorch S1TW-FR zaawansowany licznik/termostat energii z LCD - praca bez chmury
    Ten temat powinien dać ci mniej lub bardziej szczegółowy przewodnik pokazujący, jak przetwarzać urządzenia TuyaMCU, takie jak ten, który masz...
    Pomogłem? Kup mi kawę.
  • #15 21348761
    Hypnotics
    Poziom 4  
    Posty: 8
    Ocena: 1
    >>21347403 @p.kaczmarek2 w załączniku mój plik demo autoexec.bat. sprawdź dokładnie i mnie pokieruj.
     startdriver tuyamcu
    startDriver NTP
    tuyaMcu_setBaudRate 115200
    // tuyaMcu_defWiFiState 4
    
    // Power On/Off dpID 16  - Channel 1
    setChannelType 1 toggle
    setChannelLabel 1 "On/Off"
    // linkTuyaMCUOutputToChannel dpId verType tgChannel
    linkTuyaMCUOutputToChannel 16 bool 1
    
    // channel types
    setChannelType 2 voltage_div10
    setChannelLabel 2 "Voltage"
    setChannelType 3 current_div1000
    setChannelLabel 3 "Current"
    setChannelType 4 power_div10
    setChannelLabel 4 "Power"
    setChannelType 5 ReadOnly
    setChannelLabel 5 "RunTime"
    setChannelType 6 EnergyTotal_kWh_div1000
    setChannelLabel 6 "Total Energy"
    setChannelType 7 ReadOnly
    setChannelLabel 7 "Power Factor"
    setChannelType 8 ReadOnly
    setChannelLabel 8 "Frequency"
    setChannelType 9 temperature
    setChannelLabel 9 "Temperature"
    
    
    // linkTuyaMCUOutputToChannel dpId verType tgChannel
    // voltage
    linkTuyaMCUOutputToChannel 101 val 2
    // current
    linkTuyaMCUOutputToChannel 102 val 3
    // power
    linkTuyaMCUOutputToChannel 103 val 4
    // Runtime
    linkTuyaMCUOutputToChannel 104 val 5
    // power
    linkTuyaMCUOutputToChannel 105 val 6
    // power
    linkTuyaMCUOutputToChannel 106 val 7
    // power
    linkTuyaMCUOutputToChannel 107 val 8
    // power
    linkTuyaMCUOutputToChannel 108 val 9
    
    
    
    // NOTE: test code only so I can refresh quickly without restarting
    tuyaMcu_sendQueryState
  • #16 21348886
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14721
    Pomógł: 659
    Ocena: 12802
    Czy można sterować przekaźnikiem? Czy napięcie jest prawidłowo wyświetlane?
    Pomogłem? Kup mi kawę.
  • #17 21349683
    Hypnotics
    Poziom 4  
    Posty: 8
    Ocena: 1
    >>21348886 Tak, mogę sterować przekaźnikiem, a napięcie jest wyświetlane prawidłowo, jak pokazano na ekranie urządzenia. Pomóż mi z OVP OPP i innymi konfigurowalnymi ustawieniami parametrów.
  • #18 21365074
    adolfotregosa
    Poziom 2  
    Posty: 2
    Cześć,

    Dziękuję za ten projekt.
    Chciałbym zgłosić, że parsowanie wartości częstotliwości jest niekompletne, ponieważ brakuje części dziesiętnej.

    Info:TuyaMCU:Odebrane: 55 AA 03 07 00 08 6B 02 00 04 00 00 00 32 B4
    Info:TuyaMCU:P rocessIncoming[v=3]: cmd 7 (State) len 15
    Info:TuyaMCU:P arseState: id 107 type 2-val len 4
    Info:TuyaMCU:P arseState: int32 50

    O ile mogę powiedzieć:
    32 = 50
    B4 = 180
    W tym przypadku kropką dziesiętną jest "0" od 180, więc poprawną wartością powinno być 50.0Hz.

    Inny przykład:
    Info:TuyaMCU:Received: 55 AA 03 07 00 08 6B 02 00 04 00 00 00 31 B3
    Info:TuyaMCU:P rocessIncoming[v=3]: cmd 7 (State) len 15
    Info:TuyaMCU:P arseState: id 107 type 2-val len 4
    Info:TuyaMCU:P arseState: int32 49

    Tutaj:
    31 = 49
    B3 = 179 = 9
    Odpowiada to częstotliwości 49,9 Hz.

    Zatem pierwsza liczba w postaci dziesiętnej od prawej do lewej jest brakującą liczbą dziesiętną.

    Dziękujemy za pomoc!

    Inną obserwacją jest to, że OpenBK brakuje opcji "przycisku". Obecnie mamy tylko przełącznik, podczas gdy niektóre funkcje są prostym działaniem typu "naciśnij, aby wyczyścić". W moim autoexec.bat byłoby to używane dla setChannelType 9. Czy można to jakoś zaimplementować?

    Panel kontrolny urządzenia KWS-302WF wyświetlający różne parametry i opcje ustawień.

    Stworzyłem bardziej kompleksowy plik autoexec.bat dla tego urządzenia:

    autoexec.bat
    
    startdriver tuyamcu
    startDriver NTP
    tuyaMcu_setBaudRate 115200
    tuyaMcu_defWiFiState 4
    
    // Power On/Off dpID 16  - Channel 1
    linkTuyaMCUOutputToChannel 16 bool 1
    setChannelType 1 toggle
    setChannelLabel 1 " Relay On/Off"
    
    
    // Measurements
    
    // voltage
    linkTuyaMCUOutputToChannel 101 val 2
    setChannelType 2 voltage_div10
    //setChannelLabel 2 "Voltage"
    
    // current
    linkTuyaMCUOutputToChannel 102 val 3
    setChannelType 3 current_div1000
    setChannelLabel 3 "Current"
    
    // power
    linkTuyaMCUOutputToChannel 103 val 4
    setChannelType 4 power_div10
    //setChannelLabel 4 "Power"
    
    // Total Energy kWh 
    linkTuyaMCUOutputToChannel 105 val 5
    setChannelType 5 EnergyTotal_kWh_div1000
    //setChannelLabel 5 "Total Energy"
    
    // power factor
    linkTuyaMCUOutputToChannel 106 val 6
    setChannelType 6 PowerFactor_div100
    setChannelLabel 6 "Power Factor"
    
    // frequency
    linkTuyaMCUOutputToChannel 107 val 7
    setChannelType 7 ReadOnly
    setChannelLabel 7 "Frequency Hz"
    
    // external temperature
    linkTuyaMCUOutputToChannel 108 val 8
    setChannelType 8 ReadOnly
    setChannelLabel 8 "External Temperature (°C)"
    
    // Reset Total kWh
    linkTuyaMCUOutputToChannel 118 bool 9
    setChannelType 9 toggle
    setChannelLabel 9 "Reset EnergyTotal"
    
    // low voltage
    linkTuyaMCUOutputToChannel 109 val 10
    setChannelType 10 TextField
    setChannelLabel 10 "Low Voltage (V)"
    
    // over voltage
    linkTuyaMCUOutputToChannel 110 val 11
    setChannelType 11 TextField
    setChannelLabel 11 "Over Voltage (V)"
    
    // over current
    linkTuyaMCUOutputToChannel 111 val 12
    setChannelType 12 TextField
    setChannelLabel 12 "Over Current (mA)"
    
    // over power
    linkTuyaMCUOutputToChannel 114 val 13
    setChannelType 13 TextField
    setChannelLabel 13 "Over Power (W)"
    
    // over temperaure
    linkTuyaMCUOutputToChannel 115 val 14
    setChannelType 14 TextField
    setChannelLabel 14 "Over Temperature (°C)"
    
    // screen_poweroff
    linkTuyaMCUOutputToChannel 119 val 15
    setChannelType 15 TextField
    setChannelLabel 15 "Screen Power Off (0-60 Minutes)"
  • #19 21365793
    Hypnotics
    Poziom 4  
    Posty: 8
    Ocena: 1
    >>21365074 Czy jest jakiś dpID dla ustawienia czasu powrotu po zadziałaniu zabezpieczenia przepięciowego?
  • #20 21365871
    adolfotregosa
    Poziom 2  
    Posty: 2
    >>21365793 afaik, no
  • REKLAMA
  • #22 21366148
    Hypnotics
    Poziom 4  
    Posty: 8
    Ocena: 1
    @divadiow Czy jest jakiś sposób na ustawienie czasu powrotu po zadziałaniu przekaźnika w celu aktywacji ochrony przepięciowej w tym urządzeniu?
  • #23 21428074
    m_orkisz
    Poziom 1  
    Posty: 1
    Zbliżenie na płytkę drukowaną z uszkodzonym elementem oznaczonym w czerwonym kwadracie.

    Witam,
    U mnie przestało działać Wi-Fi, a potem zgasł ekran. Po otwarciu jest uszkodzony ten element - co to takiego i czy można to kupić?
  • #25 21527175
    Lusant
    Poziom 5  
    Posty: 8
    Pomógł: 1
    Ocena: 3
    >>21428074
    Może za późno, ale chip jest częścią zasilacza.
    Jest kilka sklepów, gdzie można go kupić... google dla "uni u3211".
  • #26 21540511
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14721
    Pomógł: 659
    Ocena: 12802
    Załączam kartę katalogową U3211 (po chińsku, ale ze schematem i kilkoma informacjami po angielsku):
    Załączniki:
    • uni-semic_1725427419000.pdf (791.83 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    Pomogłem? Kup mi kawę.
  • #27 21614456
    DGAlexandru
    Poziom 8  
    Posty: 7
    Pomógł: 1
    Ocena: 1
    Cześć,

    Dziękuję za podzielenie się ze światem wszystkimi swoimi testami, wynikami i narzędziami :) .
    Mam również to urządzenie i chcę je ulepszyć - brakuje mu przynajmniej czasu przywracania zasilania (ten powinien najpierw odłączyć obciążenie przy włączaniu zasilania, ponieważ używa przekaźnika zatrzaskowego, sprawdzić napięcie i tylko wtedy, gdy znajduje się w skonfigurowanym zakresie, nakazać przekaźnikowi zamknięcie obwodu), pod napięciem i nad napięciem.
    Oto mój "wkład zwrotny":

    Miałem MCU (PY32F002A) z firmware w wersji 0.1.17 (chyba) i zobaczyłem, że jest nowsza wersja - 0.2.1.
    Przed aktualizacją oprogramowania MCU podłączyłem adapter szeregowy RS232 do komunikacji szeregowej między MCU i CBU, aby podsłuchać pobieranie oprogramowania.
    Niestety pozwoliłem mu podłączyć się do linii RX z MCU do CBU... więc otrzymałem tylko odpowiedzi MCU do CBU podczas procesu aktualizacji FW.

    Ale korzystając z tej strony internetowej: Link i Link szybko zrozumiałem komunikację między CBU i MCU i zbudowałem skrypt Pythona, aby emulować część komunikacyjną MCU.

    Z tego, co udało mi się zrozumieć z podsłuchiwania komunikacji między CBU i MCU, CBU pyta MCU tylko podczas uruchamiania o wersję oprogramowania układowego MCU (najpierw próbowałem wysłać zmodyfikowane informacje o produkcie podczas normalnej pracy urządzenia, bez odłączania CBU od MCU).
    W skrócie komunikacja ta wygląda następująco:
    #Heartbeat check (0x00)
    #CBU: 55AA 00 00 0000 FF
    #MCU: 55AA 03 00 0001 00 03
    
    #Query product information (0x01)
    #CBU: 55AA 00 01 0000 00
    #MCU: 55AA 03 01 002A 7B2270223A227461646D313361676A69676264747864222C2276223A22302E322E31222C226D223A327D 15
    
    #Query working mode (0x02)
    #CBU: 55AA 00 02 0000 01   
    #MCU: 55AA 03 02 0000 04
    
    #Report network status (0x03)
    #CBU: 55AA 00 03 0001 02 05
    #MCU: 55AA 03 03 0000 05
    
    # Some times there is another heartbeat check, but on this one, MCU answers slightly different - as this is not the first HB check
    #CBU: 55AA 00 00 0000 FF 
    #MCU: 55AA 03 00 0001 01 04
    
    #Query status (0x08)
    #CBU: 55AA 00 08 0000 07
    #MCU: answers with the known DIDs
    
    #Start MCU OTA update (0x0A)
    #CBU: 55AA 00 0A 0004 00002F0C 48 - this is for 0.2.1 MCU firmware version - it asks for buffer size and mentions that the bin file is of 0x2F0C size = 12.044bytes; also it mentions that the communication is going to take place using only 4 bytes for the offset bytes for the bin file
    #MCU: 55AA 03 0A 0001 00 0D - MCU answers that the buffer size it accepts is of 256bytes (coded as a 0x00 - default, original old CBU fw version; 0x01 is 512bytes and 0x02 is 1024bytes)
    
    #Transfer update package
    #55AA 00 0B 0104 00000000 {xx} XX - {xx} are the bytes; 0104 means 0x100bytes = 256 bytes and 4 is for number of offset bytes; first 4 bytes and the offset
    #55AA 03 0B 0000 0D - standard answer when everything is OK on the receiving packet
    
    #Other CBU requests(?) seen during startups
    #55AA 00 03 0001 03 06  - Network status changed
    #55AA 00 03 0001 04 07  - Another network status changed
    


    Odpowiedź na informacje o produkcie MCU przekłada się na to (prosta konwersja HEX na ASCII):
    Uª*{"p": "tadm13agjigbdtxd", "v": "0.2.1", "m":2} = Nagłówek, typ odpowiedzi, liczba bajtów, DATA , Suma kontrolna.
    Wystarczy zmienić 0.2.1 na coś niższego, a następnie zaktualizować sumę kontrolną. W moim teście zrobiłem to z 0.2.0:
    #55AA 03 01 002A 7B2270223A227461646D313361676A69676264747864222C2276223A22302E322E 30 222C226D223A327D 14

    Dzięki temu mogłem emulować urządzenie, nadal używając oryginalnego CBU, aby połączyć się z Smart Life Cloud i ponownie pobrać oprogramowanie układowe dla MCU:
    PY32F00...bin (11.76 kB)Musisz być zalogowany, aby pobrać ten załącznik. .
    Ten bin firmware to nie wszystko, co jest przechowywane w MCU, wydaje się, że istnieją inne lokalizacje flash, do których uzyskuje dostęp ten firmware, lokalizacje, które nie są zawarte w tym zrzucie (być może ustawienia, które wydają się być trwałe podczas restartów), a także Boot Loader, który jest wywoływany podczas aktualizacji (zobaczysz "boot" na ekranie, a także licznik (?) podczas rzeczywistej aktualizacji firmware), który wydaje się być w dedykowanej przestrzeni flash i jest napisany w fabryce, przynajmniej.
    Nie znalazłem żadnego sposobu na wyjście MCU z tego procesu firmware, ale ponieważ nic nie napisałem na tym etapie, po prostu zrestartowałem urządzenie (power off - power on) i było OK.
    Próbowałem dekompilacji firmware, używając Ghidry, wybierając ARM Cortex, Little Indian, kod pod 0x0000. Musisz również załadować ten sam kod pod adresem 0x0800 0000, ponieważ jest to adres Flash, pod którym jest przechowywany, ale podczas uruchamiania, w zależności od ustawień, pod adresem 0x0000 będziesz miał albo tę główną pamięć Flash, systemową pamięć Flash (bootloader), albo pamięć RAM. Podczas normalnej pracy, pod adresem 0x0000 znajduje się główna pamięć Flash - oprogramowanie układowe, które pobieramy..
    Pełną kartę katalogową MCU PY32F002A można znaleźć tutaj: Link .
    Nie próbowałem zapisywać zrzuconego oprogramowania układowego, aby sprawdzić, czy jest w porządku, ale dlatego, że miał prawidłowy rozmiar, ponieważ znalazłem w nim również te same bajty HEX dla informacji o produkcie , a także dlatego, że Ghidra jest w stanie z niego korzystać (głównie w ręcznym procesie przechodzenia do niezdekompilowanych bajtów i naciskania F12 - dekompilacji jako ThubCode), domyślam się, że jest OK :) .

    Jestem tylko hobbystą jeśli chodzi o programowanie, nie znoszę Pythona, ale do szybkiego procesu skryptowania na Windowsie (zbyt leniwy by zasilać Raspberry Pi z Linuksem i zbyt potrzebujący szybszego procesu niż robienie testów z ESP32 - za dużo czasu zajmuje napisanie nowego kodu) był wystarczająco dobry. Ma w sobie trochę komentarzy, może być lepszy, ale do tego, co potrzebowałem zrobić, mogę powiedzieć, że jest wystarczająco dobry :D
    Skrypt używa rozmiaru bufora transferu (okna) 1024 bajtów, zamiast domyślnego: 256 bajtów (i być może jedynego działającego rozmiaru bufora dla MCU), tylko po to, aby mieć go w mniejszej liczbie linii, aby skopiować-wkleić je do edytora HEX (w systemie Windows preferuję HxD), dzięki czemu mogę ręcznie przebudować firmware MCU.
    tryser_...txt (9.15 kB)Musisz być zalogowany, aby pobrać ten załącznik.
    (jest wystarczająco mały, aby nie kłopotać się Pythonem, aby zapisać go do pliku, ale zamiast tego użyć opisanej metody)

    Teraz mam tylko nadzieję, że ktoś na Elektrodzie zdekompiluje firmware do czegoś, z czym możemy pracować, abyśmy mogli dodać potrzebne zmiany... lub (jeszcze lepiej?) użyć kodu, aby CBU lub ESP32 na przykład rozmawiało bezpośrednio z chipem pomiarowym - HT7017, ze sterownikiem wyświetlacza - TM1622, a także odczytywało 4 przyciski, sterowało podświetleniem i oczywiście stanem przekaźnika (typ zatrzaskowy).
    Tak, wiem, że to wykracza poza główny cel tego tematu, ale jeśli chodzi o tego rodzaju projekt, możemy podzielić temat.

    PS:
    Jakby ktoś potrzebował, to jest wyjście skryptu (wersja 1024bajty):
    tryser_py_...t_1024.txt (39.02 kB)Musisz być zalogowany, aby pobrać ten załącznik. .
  • #28 21614509
    DGAlexandru
    Poziom 8  
    Posty: 7
    Pomógł: 1
    Ocena: 1
    adolfotregosa napisał:
    Cześć,

    Dziękuję za ten projekt.
    Chciałbym zgłosić, że parsowanie wartości częstotliwości jest niekompletne, ponieważ brakuje części dziesiętnej.

    Info:TuyaMCU:Odebrane: 55 AA 03 07 00 08 6B 02 00 04 00 00 00 32 B4
    Info:TuyaMCU:P rocessIncoming[v=3]: cmd 7 (State) len 15
    Info:TuyaMCU:P arseState: id 107 type 2-val len 4
    Info:TuyaMCU:P arseState: int32 50

    O ile mogę powiedzieć:
    32 = 50
    B4 = 180
    W tym przypadku kropką dziesiętną jest "0" od 180, więc poprawną wartością powinno być 50.0Hz.

    Inny przykład:
    Info:TuyaMCU:Received: 55 AA 03 07 00 08 6B 02 00 04 00 00 00 31 B3
    Info:TuyaMCU:P rocessIncoming[v=3]: cmd 7 (State) len 15
    Info:TuyaMCU:P arseState: id 107 type 2-val len 4
    Info:TuyaMCU:P arseState: int32 49

    Tutaj:
    31 = 49
    B3 = 179 = 9
    Odpowiada to częstotliwości 49,9 Hz.

    Zatem pierwsza liczba w postaci dziesiętnej od prawej do lewej jest brakującą liczbą dziesiętną.

    Dziękuję za sprawdzenie tego!
    ....


    Cześć adolfotregosa,

    na pierwszy rzut oka zgodziłem się z Tobą, ale po bliższym przyjrzeniu się zobaczyłem, że zostałeś wprowadzony w błąd przez ostatni bajt, który jest bajtem sumy kontrolnej, a nie bajtem "danych".
    55AA 03 07 0008 6B02000400000032 B4 przekłada się na: Nagłówek, Wersja komunikacji, Komenda / Typ odpowiedzi, Liczba bajtów danych, DANE , Suma kontrolna .

    Zmiana dowolnego bajtu przed jedynką sumy kontrolnej spowoduje zmianę sumy kontrolnej :) .
    Suma kontrolna jest resztą z dzielenia sumy wszystkich bajtów (przed sumą kontrolną) i 0x100 (256).
    Więc w twoim przykładzie:
    55 AA 03 07 08 6B 02 04 32 = 1B4
    0x1B4 % 0x100 = 0xB4
    (% jest znakiem zwykle używanym w programowaniu = operator modulo; w matematyce jest zapisywany jako "mod")

    Podsłucham jeszcze trochę komunikację między CBU i MCU, aby zobaczyć, gdzie wysyłane są te liczby dziesiętne.

    Dodano po 2 [minutach]: .

    divadiow napisał:
    dzięki. ciekawe. Kopia zapasowa Lusant to wersja 2.1.6, która ma teraz profil Cloucutter. Twoja to 2.1.17, która jest znaną poprawioną wersją.

    Mam tę samą wersję FW. Porównałem pliki bin i różnica zaczyna się od 0x1CF000 - gdzie zaczyna się zaszyfrowany config.
    Jego config jest z Tuya, mój jest z SmartLife.

    Czy powinniśmy usunąć jego bin dump, ponieważ każdy z BK7231GUIFlashTool może odszyfrować jego zaszyfrowane dane? (na przykład widziałem jego SSID WiFi i hasło - nie tak ważne, jak sugeruje nazwa SSID: używał funkcji HotSpot z telefonu z Androidem, ale może są inne naprawdę wrażliwe dane).

    Dlaczego BK7231GUIFlashTool nie dekoduje identyfikatorów dpID z tej konfiguracji?
    Patrząc na zdekodowane pliki bin z folderu DebugAES zobaczyłem, że pojawiają się one w formacie JSON, ale zniekształconym - brakuje początku lub końca, ale ponieważ jest zapisany kilka razy, można go zrekonstruować.
    Jedyne co udało się "zdekodować" to: { "baud": "115200" }
  • Pomocny post
    #29 21617021
    DGAlexandru
    Poziom 8  
    Posty: 7
    Pomógł: 1
    Ocena: 1
    Cześć,

    po 2 dniach zabawy z KWS-302WF z OpenBekenem uruchomionym na CBU stworzyłem następujący plik autoexec.bat
    //Buttons
    
    // Relay On/Off dpID 0x10 = 16  - Channel 1
    linkTuyaMCUOutputToChannel 16 bool 1
    setChannelType 1 toggle
    setChannelLabel 1 " Relay On/Off"
    
    // Reset Energy Counter kW/h dpID 0x76 = 118
    linkTuyaMCUOutputToChannel 118 bool 2
    setChannelType 2 toggle
    setChannelLabel 2 "Reset Energy Counter"
    
    // Reset Total Time dpID 0x78 = 120
    linkTuyaMCUOutputToChannel 120 bool 3
    setChannelType 3 toggle
    setChannelLabel 3 "Reset Time Counter"
    
    // Measurements / Status
    
    // voltage dpID 0x65 = 101
    linkTuyaMCUOutputToChannel 101 val 4
    setChannelType 4 voltage_div10
    setChannelLabel 4 "0 ~ 40,000.0"
    
    // current dpID 0x66 = 102
    linkTuyaMCUOutputToChannel 102 val 5
    setChannelType 5 current_div1000
    setChannelLabel 5 "0 ~ 60.000"
    
    // Load Time dpID 0x68 = 104
    linkTuyaMCUOutputToChannel 104 val 6
    setChannelType 6 ReadOnly
    setChannelLabel 6 "6: Load Time (minutes; 0 ~ 10,000,000)"
    
    // Total Energy kWh dpID 0x69 = 105
    linkTuyaMCUOutputToChannel 105 val 7
    setChannelType 7 EnergyTotal_kWh_div1000
    setChannelLabel 7 "from last Energy Counter reset; 0 ~ 10,000.000"
    
    // Read dpID 0x67 = 103
    linkTuyaMCUOutputToChannel 103 val 8
    setChannelType 8 power_div10
    setChannelLabel 8 "0 ~ 120,000.0"
    
    // Power Factor dpID 0x6a = 106
    linkTuyaMCUOutputToChannel 106 val 9
    setChannelType 9 PowerFactor_div100
    setChannelLabel 9 "0 ~ 1.00"
    
    // Frequency dpID 0x6b = 107
    linkTuyaMCUOutputToChannel 107 val 10
    setChannelType 10 ReadOnly
    setChannelLabel 10 "10: Frequency Hz (1 ~ 60)"
    
    // External temperature dpID 0x6c = 108
    linkTuyaMCUOutputToChannel 108 val 11
    setChannelType 11 ReadOnly
    setChannelLabel 11 "11: External Temperature (-20 ~ 150 °C)"
    
    //Read dpID 0x7b = 123
    linkTuyaMCUOutputToChannel 123 val 12
    setChannelType 12 EnergyTotal_kWh_div1000
    setChannelLabel 12 "Total Energy Counter; 0 ~ 2,147,483.647"
    
    //LCD BackLight Status dpID 0x74 = 116
    linkTuyaMCUOutputToChannel 116 val 13
    setChannelType 13 ReadOnly
    setChannelLabel 13 "13: LCD BackLight Status (0 - unk, 1: Off or 2: On)"
    
    //Settings
    
    // Set UnderVoltage dpID 0x6d = 109
    linkTuyaMCUOutputToChannel 109 val 14
    setChannelType 14 TextField
    setChannelLabel 14 "14: Set UnderVoltage Threshold (85 ~ 220V)"
    
    //Set OverVoltage dpID 0x6e = 110
    linkTuyaMCUOutputToChannel 110 val 15
    setChannelType 15 TextField
    setChannelLabel 15 "15: Set OverVoltage Threshold (130 ~ 290V)"
    
    // Set OverCurrent dpID 0x6f = 111
    linkTuyaMCUOutputToChannel 111 val 16
    setChannelType 16 TextField
    setChannelLabel 16 "16: Set OverCurrent Threshold (0 ~ 100.000mA)"
    
    //Set OverConsumption dpID 0x71 = 113
    linkTuyaMCUOutputToChannel 113 val 17
    setChannelType 17 TextField
    setChannelLabel 17 "17: Set Electric Energy Overload (0 ~ 99,999.999W/h)"
    
    //Set OverPower dpID 0x72 = 114
    linkTuyaMCUOutputToChannel 114 val 18
    setChannelType 18 TextField
    setChannelLabel 18 "18: Set OverLoad Threshold (0 ~ 22.000W)"
    
    //Set OverTemperaure dpID 0x73 = 115
    linkTuyaMCUOutputToChannel 115 val 19
    setChannelType 19 TextField
    setChannelLabel 19 "19: Set OverTemp Threshold (-20 ~ 150°C)"
    
    //Set Screen Power Off Time dpID 0x77 = 119
    linkTuyaMCUOutputToChannel 119 val 20
    setChannelType 20 TextField
    setChannelLabel 20 "20: Set Screen Inactivity Power Off Time (0 ~ 59 minutes)"
    
    //Set CountDown Timer dpID 0x79 = 121
    linkTuyaMCUOutputToChannel 121 val 21
    setChannelType 21 TextField
    setChannelLabel 21 "21: Set CountDown Time (60 ~ 86400 seconds)"
    
    //UnKnown
    
    // Set dpID 0x70 = 112
    linkTuyaMCUOutputToChannel 112 val 22
    setChannelType 22 TextField
    setChannelLabel 22 "22: Set dpID 0x70 / 112 ?Poweroff Time? (0 ~ 60,000, step 30)"
    
    //Set dpID 0x75 = 117
    linkTuyaMCUOutputToChannel 117 val 23
    setChannelType 23 TextField
    setChannelLabel 23 "23: Set dpID 0x75 / 117 ?Power Down Memory? (0, 1 or 2)"
    
    //Relay Direct Trigger for schedule dpID 0x7a = 122
    linkTuyaMCUOutputToChannel 122 bool 24
    setChannelType 24 toggle
    setChannelLabel 24 "Relay trigg. dpID 0x7a / 112"

    (kod został zaktualizowany o nowe ustalenia - dpID 0x7b jest teraz "dekodowany")

    Obciążenie lodówki w spoczynku
    Panel sterowania KWS-302WF z przyciskami i danymi pomiarowymi urządzenia
    Lodówka włączona - wykonuje swoją pracę :)
    Interfejs OpenBeken KWS-302WF z danymi pomiarowymi i przyciskami sterującymi

    Przeniosłem do "short startup command" sterownik MCU i odpowiednie ustawienia init:
    startdriver tuyamcu
    tuyaMcu_setBaudRate 115200
    tuyaMcu_defWiFiState 4


    Użyłem JSON wyodrębnionego z oryginalnego firmware ( divadiow dodał go jako pierwszy do tego tematu), aby spróbować jak najlepiej opisać wartości.
    Wciąż jednak są 4 dpID, których nie mogłem rozgryźć, do czego służą / jak są używane:
    0x7b / 123 który może mieć wartość ReadOnly od 0 do 2 147 483.647 (= 0x7FFF FFFF) = "Dodaj elektryczność" według divadiow
    Na początku miał wartość 21, po podłączeniu dużego obciążenia (lodówka) zaczął rosnąć. Resetowanie wartości, odłączanie zasilania lub obciążenia nie spowodowało powrotu do tej niskiej wartości.
    Późniejsza edycja: ten dpID przechowuje licznik całkowitej energii zmierzonej przez urządzenie od momentu jego pierwszego użycia. Wartość można zresetować tylko przytrzymując przyciski + i - na urządzeniu przez 5 sekund. TO ZRESETUJE MCU do ustawień fabrycznych - będziesz miał domyślne wartości dla UnderVoltate, OverVoltage, OverTemperature i tak dalej.
    dpID 0x70 / 112 który może mieć wartość Write od 0 do 60,000, a zgodnie z JSON powinien być skonfigurowany z krokiem 30 = "Poweroff Time" według divadiow
    Próbowałem z wieloma wartościami, nie zauważyłem żadnej zmiany. Po ponownym uruchomieniu CBU wartość ta wraca do 0.
    dpID 0x75 / 117 "można" (zgodnie z JSON) ustawić (zapisać) tylko 3 wartości: 0, 1 lub 2 = "Power Down Memory" wg divadiow
    Przetestowałem wszystkie. Nic nie znaleziono. Po ponownym uruchomieniu CBU wartość ta wraca do 0.
    dpID 0x7a / 112 jest opisany jako "boolean" w JSON i ma również "trigger": "direct" tag , który jest unikalny - jest skonfigurowany tylko dla tego dpID w JSON.
    = "Przełącznik" według divadiow
    Używając go jako przycisku włączania / wyłączania, widzę, że steruje przekaźnikiem, który jest również kontrolowany przez dpID 0x10 / 16. MCU odpowiada zaktualizowanym statusem dla dpID 0x10.
    Późniejsza edycja: Jest to używane przez oryginalną aplikację - w Smart Life można utworzyć harmonogram kontrolujący stan przekaźnika. Prawdopodobnie chcieli użyć innego dpID dla tego polecenia, aby wiedzieć, który proces zmienił status przekaźnika (ostatni).

    Naprawdę brakuje nam nowego typu przycisku - takiego, który nie zmienia swojego stanu (z wyłączonego na włączony / z czerwonego na zielony) dla poleceń, które są potrzebne tylko z wartością 1, aby coś wyzwolić, gdy MCU nie zaktualizuje stanu tych dpID, w przypadku, w którym przycisk przełączania nie jest dobry, ponieważ modyfikuje wartość, która zostanie wysłana przy następnym naciśnięciu, z 1 na 0, ponieważ teraz myśli, że jest włączony i chce go wyłączyć przy następnym naciśnięciu. Ten przycisk może zmienić swój kolor w momencie naciśnięcia, ale gdy tylko nie zostanie już naciśnięty, powinien powrócić do koloru "Off".
    2 polecenia, które wymagają tego rodzaju przycisku to:
    dpID 0x76 / 118 "Resetuj licznik energii"
    dpID 0x78 / 120 "Resetuj licznik czasu"

    Życzę udanego modowania :) .
  • #30 21617063
    Lusant
    Poziom 5  
    Posty: 8
    Pomógł: 1
    Ocena: 3
    DGAlexandru napisał:

    0x7b / 123 który może mieć wartość ReadOnly pomiędzy 0 a 2 147 483.647 (= 0x7FFF FFFF) = "Dodaj elektryczność" według divadiow
    Na początku miał wartość 21, po podłączeniu dużego obciążenia (lodówka) zaczął rosnąć. Resetowanie wartości, odłączanie zasilania lub obciążenia, nie powodowało powrotu do tej niskiej wartości.


    Z tego co pamiętam to jest licznik Running Time. To jest błędne .

    Znalazłem też załączony plik tekstowy (nie wiem gdzie). Za pomocą smartfona i Tłumacza Google ze Zdjęć można dowiedzieć się, jaki jest tekst w języku mandaryńskim.

    Pozdrawiam.

    EDIT: Opps ... to Energy Totalizer ... Myślę, że istnieje drugi Totalizer, który można zresetować tylko za pomocą przycisków w urządzeniu (przytrzymaj przyciski + i - przez 5 sekund).
    Załączniki:
    • dpids bom.txt (11.27 KB) Musisz być zalogowany, aby pobrać ten załącznik.

Podsumowanie tematu

✨ Dyskusja dotyczy modyfikacji miernika mocy KWS-302WF, w szczególności zamiany pomiaru prądu z bocznika na transformator z układem HT7017 firmy HitrendTech. Urządzenie wykorzystuje mikrokontroler PY32F002A, który komunikuje się z modułem WiFi CBU (prawdopodobnie BK7231N) oraz układem HT7017. Użytkownik przechwycił komunikację szeregową między tymi elementami, analizując protokoły i prędkości transmisji (4800 bps między HT7017 a PY32F, 115200 bps między CBU a PY32F). W dyskusji poruszono kwestie modyfikacji firmware, w tym użycie open source OpenBeken i konfiguracji pliku autoexec.bat do obsługi protokołu TuyaMCU. Omówiono także ograniczenia związane z zabezpieczeniami MCU PY32F002A oraz brak dokumentacji HT7017. Użytkownicy wymienili się kopiami zapasowymi firmware, listami dpID oraz przykładami konfiguracji autoexec.bat, umożliwiającymi sterowanie przekaźnikiem, odczyt napięcia, prądu, mocy i innych parametrów. Zgłoszono też potrzebę poprawy obsługi częstotliwości (dodanie części dziesiętnej) oraz brak funkcji przycisku w OpenBK. Wątek porusza również awarię elementu zasilacza (chip U3211) i sposoby jego wymiany. Podsumowując, dyskusja skupia się na inżynierii odwrotnej, modyfikacji sprzętowej i programowej miernika KWS-302WF w celu poprawy pomiarów i funkcjonalności, z wykorzystaniem narzędzi open source i analizy komunikacji szeregowej.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA