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

[CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna

p.kaczmarek2 03 Maj 2023 08:43 24969 63
REKLAMA
  • [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna
    Przedstawię tu dogłębną analizę oraz inżynierię wsteczną bateryjnego czujnika temperatury/wilgotności Tuya zrealizowanego w oparciu o protokół TuyaMCU, czyli mającego na pokładzie osobno mikrokontroler (zawsze włączony, ale korzystający z trybu snu) oraz moduł WiFi (jego zasilanie uruchamia MCU gdy trzeba zaraportować stan). Pokażę tutaj protokół tego produktu, wraz z uwzględnieniem ról zmiennych (dpID TuyaMCU), jego schemat, oraz na koniec zmienię mu firmware w celu uwolnienia go od chmury i sparowania z Home Assistant.

    Temat powstał we współpracy z @DeDaMrAz. Nad czujnikiem pracowaliśmy zdalnie, ja kierowałem działaniami, a kolega wykonał przechwytywanie pakietów, analizę PCB oraz rysowanie jej schematu, jak również końcowe testy z Home Assistant.

    Zakup czujnika
    Jest to jeden z najpopularniejszych tego typu czujników w sieci. Dostępny jest w wersji na Zigbee i na WiFi, tutaj omawiamy wersję na WiFi. Można go kupić za kilkadziesiąt złotych. Poniżej zrzut ekranu z przykładowej aukcji:
    [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna
    [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna
    [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna
    [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna
    [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna
    Aplikacji Tuya i parowania już nawet nie omawiam, było to opisywane wielokrotnie. Tu skupimy się na szczegółach technicznych i zmianie firmware.
    Instrukcja parowania z aplikacją SmartLife (jeśli chcemy użyć czujnika z otwartym oprogramowaniem to jest dla nas zbędna):
    [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna

    Wnętrze czujnika
    Zaglądamy do środka. Co widzimy jako pierwsze?
    [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna
    To jest urządzenie oparte o TuyaMCU. Mamy tu osobno moduł WiFi (CB3S ,czyli BK7231N) i mikrokontroler.
    TuyaMCU to jest protokół oparty na UART, poprzez który ten MCU komunikuje się z modułem WiFi.
    Wyprowadzenia CB3S są znane:
    [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna
    Pin numberSymbolI/O typeFunction
    1RSTILow-level reset, high level active (the pin has been pulled high internally), correspond to CEN of the IC
    2ADC3AIADC pin, which corresponds to P23 of the IC
    3CENIEnabling pin, which is pulled high internally to be compatible with other modules
    4P14I/OA common GPIO interface, which corresponds to P14 of the IC
    5P26I/OGPIOP_26, which corresponds to P26 of the IC, PWM 5
    6P24I/OGPIOP_24, which corresponds to P24 of the IC, PWM 4
    7P6I/OGPIOP_6, which corresponds to P6 of the IC, PWM 0
    8VCCPPower supply pin (3.3V)
    9GNDPPower supply reference ground
    10P9I/OGPIOP_9, which corresponds to P9 of the IC, PWM 3
    11TXD2I/OUART2_TXD (used to display the module internal information), which corresponds to P0 of the IC
    12CSNI/OProduction test control pin. If it is used as a common I/O pin, it must be connected to the VCC externally. Do not connect it to the ground before the module is powered on.
    13P8I/OGPIOP_8, which corresponds to P8 of the IC, PWM 2
    14P7I/OGPIOP_7, which corresponds to P7 of the IC, PWM 1
    15RXD1I/OUART1_RXD (user serial interface), which corresponds to P10 of the IC. Do not connect it to the VCC. By default, the MCU serial port should be in low-level or high-impedance state.
    16TXD1I/OUART1_TXD (user serial interface), which corresponds to P11 of the IC. Do not connect it to the VCC. By default, the MCU serial port should be in low-level or high-impedance state.
    17ADC3AI(Not recommended. If needed, please use Pin 2) ADC port, which corresponds to P23 of the IC. Programmed SPI
    18P22I/O(Not recommended ) GPIOP_22, which corresponds to P22 of the IC. Programmed SPI
    19CSNI/OThe pull-up resistor is needed during usage of customers. Do not connect it to the ground before the module is powered on. Correspond to P21 of the IC.
    20P20I/O(Not recommended. ) GPIOP_20, which corresponds to P20 of the IC. Programmed SPI
    21NC--
    22NC--

    MCU nie został zidentyfikowany, ale tak wygląda ogólnie ich podłączenie:
    Schemat blokowy współdziałania MCU i modułu Wi-Fi.
    Tyle, że w przypadku TuyaMCU w urządzeniach bateryjnych, dodatkowo MCU kontroluje zasilanie modułu WiFi.
    Oto schemat (narysowany przez kolegę):
    [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna
    ESP12 na schemacie jest poglądowo, w rzeczywistości jest to CB3S. Zasilanie CB3S kontroluje MCU poprzez tranzystor MOSFET. Moduł WiFi komunikuje się z MCU poprzez UART, poprzez protokół TuyaMCU. Sam MCU odczytuje pomiary z SHT30 poprzez I2C (widać nawet rezystory pull up).

    Co zatem będzie trzeba było zrobić by zmienić firmware modułu WiFi, tj. uwolnić urządzenie od chmury producenta?
    - trzeba odpowiednio obsłużyć komunikację z MCU (protokół TuyaMCU)
    - trzeba dać sobie radę z tym, że MCU będzie nam wyłączać moduł WiFi w trakcie pracy...

    Pobór prądu w trybie snu
    Jeszcze przy okazji można zrobić mały pomiar - ile pobiera samo MCU przy wyłączonym module WiFi?
    [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna
    5µA . Polecam skontrastować ten wynik z moim pomiarem snu samego modułu WiFI z BK7231 (w trybie głębokiego snu) z tego tematu:
    https://www.elektroda.pl/rtvforum/topic3960149.html
    Mi wyszło tam 6µA. Czyli 1µA różnicy, zakładając, że pomiary są na tyle dokładne by to oceniać. Tylko trzeba pamiętać, tu śpi MCU a moduł WiFi ma odłączone VDD całkiem, a w zalinkowanym temacie jest mowa o śnie samego modułu WiFi (którego może wybudzić GPIO).

    Protokół TuyaMCU
    To urządzenie korzysta z protokołu TuyaMCU przeznaczonego dla urządzeń zasilanych bateryjnie. Dokumentacja znajduje się tutaj:
    https://developer.tuya.com/en/docs/iot/tuyacl...niversalserialaccessprotocol?id=K95afs9h4tjjh
    Podstawę TuyaMCU też omawiałem w tym temacie:
    https://www.elektroda.pl/rtvforum/topic3880546.html
    Pokrewny zasilany bateryjnie czujnik otwarcia drzwi na TuyaMCU omawiałem tutaj (tyle, że jego protokół był nieco prostszy, nie było dpCache):
    https://www.elektroda.pl/rtvforum/topic3914412.html
    Do analizy TuyaMCU można wykorzystać mój analizer:
    https://www.elektroda.com/rtvforum/topic3970199.html#20528459
    Oto wstępnie przetworzony zrzut UART z mojego programu:
    
    //S 4/30/2023 8:49:32 PM WiFi send:
    55AA0001000000
    //R 4/30/2023 8:49:32 PM WiFi received:
    55AA000100247B2270223A226279757376756D656D65356969636164222C2276223A22312E302E30227D20
    //S 4/30/2023 8:49:33 PM WiFi send:
    55AA000200010305
    //R 4/30/2023 8:49:33 PM WiFi received:
    55AA0002000001
    //S 4/30/2023 8:51:50 PM WiFi send:
    55AA000200010406
    //R 4/30/2023 8:51:56 PM WiFi received:
    55AA0002000001
    //R 4/30/2023 8:51:56 PM WiFi received:
    55AA001000010010
    //S 4/30/2023 6:18:06 PM WiFi sent:
    55AA00100002010012
    //R 4/30/2023 8:51:58 PM WiFi received:
    55AA0005000801020004000000FC0F
    //R 4/30/2023 8:51:58 PM WiFi received:
    55AA0005000802020004000000273B
    //R 4/30/2023 8:51:58 PM WiFi received:
    55AA00050005030400010112
    //R 4/30/2023 8:51:58 PM WiFi received:
    55AA00050005090400010017
    //R 4/30/2023 8:51:58 PM WiFi received:
    55AA000500080A0200040000021C3A
    //R 4/30/2023 8:51:58 PM WiFi received:
    55AA000500080B020004FFFFFF88A2
    //R 4/30/2023 8:51:58 PM WiFi received:
    55AA000500080C0200040000005A78
    //R 4/30/2023 8:51:58 PM WiFi received:
    55AA000500080D0200040000000A29
    //R 4/30/2023 8:51:58 PM WiFi received:
    55AA000500050E040001021E
    //R 4/30/2023 8:51:59 PM WiFi received:
    55AA000500050F040001021F
    //R 4/30/2023 8:51:59 PM WiFi received:
    55AA00050008110200040000000124
    //R 4/30/2023 8:51:59 PM WiFi received:
    55AA00050008120200040000000125
    //R 4/30/2023 8:51:59 PM WiFi received:
    55AA0005000813020004000000052A
    //R 4/30/2023 8:51:59 PM WiFi received:
    55AA0005000814020004000000082E
    //R 4/30/2023 8:51:59 PM WiFi received:
    55AA00050005150100010020
    //R 4/30/2023 8:51:59 PM WiFi received:
    55AA0005000801020004000000FD10
    //R 4/30/2023 8:51:59 PM WiFi received:
    55AA0005000802020004000000273B
    //S 4/30/2023 8:52:13 PM WiFi send:
    55AA000500010005
    //S 4/30/2023 8:52:15 PM WiFi send:
    55AA000500010005
    //S 4/30/2023 8:52:17 PM WiFi send:
    55AA000500010005
    //S 4/30/2023 8:52:19 PM WiFi send:
    55AA000500010005
    //S 4/30/2023 8:52:21 PM WiFi send:
    55AA000500010005
    //S 4/30/2023 8:52:23 PM WiFi send:
    55AA000500010005
    //S 4/30/2023 8:52:25 PM WiFi send:
    55AA000500010005
    //S 4/30/2023 8:52:27 PM WiFi send:
    55AA000500010005
    //S 4/30/2023 8:52:29 PM WiFi send:
    55AA000500010005
    

    Poniżej to samo, ale z komentarzami z mojego analizatora:
    
    Sent by WiFi module:
    55 AA	00	01		00 00		00	
    HEADER	VER=00	Product		LEN		CHK	
    
    Received by WiFi module:
    55 AA	00	01		00 24	7B2270223A226279757376756D656D65356969636164222C2276223A22312E302E30227D	20	
    HEADER	VER=00	Product		LEN	{"p":"byusvumeme5iicad","v":"1.0.0"}	CHK	
    
    Sent by WiFi module:
    55 AA	00	02		00 01	03	05	
    HEADER	VER=00	McuConf		LEN	03	CHK	
    
    Received by WiFi module:
    55 AA	00	02		00 00		01	
    HEADER	VER=00	McuConf		LEN		CHK	
    
    Sent by WiFi module:
    55 AA	00	02		00 01	04	06	
    HEADER	VER=00	McuConf		LEN	04	CHK	
    
    Received by WiFi module:
    55 AA	00	02		00 00		01	
    HEADER	VER=00	McuConf		LEN		CHK	
    
    Received by WiFi module:
    55 AA	00	10		00 01	00	10	
    HEADER	VER=00	ObtainDPcache		LEN		CHK	
    
    Sent by WiFi module:
    55 AA	00	10		00 02	0100	12	
    HEADER	VER=00	ObtainDPcache		LEN		CHK	
    
    Received by WiFi module:
    55 AA	00	05		00 08	01020004000000FC	0F	
    HEADER	VER=00	Unk		LEN	fnId=1 Val V=252	CHK	
    
    Received by WiFi module:
    55 AA	00	05		00 08	0202000400000027	3B	
    HEADER	VER=00	Unk		LEN	fnId=2 Val V=39	CHK	
    
    Received by WiFi module:
    55 AA	00	05		00 05	0304000101	12	
    HEADER	VER=00	Unk		LEN	fnId=3 Enum V=1	CHK	
    
    Received by WiFi module:
    55 AA	00	05		00 05	0904000100	17	
    HEADER	VER=00	Unk		LEN	fnId=9 Enum V=0	CHK	
    
    Received by WiFi module:
    55 AA	00	05		00 08	0A0200040000021C	3A	
    HEADER	VER=00	Unk		LEN	fnId=10 Val V=540	CHK	
    
    Received by WiFi module:
    55 AA	00	05		00 08	0B020004FFFFFF88	A2	
    HEADER	VER=00	Unk		LEN	fnId=11 Val V=-120	CHK	
    
    Received by WiFi module:
    55 AA	00	05		00 08	0C0200040000005A	78	
    HEADER	VER=00	Unk		LEN	fnId=12 Val V=90	CHK	
    
    Received by WiFi module:
    55 AA	00	05		00 08	0D0200040000000A	29	
    HEADER	VER=00	Unk		LEN	fnId=13 Val V=10	CHK	
    
    Received by WiFi module:
    55 AA	00	05		00 05	0E04000102	1E	
    HEADER	VER=00	Unk		LEN	fnId=14 Enum V=2	CHK	
    
    Received by WiFi module:
    55 AA	00	05		00 05	0F04000102	1F	
    HEADER	VER=00	Unk		LEN	fnId=15 Enum V=2	CHK	
    
    Received by WiFi module:
    55 AA	00	05		00 08	1102000400000001	24	
    HEADER	VER=00	Unk		LEN	fnId=17 Val V=1	CHK	
    
    Received by WiFi module:
    55 AA	00	05		00 08	1202000400000001	25	
    HEADER	VER=00	Unk		LEN	fnId=18 Val V=1	CHK	
    
    Received by WiFi module:
    55 AA	00	05		00 08	1302000400000005	2A	
    HEADER	VER=00	Unk		LEN	fnId=19 Val V=5	CHK	
    
    Received by WiFi module:
    55 AA	00	05		00 08	1402000400000008	2E	
    HEADER	VER=00	Unk		LEN	fnId=20 Val V=8	CHK	
    
    Received by WiFi module:
    55 AA	00	05		00 05	1501000100	20	
    HEADER	VER=00	Unk		LEN	fnId=21 Bool V=0	CHK	
    
    Received by WiFi module:
    55 AA	00	05		00 08	01020004000000FD	10	
    HEADER	VER=00	Unk		LEN	fnId=1 Val V=253	CHK	
    
    Received by WiFi module:
    55 AA	00	05		00 08	0202000400000027	3B	
    HEADER	VER=00	Unk		LEN	fnId=2 Val V=39	CHK	
    
    Sent by WiFi module:
    55 AA	00	05		00 01	00	05	
    HEADER	VER=00	Unk		LEN		CHK	
    
    Sent by WiFi module:
    55 AA	00	05		00 01	00	05	
    HEADER	VER=00	Unk		LEN		CHK	
    
    Sent by WiFi module:
    55 AA	00	05		00 01	00	05	
    HEADER	VER=00	Unk		LEN		CHK	
    
    Sent by WiFi module:
    55 AA	00	05		00 01	00	05	
    HEADER	VER=00	Unk		LEN		CHK	
    
    Sent by WiFi module:
    55 AA	00	05		00 01	00	05	
    HEADER	VER=00	Unk		LEN		CHK	
    
    Sent by WiFi module:
    55 AA	00	05		00 01	00	05	
    HEADER	VER=00	Unk		LEN		CHK	
    
    Sent by WiFi module:
    55 AA	00	05		00 01	00	05	
    HEADER	VER=00	Unk		LEN		CHK	
    
    Sent by WiFi module:
    55 AA	00	05		00 01	00	05	
    HEADER	VER=00	Unk		LEN		CHK	
    
    Sent by WiFi module:
    55 AA	00	05		00 01	00	05	
    HEADER	VER=00	Unk		LEN		CHK	
    
    


    A teraz analiza krok po kroku.
    1. MCU załącza zasilanie modułu WiFi. Moduł WiFi wysyła do do MCU prośbę o identyfikacje (pakiet 0x01 - Query product information), a ono odpowiada i podaje {"p":"byusvumeme5iicad","v":"1.0.0"}:
    [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna
    2. Teraz WiFi kolejno raportuje stan połączenia (typ 0x02 - Report the network status of the device), najpierw stan 0x03 (WiFi connected), MCU potwierdza odbiór, a potem stan 0x04 (cloud connected - u nas w OBK jako MQTT):
    [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna
    Tylko te stany WiFi 0x03 i 0x04 się przy normalnej pracy pojawiają. Poniżej umieszczam wszystkie możliwe stany:
    StatusOpisStatus value
    Status 1smartconfig tryb konfiguracji0x00
    Status 2AP configuration status0x01
    Status 3Wi-Fi zostało skonfigurowane, ale nie jest podłączone do routera0x02
    Status 4Wi-Fi jest skonfigurowane i podłączone do routera0x03
    Status 5Wi-Fi jest skonfigurowane, podłączone do routera i do chmury0x04

    3. Następnie występuje wymiana danych ObtainDPCache która istnieje tylko w urządzeniach z konfiguracją pamiętaną na MCU, nie posiada tego np. sensor otwarcia/zamknięcia drzwi:
    [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna
    Na powyższym zrzucie ekranu nic nie zostało przesłane, ale jeśli byśmy w ustawieniach zmienili np. częstotliwość raportowania, to ten pakiet by zawierał właśnie o tym informacje.

    ObtainDPCache działa w ten sposób, że gdy chcemy np. ustawić czas pomiędzy pomiarami, to moduł WiFi pobiera go z chmury gdy go MCU załączy a potem czeka aż MCU odpyta go właśnie o te ObtainDPCache. MCU pierwsze pyta o ObtainDPCache a moduł WiFi odpowiada listą zmiennych dpID/typ/wartość. MCU to odbiera i zapisuje. Stąd MCU wie, jak często się wybudzać i podawać dalej pomiar.

    4. Następnie TuyaMCU raportuje osobno wartości zmiennych (pakiet typ 0x05 - Report the real-time status):
    [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna
    5. Potem, po wysłaniu tych zmiennych do chmury, moduł wysyła potwierdzenia tyle razy, ile otrzymał zmiennych:
    [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna

    Metodą zgadywania i testów z aplikacja Tuya można wyróżnić następujące zmienne (dpID):
    fnID1temperatura jako liczba całkowita przemnożona przez 10 - czyli 23.1 jako 231
    fnID2% wilgotność
    fnID3poziom baterii ( 0=Low, 1=Medium, 2=High)
    fnID9wybór jednostki, C lub F ( 0 = C i 1 = F)
    fnID10ustawienie minimalnej temperatury
    fnID11ustawienie maksymalnej temperatury
    fnID12ustawienie maksymalnej wilgotności
    fnID13ustawienie minimalnej wilgotności
    fnID17częstotliwość pomiaru temperatury
    fnID18częstotliwość pomiaru wilgotności
    fnID19dokładność temperatury (czułość) razy 10, 5 oznacza 0.5C
    fnID20dokładność wilgotności w %
    fnID21stan przełącznika (1 lub 0, rola nieznana)


    Podsumujmy zatem, co się dzieje w tej komunikacji, w skrócie:
    - MCU włącza moduł WiFI poprzez załączenie jego tranzystora MOSFET na zasilaniu
    - moduł WiFi zagaduje do MCU, MCU się identyfikuje
    - moduł WiFi informuje o stanie podłączenia, MCU potwierdza
    - MCU pyta o ewentualne ustawienia typu czas raportowania, moduł WiFi je wysyła jeśli są
    - MCU wysyła nowe pomiary itp, moduł WiFi potwierdza
    - MCU zasypia po ostatnim potwierdzeniu i odłącza zasilanie modułu WiFi

    Jedyną nowością tutaj względem mojego tematu o sensorze stanu drzwi jest pakiet 0x10, tzw. Obtain DP cache command, czyli pobranie ustawień z modułu WiFi. Oto dwa przykłady jego użycia. Tak wygląda transakcja, gdy moduł WiFi nic nie ustawia:
    [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna
    Tak wygląda ta sama transakcja, gdy w apce zmienimy częstość raportowania na 1 minutę (dla temperatury i wilgotności):
    [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna

    Finalna konfiguracja OpenBeken
    OpenBeken można wgrać na ten czujnik bardzo prosto. Należy wykonać kroki:
    1. tymczasowo rozłączamy UART między MCU a modułem WiFi, np. odlutowując te rezystory ze schematu (bądź przecinając ścieżki), gdyż ten sam port UART służy do wgrania softu. Sztucznie zasilamy moduł WiFi z naszego 3.3V.
    2. wgrywamy OBK wg:
    https://github.com/openshwprojects/BK7231GUIFlashTool
    3. Konfigurujemy OpenBeken. Konfigurujemy nasze WiFi, nazwy urządzenia, MQTT, oraz również umieszczamy skrypt autoexec.bat w Web App -> LittleFS OBK:
    
    startDriver TuyaMCU
    startDriver tmSensor
    
    // may be needed, depends on device, some also use 9600
    tuyaMCU_setBaudRate 115200
    
    // dpID 1 is tempererature div 10
    setChannelType 1 temperature_div10
    linkTuyaMCUOutputToChannel 1 val 1
    // dpID 2 is % humidity
    setChannelType 2 Humidity
    linkTuyaMCUOutputToChannel 2 val 2
    // dpID 3 is battery state - low(0), mid(1) and high(2)
    linkTuyaMCUOutputToChannel 3 enum 3
    setChannelType 3 ReadOnlyLowMidHigh
    setChannelLabel 3 Battery
    //
    // setup dpCache - temperature interval
    //
    // Show textfield for that
    setChannelType 5 TextField
    // setup display name
    setChannelLabel 5 Temperature Interval
    // Make value persistant (stored between reboots), 
    // start value -1 means "remember last"
    SetStartValue 5 -1
    // set default value if not set
    if $CH5==0 then setChannel 5 1
    // link dpID 17 to channel 5, the type is val, extra '1' means that its dpCache variable
    linkTuyaMCUOutputToChannel 17 val 5 1
    
    setChannelType 6 TextField
    setChannelLabel 6 Humidity Interval
    SetStartValue 6 -1
    if $CH6==0 then setChannel 6 1
    linkTuyaMCUOutputToChannel 18 val 6 1
    

    Powyższy autoexec.bat oskryptowuje obsługę dpID z TuyaMCU. Mapuje dpID na kanały OBK. Ustawia typy tych kanałów, dzięki temu Hass Discovery wie co ten czujnik oferuje. Dodatkowo wyświetla pola oraz wartości dla odpowiednich kanałów.
    Dokumentacja OBK:
    https://github.com/openshwprojects/OpenBK7231T_App/blob/main/docs/README.md
    Tak wygląda wtedy panel OBK:
    [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna
    4. Wykonujemy również wtedy parowanie z HA.
    W ostatniej wersji OBK wspiera Home Assistant Discovery nawet dla oskryptowanych urządzeń. Wystarczy z Opcji wybrać Discovery i HA sam zobaczy urządzenie:
    [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna
    5. Ostatecznie, gdy wszystko jest gotowe, odłączamy programator, odłączamy sztucznie podpięte 3.3V, rekonstruujemy ścieżki UART i czujnik powinien ruszyć i zacząć raportować dane do HA.


    Uwaga: OBK wspiera ustawianie czasu raportowania poprzez widoczne pola na panelu. W tym przypadku dpID okresu raportowania (17 i 18) zostały zmapowane na kanały 5 i 6. Wystarczy te kanały ustawić np. na 60, a moduł będzie się budzić i raportować co 60 minut. Można ustawić je na 1 - będzie raport co minutę. Itd.

    Tak wygląda przykładowy końcowy efekt w HA:
    [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna


    Krótki test budzenia się i raportowania
    Jeszcze warto sprawdzić ile trwa cały cykl raportu. Na ten moment wychodzi 11 sekund, chociaż statyczne IP pewnie może to usprawnić, jak również implementacja systemu będzie ulepszana.
    
    mqtt_pass hass_pass_secret
    mqtt_clientID temp_test
    mqtt_host 192.168.0.124:1883
    Info:MAIN:Time 6, idle 114159/s, free 71192, MQTT 0(1), bWifi 1, secondsWithNoPing -1, socks 2/38 
    Info:MAIN:Boot complete time reached (5 seconds)
    Info:CFG:####### Set Boot Complete #######
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 02 00 00 01 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 2 (MCUconf) with 7 bytes
    Info:TuyaMCU:TuyaMCU_ProcessIncoming: TUYA_CMD_MCU_CONF, TODO!
    Info:MAIN:Time 7, idle 181106/s, free 71232, MQTT 0(1), bWifi 1, secondsWithNoPing -1, socks 2/38 
    Info:MQTT:mqtt_connection_cb: Successfully connected
    Info:MQTT:mqtt_subscribed to temp_test/+/set
    Info:MQTT:mqtt_subscribed to temp_test/+/set
    Info:MQTT:mqtt_subscribed to cmnd/temp_test/+
    Info:MQTT:mqtt_subscribed to cmnd/temp_test/+
    Info:MQTT:mqtt_subscribed to temp_test/+/get
    Info:MQTT:Publishing val temp_test to temp_test/host retain=0
    Info:MAIN:Time 8, idle 183495/s, free 71232, MQTT 1(1), bWifi 1, secondsWithNoPing -1, socks 2/38 
    Info:MQTT:Publishing val Build on May  1 2023 21:06:42 version 1.17.88 to temp_test/build retain=0
    Info:MAIN:Time 9, idle 190408/s, free 71232, MQTT 1(1), bWifi 1, secondsWithNoPing -1, socks 2/38 
    Info:MQTT:Publishing val 1c:90:ff:2f:c0:f8  to temp_test/mac retain=0
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 02 00 00 01 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 2 (MCUconf) with 7 bytes
    Info:TuyaMCU:TuyaMCU_ProcessIncoming: TUYA_CMD_MCU_CONF, TODO!
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 10 00 01 00 10 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 16 (Unknown) with 8 bytes
    Info:TuyaMCU:TuyaMCU_ProcessIncoming: unhandled type 16
    Info:MAIN:Time 10, idle 192374/s, free 71232, MQTT 1(1), bWifi 1, secondsWithNoPing -1, socks 2/38 
    Info:GEN:dhcp=0 ip=192.168.0.100 gate=192.168.0.1 mask=255.255.255.0 mac=1c:90:ff:2f:c0:f8 
    Info:GEN:sta: 1, softap: 0, b/g/n
    Info:GEN:sta:rssi=-46,ssid=5G_FULL_POWER,bssid=ac:d5:64:2f:7f:f5 ,channel=6,cipher_type:CCMP
    Info:MQTT:Publishing val 2 to temp_test/sockets retain=0
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 05 00 08 01 02 00 04 00 00 00 E3 F6 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 5 (WiFiSelect) with 15 bytes
    Info:TuyaMCU:TuyaMCU_V0_ParseRealTimeWithRecordStorage: processing dpId 1, dataType 2-DP_TYPE_VALUE and 4 data bytes
    Info:TuyaMCU:TuyaMCU_V0_ParseRealTimeWithRecordStorage: raw data 4 int: 227
    Info:GEN:CHANNEL_Set channel 1 has changed to 227 (flags 0)
    
    Info:MQTT:Channel has changed! Publishing 227 to channel 1 
    Info:MQTT:Publishing val 227 to temp_test/1/get retain=0
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 05 00 08 02 02 00 04 00 00 00 29 3D 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 5 (WiFiSelect) with 15 bytes
    Info:TuyaMCU:TuyaMCU_V0_ParseRealTimeWithRecordStorage: processing dpId 2, dataType 2-DP_TYPE_VALUE and 4 data bytes
    Info:TuyaMCU:TuyaMCU_V0_ParseRealTimeWithRecordStorage: raw data 4 int: 41
    Info:GEN:CHANNEL_Set channel 2 has changed to 41 (flags 0)
    
    Info:MQTT:Channel has changed! Publishing 41 to channel 2 
    Info:MQTT:MQTT client in mqtt_incoming_publish_cb topic temp_test/1/get
    Info:MQTT:Publishing val 41 to temp_test/2/get retain=0
    Info:MAIN:Time 11, idle 205603/s, free 71232, MQTT 1(1), bWifi 1, secondsWithNoPing -1, socks 2/38 
    Info:MQTT:MQTT client in mqtt_incoming_publish_cb topic temp_test/2/get
    Info:MAIN:Main_Init_Before_Delay
    Info:CFG:####### Boot Count 767 #######
    Warn:CFG:CFG_InitAndLoad: Correct config has been loaded with 22 changes count.
    Error:CMD:no file early.bat err -2
    Info:GEN:PIN_SetupPins pins have been set up.
    Info:MAIN:Main_Init_Before_Delay done
    Info:MAIN:Main_Init_Delay
    Info:MAIN:Main_Init_Delay done
    Info:MAIN:Main_Init_After_Delay
    Info:MAIN:ssid:5G_FULL_POWER key:MyP@ssw0rd
    Info:MAIN:Using SSID [5G_FULL_POWER]
    Info:MAIN:Using Pass [MyP@ssw0rd]
    Info:MQTT:MQTT_RegisterCallback called for bT temp_test/ subT temp_test/+/set
    Info:MQTT:MQTT_RegisterCallback called for bT temp_test/ subT temp_test/+/set
    Info:MQTT:MQTT_RegisterCallback called for bT cmnd/temp_test/ subT cmnd/temp_test/+
    Info:MQTT:MQTT_RegisterCallback called for bT cmnd/temp_test/ subT cmnd/temp_test/+
    Info:MQTT:MQTT_RegisterCallback called for bT temp_test/ subT temp_test/+/get
    Info:CMD:CMD_StartScript: started autoexec.bat at the beginning
    Info:MAIN:Main_Init_After_Delay done
    Info:MAIN:Started TuyaMCU.
    Info:MAIN:Started tmSensor.
    Info:GEN:Channel 1 type changed to temperature_div10
    Info:GEN:Channel 2 type changed to Humidity
    Info:GEN:Channel 3 type changed to ReadOnly
    Info:MAIN:Time 1, idle 283411/s, free 70904, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/38 
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 01 00 24 7B 22 70 22 3A 22 62 79 75 73 76 75 6D 65 6D 65 35 69 69 63 61 64 22 2C 22 76 22 3A 22 31 2E 30 2E 30 22 7D 20 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 1 (QueryProductInformation) with 43 bytes
    Info:TuyaMCU:TuyaMCU_ParseQueryProductInformation: received {"p":"byusvumeme5iicad","v":"1.0.0"}
    Info:MAIN:Time 2, idle 186205/s, free 70840, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/38 
    Info:MAIN:Time 3, idle 67724/s, free 71024, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/38 
    Info:MAIN:Time 4, idle 0/s, free 71024, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/38 
    Info:MAIN:Time 5, idle 0/s, free 71024, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/38 
    Info:MAIN:Main_OnWiFiStatusChange - WIFI_STA_CONNECTING - 1
    Info:MAIN:Main_OnWiFiStatusChange - WIFI_STA_CONNECTED - 4
    Info:MQTT:mqtt_userName homeassistant
    mqtt_pass hass_pass_secret
    mqtt_clientID temp_test
    mqtt_host 192.168.0.124:1883
    Info:MAIN:Time 6, idle 109039/s, free 71208, MQTT 0(1), bWifi 1, secondsWithNoPing -1, socks 2/38 
    Info:MAIN:Boot complete time reached (5 seconds)
    Info:CFG:####### Set Boot Complete #######
    Info:MQTT:mqtt_connection_cb: Successfully connected
    Info:MQTT:mqtt_subscribed to temp_test/+/set
    Info:MQTT:mqtt_subscribed to temp_test/+/set
    Info:MQTT:mqtt_subscribed to cmnd/temp_test/+
    Info:MQTT:mqtt_subscribed to cmnd/temp_test/+
    Info:MQTT:mqtt_subscribed to temp_test/+/get
    Info:MQTT:Publishing val temp_test to temp_test/host retain=0
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 02 00 00 01 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 2 (MCUconf) with 7 bytes
    Info:TuyaMCU:TuyaMCU_ProcessIncoming: TUYA_CMD_MCU_CONF, TODO!
    Info:MAIN:Time 7, idle 171518/s, free 71040, MQTT 1(1), bWifi 1, secondsWithNoPing -1, socks 2/38 
    Info:MQTT:Publishing val Build on May  1 2023 21:06:42 version 1.17.88 to temp_test/build retain=0
    Info:MAIN:Time 8, idle 180693/s, free 71248, MQTT 1(1), bWifi 1, secondsWithNoPing -1, socks 2/38 
    Info:MQTT:Publishing val 1c:90:ff:2f:c0:f8  to temp_test/mac retain=0
    Info:MAIN:Time 9, idle 187841/s, free 71248, MQTT 1(1), bWifi 1, secondsWithNoPing -1, socks 2/38 
    Info:MQTT:Publishing val 3 to temp_test/sockets retain=0
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 02 00 00 01 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 2 (MCUconf) with 7 bytes
    Info:TuyaMCU:TuyaMCU_ProcessIncoming: TUYA_CMD_MCU_CONF, TODO!
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 10 00 01 00 10 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 16 (Unknown) with 8 bytes
    Info:TuyaMCU:TuyaMCU_ProcessIncoming: unhandled type 16
    Info:MAIN:Time 10, idle 188069/s, free 59552, MQTT 1(1), bWifi 1, secondsWithNoPing -1, socks 3/38 
    Info:GEN:dhcp=0 ip=192.168.0.100 gate=192.168.0.1 mask=255.255.255.0 mac=1c:90:ff:2f:c0:f8 
    Info:GEN:sta: 1, softap: 0, b/g/n
    Info:GEN:sta:rssi=-49,ssid=5G_FULL_POWER,bssid=ac:d5:64:2f:7f:f5 ,channel=6,cipher_type:CCMP
    Info:MQTT:Publishing val -47 to temp_test/rssi retain=0
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 05 00 08 01 02 00 04 00 00 00 E3 F6 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 5 (WiFiSelect) with 15 bytes
    Info:TuyaMCU:TuyaMCU_V0_ParseRealTimeWithRecordStorage: processing dpId 1, dataType 2-DP_TYPE_VALUE and 4 data bytes
    Info:TuyaMCU:TuyaMCU_V0_ParseRealTimeWithRecordStorage: raw data 4 int: 227
    Info:GEN:CHANNEL_Set channel 1 has changed to 227 (flags 0)
    
    Info:MQTT:Channel has changed! Publishing 227 to channel 1 
    Info:MQTT:Publishing val 227 to temp_test/1/get retain=0
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 05 00 08 02 02 00 04 00 00 00 29 3D 
    Info:MQTT:MQTT client in mqtt_incoming_publish_cb topic temp_test/1/get
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 5 (WiFiSelect) with 15 bytes
    Info:TuyaMCU:TuyaMCU_V0_ParseRealTimeWithRecordStorage: processing dpId 2, dataType 2-DP_TYPE_VALUE and 4 data bytes
    Info:TuyaMCU:TuyaMCU_V0_ParseRealTimeWithRecordStorage: raw data 4 int: 41
    Info:GEN:CHANNEL_Set channel 2 has changed to 41 (flags 0)
    
    Info:MQTT:Channel has changed! Publishing 41 to channel 2 
    Info:MQTT:Publishing val 41 to temp_test/2/get retain=0
    Info:MAIN:Time 11, idle 176355/s, free 71248, MQTT 1(1), bWifi 1, secondsWithNoPing -1, socks 2/38 
    Info:MQTT:MQTT client in mqtt_incoming_publish_cb topic temp_test/2/get
    Info:MAIN:Main_Init_Before_Delay
    Info:CFG:####### Boot Count 768 #######
    Warn:CFG:CFG_InitAndLoad: Correct config has been loaded with 22 changes count.
    Error:CMD:no file early.bat err -2
    Info:GEN:PIN_SetupPins pins have been set up.
    Info:MAIN:Main_Init_Before_Delay done
    Info:MAIN:Main_Init_Delay
    Info:MAIN:Main_Init_Delay done
    Info:MAIN:Main_Init_After_Delay
    Info:MAIN:ssid:5G_FULL_POWER key:MyP@ssw0rd
    Info:MAIN:Using SSID [5G_FULL_POWER]
    Info:MAIN:Using Pass [MyP@ssw0rd]
    Info:MQTT:MQTT_RegisterCallback called for bT temp_test/ subT temp_test/+/set
    Info:MQTT:MQTT_RegisterCallback called for bT temp_test/ subT temp_test/+/set
    Info:MQTT:MQTT_RegisterCallback called for bT cmnd/temp_test/ subT cmnd/temp_test/+
    Info:MQTT:MQTT_RegisterCallback called for bT cmnd/temp_test/ subT cmnd/temp_test/+
    Info:MQTT:MQTT_RegisterCallback called for bT temp_test/ subT temp_test/+/get
    Info:CMD:CMD_StartScript: started autoexec.bat at the beginning
    Info:MAIN:Main_Init_After_Delay done
    Info:MAIN:Started TuyaMCU.
    Info:MAIN:Started tmSensor.
    Info:GEN:Channel 1 type changed to temperature_div10
    Info:GEN:Channel 2 type changed to Humidity
    Info:GEN:Channel 3 type changed to ReadOnly
    Info:MAIN:Time 1, idle 275646/s, free 70904, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/38 
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 01 00 24 7B 22 70 22 3A 22 62 79 75 73 76 75 6D 65 6D 65 35 69 69 63 61 64 22 2C 22 76 22 3A 22 31 2E 30 2E 30 22 7D 20 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 1 (QueryProductInformation) with 43 bytes
    Info:TuyaMCU:TuyaMCU_ParseQueryProductInformation: received {"p":"byusvumeme5iicad","v":"1.0.0"}
    Info:MAIN:Time 2, idle 184552/s, free 70904, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/38 
    Info:MAIN:Time 3, idle 64678/s, free 71152, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/38 
    Info:MAIN:Time 4, idle 0/s, free 71152, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/38 
    Info:MAIN:Time 5, idle 0/s, free 71152, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/38 
    Info:MAIN:Main_OnWiFiStatusChange - WIFI_STA_CONNECTING - 1
    Info:MAIN:Main_OnWiFiStatusChange - WIFI_STA_CONNECTED - 4
    Info:MQTT:mqtt_userName homeassistant
    mqtt_pass hass_pass_secret
    mqtt_clientID temp_test
    mqtt_host 192.168.0.124:1883
    Info:MAIN:Time 6, idle 108018/s, free 71080, MQTT 0(1), bWifi 1, secondsWithNoPing -1, socks 2/38 
    Info:MAIN:Boot complete time reached (5 seconds)
    Info:CFG:####### Set Boot Complete #######
    Info:MQTT:mqtt_connection_cb: Successfully connected
    Info:MQTT:mqtt_subscribed to temp_test/+/set
    Info:MQTT:mqtt_subscribed to temp_test/+/set
    Info:MQTT:mqtt_subscribed to cmnd/temp_test/+
    Info:MQTT:mqtt_subscribed to cmnd/temp_test/+
    Info:MQTT:mqtt_subscribed to temp_test/+/get
    Info:MQTT:Publishing val temp_test to temp_test/host retain=0
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 02 00 00 01 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 2 (MCUconf) with 7 bytes
    Info:TuyaMCU:TuyaMCU_ProcessIncoming: TUYA_CMD_MCU_CONF, TODO!
    Info:MAIN:Time 7, idle 176336/s, free 71312, MQTT 1(1), bWifi 1, secondsWithNoPing -1, socks 2/38 
    Info:MQTT:Publishing val Build on May  1 2023 21:06:42 version 1.17.88 to temp_test/build retain=0
    Info:MAIN:Time 8, idle 359945/s, free 59616, MQTT 1(1), bWifi 1, secondsWithNoPing -1, socks 3/38 
    Info:MQTT:Publishing val 1c:90:ff:2f:c0:f8  to temp_test/mac retain=0
    Info:MAIN:Time 9, idle 184565/s, free 71072, MQTT 1(1), bWifi 1, secondsWithNoPing -1, socks 2/38 
    Info:MQTT:Publishing val 2 to temp_test/sockets retain=0
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 02 00 00 01 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 2 (MCUconf) with 7 bytes
    Info:TuyaMCU:TuyaMCU_ProcessIncoming: TUYA_CMD_MCU_CONF, TODO!
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 10 00 01 00 10 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 16 (Unknown) with 8 bytes
    Info:TuyaMCU:TuyaMCU_ProcessIncoming: unhandled type 16
    Info:MAIN:Time 10, idle 189494/s, free 71312, MQTT 1(1), bWifi 1, secondsWithNoPing -1, socks 2/38 
    Info:GEN:dhcp=0 ip=192.168.0.100 gate=192.168.0.1 mask=255.255.255.0 mac=1c:90:ff:2f:c0:f8 
    Info:GEN:sta: 1, softap: 0, b/g/n
    Info:GEN:sta:rssi=-38,ssid=5G_FULL_POWER,bssid=ac:d5:64:2f:7f:f5 ,channel=6,cipher_type:CCMP
    Info:MQTT:Publishing val -46 to temp_test/rssi retain=0
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 05 00 08 01 02 00 04 00 00 00 E4 F7 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 5 (WiFiSelect) with 15 bytes
    Info:TuyaMCU:TuyaMCU_V0_ParseRealTimeWithRecordStorage: processing dpId 1, dataType 2-DP_TYPE_VALUE and 4 data bytes
    Info:TuyaMCU:TuyaMCU_V0_ParseRealTimeWithRecordStorage: raw data 4 int: 228
    Info:GEN:CHANNEL_Set channel 1 has changed to 228 (flags 0)
    
    Info:MQTT:Channel has changed! Publishing 228 to channel 1 
    Info:MQTT:Publishing val 228 to temp_test/1/get retain=0
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 05 00 08 02 02 00 04 00 00 00 29 3D 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 5 (WiFiSelect) with 15 bytes
    Info:TuyaMCU:TuyaMCU_V0_ParseRealTimeWithRecordStorage: processing dpId 2, dataType 2-DP_TYPE_VALUE and 4 data bytes
    Info:TuyaMCU:TuyaMCU_V0_ParseRealTimeWithRecordStorage: raw data 4 int: 41
    Info:GEN:CHANNEL_Set channel 2 has changed to 41 (flags 0)
    
    Info:MQTT:Channel has changed! Publishing 41 to channel 2 
    Info:MQTT:MQTT client in mqtt_incoming_publish_cb topic temp_test/1/get
    Info:MQTT:Publishing val 41 to temp_test/2/get retain=0
    Info:MAIN:Time 11, idle 202098/s, free 71312, MQTT 1(1), bWifi 1, secondsWithNoPing -1, socks 2/38 
    Info:MQTT:MQTT client in mqtt_incoming_publish_cb topic temp_test/2/get
    Info:MAIN:Main_Init_Before_Delay
    Info:CFG:####### Boot Count 769 #######
    Warn:CFG:CFG_InitAndLoad: Correct config has been loaded with 22 changes count.
    Error:CMD:no file early.bat err -2
    Info:GEN:PIN_SetupPins pins have been set up.
    Info:MAIN:Main_Init_Before_Delay done
    Info:MAIN:Main_Init_Delay
    Info:MAIN:Main_Init_Delay done
    Info:MAIN:Main_Init_After_Delay
    Info:MAIN:ssid:5G_FULL_POWER key:MyP@ssw0rd
    Info:MAIN:Using SSID [5G_FULL_POWER]
    Info:MAIN:Using Pass [MyP@ssw0rd]
    Info:MQTT:MQTT_RegisterCallback called for bT temp_test/ subT temp_test/+/set
    Info:MQTT:MQTT_RegisterCallback called for bT temp_test/ subT temp_test/+/set
    Info:MQTT:MQTT_RegisterCallback called for bT cmnd/temp_test/ subT cmnd/temp_test/+
    Info:MQTT:MQTT_RegisterCallback called for bT cmnd/temp_test/ subT cmnd/temp_test/+
    Info:MQTT:MQTT_RegisterCallback called for bT temp_test/ subT temp_test/+/get
    Info:CMD:CMD_StartScript: started autoexec.bat at the beginning
    Info:MAIN:Main_Init_After_Delay done
    Info:MAIN:Started TuyaMCU.
    Info:MAIN:Started tmSensor.
    Info:GEN:Channel 1 type changed to temperature_div10
    Info:GEN:Channel 2 type changed to Humidity
    Info:GEN:Channel 3 type changed to ReadOnly
    Info:MAIN:Time 1, idle 280929/s, free 70904, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/38 
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 01 00 24 7B 22 70 22 3A 22 62 79 75 73 76 75 6D 65 6D 65 35 69 69 63 61 64 22 2C 22 76 22 3A 22 31 2E 30 2E 30 22 7D 20 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 1 (QueryProductInformation) with 43 bytes
    Info:TuyaMCU:TuyaMCU_ParseQueryProductInformation: received {"p":"byusvumeme5iicad","v":"1.0.0"}
    Info:MAIN:Time 2, idle 187005/s, free 70840, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/38 
    Info:MAIN:Time 3, idle 65855/s, free 71024, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/38 
    Info:MAIN:Time 4, idle 0/s, free 71024, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/38 
    Info:MAIN:Time 5, idle 0/s, free 71024, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/38 
    Info:MAIN:Main_OnWiFiStatusChange - WIFI_STA_CONNECTING - 1
    Info:MAIN:Main_OnWiFiStatusChange - WIFI_STA_CONNECTED - 4
    Info:MQTT:mqtt_userName homeassistant
    mqtt_pass hass_pass_secret
    mqtt_clientID temp_test
    mqtt_host 192.168.0.124:1883
    Info:MAIN:Time 6, idle 121870/s, free 71208, MQTT 0(1), bWifi 1, secondsWithNoPing -1, socks 2/38 
    Info:MAIN:Boot complete time reached (5 seconds)
    Info:CFG:####### Set Boot Complete #######
    Info:MQTT:mqtt_connection_cb: Successfully connected
    Info:MQTT:mqtt_subscribed to temp_test/+/set
    Info:MQTT:mqtt_subscribed to temp_test/+/set
    Info:MQTT:mqtt_subscribed to cmnd/temp_test/+
    Info:MQTT:mqtt_subscribed to cmnd/temp_test/+
    Info:MQTT:mqtt_subscribed to temp_test/+/get
    Info:MQTT:Publishing val temp_test to temp_test/host retain=0
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 02 00 00 01 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 2 (MCUconf) with 7 bytes
    Info:TuyaMCU:TuyaMCU_ProcessIncoming: TUYA_CMD_MCU_CONF, TODO!
    Info:MAIN:Time 7, idle 175294/s, free 71248, MQTT 1(1), bWifi 1, secondsWithNoPing -1, socks 2/38 
    Info:MQTT:Publishing val Build on May  1 2023 21:06:42 version 1.17.88 to temp_test/build retain=0
    Info:MAIN:Time 8, idle 186306/s, free 59280, MQTT 1(1), bWifi 1, secondsWithNoPing -1, socks 3/38 
    Info:MQTT:Publishing val 1c:90:ff:2f:c0:f8  to temp_test/mac retain=0
    Info:MAIN:Time 9, idle 186065/s, free 71248, MQTT 1(1), bWifi 1, secondsWithNoPing -1, socks 2/38 
    Info:MQTT:Publishing val 2 to temp_test/sockets retain=0
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 02 00 00 01 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 2 (MCUconf) with 7 bytes
    Info:TuyaMCU:TuyaMCU_ProcessIncoming: TUYA_CMD_MCU_CONF, TODO!
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 10 00 01 00 10 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 16 (Unknown) with 8 bytes
    Info:TuyaMCU:TuyaMCU_ProcessIncoming: unhandled type 16
    Info:MAIN:Time 10, idle 377667/s, free 71248, MQTT 1(1), bWifi 1, secondsWithNoPing -1, socks 2/38 
    Info:GEN:dhcp=0 ip=192.168.0.100 gate=192.168.0.1 mask=255.255.255.0 mac=1c:90:ff:2f:c0:f8 
    Info:GEN:sta: 1, softap: 0, b/g/n
    Info:GEN:sta:rssi=-48,ssid=5G_FULL_POWER,bssid=ac:d5:64:2f:7f:f5 ,channel=6,cipher_type:CCMP
    Info:MQTT:Publishing val -49 to temp_test/rssi retain=0
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 05 00 08 01 02 00 04 00 00 00 E4 F7 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 5 (WiFiSelect) with 15 bytes
    Info:TuyaMCU:TuyaMCU_V0_ParseRealTimeWithRecordStorage: processing dpId 1, dataType 2-DP_TYPE_VALUE and 4 data bytes
    Info:TuyaMCU:TuyaMCU_V0_ParseRealTimeWithRecordStorage: raw data 4 int: 228
    Info:GEN:CHANNEL_Set channel 1 has changed to 228 (flags 0)
    
    Info:MQTT:Channel has changed! Publishing 228 to channel 1 
    Info:MQTT:Publishing val 228 to temp_test/1/get retain=0
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 05 00 08 02 02 00 04 00 00 00 29 3D 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 5 (WiFiSelect) with 15 bytes
    Info:TuyaMCU:TuyaMCU_V0_ParseRealTimeWithRecordStorage: processing dpId 2, dataType 2-DP_TYPE_VALUE and 4 data bytes
    Info:TuyaMCU:TuyaMCU_V0_ParseRealTimeWithRecordStorage: raw data 4 int: 41
    Info:GEN:CHANNEL_Set channel 2 has changed to 41 (flags 0)
    
    Info:MQTT:Channel has changed! Publishing 41 to channel 2 
    Info:MQTT:MQTT client in mqtt_incoming_publish_cb topic temp_test/1/get
    Info:MQTT:Publishing val 41 to temp_test/2/get retain=0
    Info:MAIN:Time 11, idle 205611/s, free 70712, MQTT 1(1), bWifi 1, secondsWithNoPing -1, socks 2/38 
    Info:MQTT:MQTT client in mqtt_incoming_publish_cb topic temp_test/2/get
    Info:MAIN:Main_Init_Before_Delay
    Info:CFG:####### Boot Count 770 #######
    Warn:CFG:CFG_InitAndLoad: Correct config has been loaded with 22 changes count.
    Error:CMD:no file early.bat err -2
    Info:GEN:PIN_SetupPins pins have been set up.
    Info:MAIN:Main_Init_Before_Delay done
    Info:MAIN:Main_Init_Delay
    Info:MAIN:Main_Init_Delay done
    Info:MAIN:Main_Init_After_Delay
    Info:MAIN:ssid:5G_FULL_POWER key:MyP@ssw0rd
    Info:MAIN:Using SSID [5G_FULL_POWER]
    Info:MAIN:Using Pass [MyP@ssw0rd]
    Info:MQTT:MQTT_RegisterCallback called for bT temp_test/ subT temp_test/+/set
    Info:MQTT:MQTT_RegisterCallback called for bT temp_test/ subT temp_test/+/set
    Info:MQTT:MQTT_RegisterCallback called for bT cmnd/temp_test/ subT cmnd/temp_test/+
    Info:MQTT:MQTT_RegisterCallback called for bT cmnd/temp_test/ subT cmnd/temp_test/+
    Info:MQTT:MQTT_RegisterCallback called for bT temp_test/ subT temp_test/+/get
    Info:CMD:CMD_StartScript: started autoexec.bat at the beginning
    Info:MAIN:Main_Init_After_Delay done
    Info:MAIN:Started TuyaMCU.
    Info:MAIN:Started tmSensor.
    Info:GEN:Channel 1 type changed to temperature_div10
    Info:GEN:Channel 2 type changed to Humidity
    Info:GEN:Channel 3 type changed to ReadOnly
    Info:MAIN:Time 1, idle 281763/s, free 70840, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/38 
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 01 00 24 7B 22 70 22 3A 22 62 79 75 73 76 75 6D 65 6D 65 35 69 69 63 61 64 22 2C 22 76 22 3A 22 31 2E 30 2E 30 22 7D 20 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 1 (QueryProductInformation) with 43 bytes
    Info:TuyaMCU:TuyaMCU_ParseQueryProductInformation: received {"p":"byusvumeme5iicad","v":"1.0.0"}
    Info:MAIN:Time 2, idle 187527/s, free 70840, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/38 
    Info:MAIN:Time 3, idle 65471/s, free 71024, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/38 
    Info:MAIN:Time 4, idle 0/s, free 71024, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/38 
    Info:MAIN:Time 5, idle 0/s, free 71024, MQTT 0(0), bWifi 0, secondsWithNoPing -1, socks 2/38 
    Info:MAIN:Main_OnWiFiStatusChange - WIFI_STA_CONNECTING - 1
    Info:MAIN:Main_OnWiFiStatusChange - WIFI_STA_CONNECTED - 4
    Info:MQTT:mqtt_userName homeassistant
    mqtt_pass hass_pass_secret
    mqtt_clientID temp_test
    mqtt_host 192.168.0.124:1883
    Info:MAIN:Time 6, idle 114146/s, free 71200, MQTT 0(1), bWifi 1, secondsWithNoPing -1, socks 2/38 
    Info:MAIN:Boot complete time reached (5 seconds)
    Info:CFG:####### Set Boot Complete #######
    Info:MQTT:mqtt_connection_cb: Successfully connected
    Info:MQTT:mqtt_subscribed to temp_test/+/set
    Info:MQTT:mqtt_subscribed to temp_test/+/set
    Info:MQTT:mqtt_subscribed to cmnd/temp_test/+
    Info:MQTT:mqtt_subscribed to cmnd/temp_test/+
    Info:MQTT:mqtt_subscribed to temp_test/+/get
    Info:MQTT:Publishing val temp_test to temp_test/host retain=0
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 02 00 00 01 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 2 (MCUconf) with 7 bytes
    Info:TuyaMCU:TuyaMCU_ProcessIncoming: TUYA_CMD_MCU_CONF, TODO!
    Info:MAIN:Time 7, idle 185104/s, free 71240, MQTT 1(1), bWifi 1, secondsWithNoPing -1, socks 2/38 
    Info:MQTT:Publishing val Build on May  1 2023 21:06:42 version 1.17.88 to temp_test/build retain=0
    Info:MAIN:Time 8, idle 182657/s, free 71240, MQTT 1(1), bWifi 1, secondsWithNoPing -1, socks 2/38 
    Info:MQTT:Publishing val 1c:90:ff:2f:c0:f8  to temp_test/mac retain=0
    Info:MAIN:Time 9, idle 186337/s, free 71000, MQTT 1(1), bWifi 1, secondsWithNoPing -1, socks 2/38 
    Info:MQTT:Publishing val 2 to temp_test/sockets retain=0
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 02 00 00 01 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 2 (MCUconf) with 7 bytes
    Info:TuyaMCU:TuyaMCU_ProcessIncoming: TUYA_CMD_MCU_CONF, TODO!
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 10 00 01 00 10 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 16 (Unknown) with 8 bytes
    Info:TuyaMCU:TuyaMCU_ProcessIncoming: unhandled type 16
    Info:MAIN:Time 10, idle 189701/s, free 71008, MQTT 1(1), bWifi 1, secondsWithNoPing -1, socks 2/38 
    Info:GEN:dhcp=0 ip=192.168.0.100 gate=192.168.0.1 mask=255.255.255.0 mac=1c:90:ff:2f:c0:f8 
    Info:GEN:sta: 1, softap: 0, b/g/n
    Info:GEN:sta:rssi=-38,ssid=5G_FULL_POWER,bssid=ac:d5:64:2f:7f:f5 ,channel=6,cipher_type:CCMP
    Info:MQTT:Publishing val -39 to temp_test/rssi retain=0
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 05 00 08 01 02 00 04 00 00 00 E4 F7 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 5 (WiFiSelect) with 15 bytes
    Info:TuyaMCU:TuyaMCU_V0_ParseRealTimeWithRecordStorage: processing dpId 1, dataType 2-DP_TYPE_VALUE and 4 data bytes
    Info:TuyaMCU:TuyaMCU_V0_ParseRealTimeWithRecordStorage: raw data 4 int: 228
    Info:GEN:CHANNEL_Set channel 1 has changed to 228 (flags 0)
    
    Info:MQTT:Channel has changed! Publishing 228 to channel 1 
    Info:MQTT:Publishing val 228 to temp_test/1/get retain=0
    Info:TuyaMCU:TUYAMCU received: 55 AA 00 05 00 08 02 02 00 04 00 00 00 29 3D 
    Info:TuyaMCU:TuyaMCU_ProcessIncoming[ver=0]: processing command 5 (WiFiSelect) with 15 bytes
    Info:TuyaMCU:TuyaMCU_V0_ParseRealTimeWithRecordStorage: processing dpId 2, dataType 2-DP_TYPE_VALUE and 4 data bytes
    Info:TuyaMCU:TuyaMCU_V0_ParseRealTimeWithRecordStorage: raw data 4 int: 41
    Info:MQTT:MQTT client in mqtt_incoming_publish_cb topic temp_test/1/get
    Info:GEN:CHANNEL_Set channel 2 has changed to 41 (flags 0)
    
    Info:MQTT:Channel has changed! Publishing 41 to channel 2 
    Info:MQTT:Publishing val 41 to temp_test/2/get retain=0
    Info:MAIN:Time 11, idle 183799/s, free 71008, MQTT 1(1), bWifi 1, secondsWithNoPing -1, socks 2/38 
    Info:MQTT:MQTT client in mqtt_incoming_publish_cb topic temp_test/2/get
    



    Podsumowanie
    Sensor ten oparty jest o protokół TuyaMCU. Może działać zarówno z aplikacją Tuya, jak i z OpenBeken. Częstotliwość raportowania można zmieniać w dużym zakresie, od minuty, aż do 2h lub więcej - dłuższych okresów nie sprawdzaliśmy. W trybie głębokiego snu pobiera około 5µA . Jest to niezły wynik, chociaż sam BK7231, wedle moich testów, w trybie głębokiego snu z wybudzeniem GPIO pobiera jakieś 6µA . Ze zmianą firmware jest troszkę pracy, bo jak zwykle TuyaMCU jest na tym samym porcie UART który służy do programowania, ale po jednokrotnym wgraniu wsadu wszystko powinno działać dobrze. W temacie umieszczone są gotowe skrypty pod ten czujnik.
    Jeszcze raz dziękuję @DeDaMrAz za pomoc w opracowaniu tego tematu (razem zdalnie pracowaliśmy nad tym czujnikiem).
    PS: Warto zobaczyć starszy temat, autorstwa innego użytkownika, o podobnym sensorze, tutaj, znajduje się tam też przykładowy kod YAML do Home Assistant, który teraz nie jest już potrzebny, odkąd OBK wspiera HASS Discovery.
    Załączniki:
    • tuyaMCU thermostat backup.zip (1011.15 KB) Musisz być zalogowany, aby pobrać ten załącznik.

    Fajne? Ranking DIY
    Pomogłem? Kup mi kawę.
    O autorze
    p.kaczmarek2
    Moderator Smart Home
    Offline 
    Inżynier programista z wieloletnim doświadczeniem embedded i full stack developer.
    Specjalizuje się w: embedded, Full-Stack Developer
    p.kaczmarek2 napisał 14623 postów o ocenie 12642, pomógł 655 razy. Jest z nami od 2014 roku.
  • REKLAMA
  • #3 20567264
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14623
    Pomógł: 655
    Ocena: 12642
    Klasyczny copy/paste błąd autora grafiki, miało być humidity. Ale i tak trzeba im przyznać, że biorąc pod uwagę inne chińskie produkty i oferty, tu ich angielski jest w miarę zrozumiały. Liczę, że chociaż teraz, w czasach ChatGPT i dobrych translatorów, tłumaczenia chińskich produktów i instrukcji będą coraz lepsze.
    Pomogłem? Kup mi kawę.
  • #4 20584248
    spin55
    Poziom 17  
    Posty: 209
    Pomógł: 17
    Ocena: 42
    Właśnie zobaczyłem ten wątek dzięki twojemu linkowi w wątku ruchu pir i muszę wyznać, że go nie widziałem. Bardzo dobra robota.

    Widzę, że obsługujesz polecenie 10, aby zmieniać częstotliwość aktualizacji danych. Byłoby interesujące dla pir, aby skrócić 1 minutę 16 sekund, które ma obecnie na interwał resetowania czujnika ruchu.
  • #5 20584330
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14623
    Pomógł: 655
    Ocena: 12642
    Witaj @spin55 , następującą pracę wykonano z @DeDaMrAz , sam nie mam tego urządzenia fizycznie, ale zgodnie z jego testami, polecenie 10 (ObtainDPCache) działa dobrze i rzeczywiście może ustawić czas raportu.

    Polecenie 10 (ObtainDPCache) różni się od typowej komunikacji TuyaMCU, ponieważ w przypadku ObtainDPCache MCU najpierw prosi moduł WiFi o dane, a moduł WiFI musi odpowiedzieć danymi z pamięci podręcznej. Tak więc, łącząc kanał OBK z dpID i typem zmiennej, dla TuyaMCU, musisz również dodać „1” jako flagę dpCache:
    
    // link dpID 17 to channel 5, the type is val, extra '1' means that its dpCache variable
    linkTuyaMCUOutputToChannel 17 val 5 1
    

    Jeśli zrobisz coś takiego, to w czasie przetwarzania 10 (ObtainDPCache ) urządzenie OBK wyśle wartość z kanału 5 do dpID 5 z typem „val” do TuyaMCU.

    Jeśli chcesz, aby OBK pamiętał kanał między restartami, możesz użyć wartości początkowej -1 (magiczna wartość oznaczająca „zapamiętaj ostatni”):
    
    // Make value persistant (stored between reboots), 
    // start value -1 means "remember last"
    SetStartValue 5 -1
    

    Następnie jest zapamiętywany w pamięci flash, ale nie martw się o zużycie pamięci flash - nasz system flash ogranicza liczbę cykli kasowania, kasujemy raz na wiele zapisów, więc pamięć flash nie zużywa się zbyt szybko... a także , w tym przypadku myślę, że ludzie nie zmieniają często interwału raportów.

    Ostatnio próbowałem zamówić jeszcze kilka urządzeń do testów, wybrałem dwa zasilane bateryjnie, ale przyszły bez MCU:
    [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna
    [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna
    Oba urządzenia ze zdjęć działają w 100% dobrze z OBK z systemem DeepSleep, ale nie są to TuyaMCU.

    Zamówię więcej, gdy zdobędę więcej funduszy z darowizn, ale nie martw się, badania nie są zamknięte! Będę więcej pracował nad TuyaMCU i dołożę wszelkich starań, aby wszystko było dobre i dobrze obsługiwane.

    @spin55 jeśli chcesz spróbować użyć polecenia 0x10 do skonfigurowania czasu uśpienia urządzenia TuyaMCU, daj mi znać i być może pokaż logi UART. Nie jestem pewien co do tego czujnika PIR, ponieważ o ile mi wiadomo, czujnik PIR nie wybudza się okresowo (a może tylko do sprawdzenia baterii?), budzi się po wykryciu ruchu, więc to inna sprawa.
    Pomogłem? Kup mi kawę.
  • #6 20584368
    spin55
    Poziom 17  
    Posty: 209
    Pomógł: 17
    Ocena: 42
    Dziękuję bardzo za szczegółowe wyjaśnienie.

    //S 4/30/2023 8:49:32 PM WiFi send:
    55AA0001000000
    //R 4/30/2023 8:49:32 PM WiFi received:
    55AA000100247B2270223A226279757376756D656D65356969636164222C2276223A22312E302E30227D20
    //S 4/30/2023 8:49:33 PM WiFi send:
    55AA000200010305
    //R 4/30/2023 8:49:33 PM WiFi received:
    55AA0002000001
    //S 4/30/2023 8:51:50 PM WiFi send:
    55AA000200010406
    //R 4/30/2023 8:51:56 PM WiFi received:
    55AA0002000001
    //R 4/30/2023 8:51:56 PM WiFi received:
    55AA001000010010
    //S 4/30/2023 6:18:06 PM WiFi sent:
    55AA00100002010012
    //R 4/30/2023 8:51:58 PM WiFi received:
    55AA0005000801020004000000FC0F
    //R 4/30/2023 8:51:58 PM WiFi received:
    55AA0005000802020004000000273B
    //R 4/30/2023 8:51:58 PM WiFi received:
    55AA00050005030400010112
    //R 4/30/2023 8:51:58 PM WiFi received:
    55AA00050005090400010017
    //R 4/30/2023 8:51:58 PM WiFi received:
    55AA000500080A0200040000021C3A
    //R 4/30/2023 8:51:58 PM WiFi received:
    55AA000500080B020004FFFFFF88A2
    //R 4/30/2023 8:51:58 PM WiFi received:
    55AA000500080C0200040000005A78
    //R 4/30/2023 8:51:58 PM WiFi received:
    55AA000500080D0200040000000A29
    //R 4/30/2023 8:51:58 PM WiFi received:
    55AA000500050E040001021E
    //R 4/30/2023 8:51:59 PM WiFi received:
    55AA000500050F040001021F
    //R 4/30/2023 8:51:59 PM WiFi received:
    55AA00050008110200040000000124
    //R 4/30/2023 8:51:59 PM WiFi received:
    55AA00050008120200040000000125
    //R 4/30/2023 8:51:59 PM WiFi received:
    55AA0005000813020004000000052A
    //R 4/30/2023 8:51:59 PM WiFi received:
    55AA0005000814020004000000082E
    //R 4/30/2023 8:51:59 PM WiFi received:
    55AA00050005150100010020
    //R 4/30/2023 8:51:59 PM WiFi received:
    55AA0005000801020004000000FD10
    //R 4/30/2023 8:51:59 PM WiFi received:
    55AA0005000802020004000000273B
    //S 4/30/2023 8:52:13 PM WiFi send:
    55AA000500010005
    //S 4/30/2023 8:52:15 PM WiFi send:
    55AA000500010005
    //S 4/30/2023 8:52:17 PM WiFi send:
    55AA000500010005
    //S 4/30/2023 8:52:19 PM WiFi send:
    55AA000500010005
    //S 4/30/2023 8:52:21 PM WiFi send:
    55AA000500010005
    //S 4/30/2023 8:52:23 PM WiFi send:
    55AA000500010005
    //S 4/30/2023 8:52:25 PM WiFi send:
    55AA000500010005
    //S 4/30/2023 8:52:27 PM WiFi send:
    55AA000500010005
    //S 4/30/2023 8:52:29 PM WiFi send:
    55AA000500010005


    Czy mógłbyś wyjaśnić, dlaczego jest to jet lag?

    //R 4/30/2023 8:51:56 PM WiFi received:
    55AA001000010010
    //S 4/30/2023 6:18:06 PM WiFi sent:
    55AA00100002010012
  • #7 20584528
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14623
    Pomógł: 655
    Ocena: 12642
    spin55 napisał:

    Czy mógłbyś wyjaśnić, dlaczego jest to jet lag?

    //R 4/30/2023 8:51:56 PM WiFi received:
    55AA001000010010
    //S 4/30/2023 6:18:06 PM WiFi sent:
    55AA00100002010012

    To 20:51:56 vs 18:18:06 opóźnienie należy zignorować, to tylko błąd edycji. Miałem wiele zrzutów, również zrobionych osobno, najpierw sondując RX, a następnie TX, i komponowałem je ręcznie w coś bardziej czytelnego dla ludzi. Następująca sytuacja nie ma miejsca w rzeczywistości.

    To powiedziawszy, zauważę również, że najnowszy GUI Flasher BK7231 może to zrobić podwójne przechwytywanie UART , ale nadal trochę problematyczny , ponieważ okazało się, że opóźnienie COM/szeregowy/USB do szeregowego/cokolwiek jest tak duże, że czasami nadal źle odbiera kolejność pakietów, więc w niektórych przypadkach nadal wymagane jest przetwarzanie przechwytywania pakietów przez człowieka.

    Btw, przykład, który cytujesz:
    //R 4/30/2023 8:51:56 PM WiFi received:
    55AA001000010010
    //S 4/30/2023 6:18:06 PM WiFi sent:
    55AA00100002010012
    [/cytat]
    to pusta odpowiedź pakietu 0x10, w zasadzie mówi „Nie ma nic do zgłoszenia”.

    Jeśli chcesz przechwycić niektóre dane 0x10 wraz z identyfikatorami dpID, musisz wykonać następujące kroki:
    1. przechwytywanie konfiguracji
    2. następnie w aplikacji Tuya zmień jakiś parametr, może „okres raportu”
    3. następnie sprawdź przechwycony pakiet 0x10 i powinien zawierać dpID okresu raportu, wartość i typ.
    To będzie jak:
    
    55AA0010001201021102000400000001120200040000000155
    


    Inną rzeczą, o której warto wspomnieć, jest to, że możesz także wyodrębnić identyfikatory dpID z Tuya API, ale niewiele o tym wiem. Wspomniano tutaj:
    https://www.elektroda.pl/rtvforum/topic3978070.html#20581469

    Btw, jeśli interesuje Cię protokół TuyaMCU w OpenBeken, możesz również zajrzeć do naszego automatyczny system autotestu , który zasadniczo symuluje przypadki użycia TuyaMCU i sprawdza, czy oprogramowanie układowe reaguje zgodnie z oczekiwaniami. Na przykład zobacz ten plik:
    https://github.com/openshwprojects/OpenBK7231...rc/selftest/selftest_tuyaMCU_batteryPowered.c
    Można to uruchomić w kompilacji OBK systemu Windows i służy do automatycznego sprawdzania, czy TuyaMCU nadal działa zgodnie z oczekiwaniami po wprowadzeniu zmian i aktualizacji oprogramowania układowego. Oczywiście nie jest to tak dobre, jak testowanie na fizycznym urządzeniu, ale lepsze to niż nic.
    Pomogłem? Kup mi kawę.
  • #8 20584759
    spin55
    Poziom 17  
    Posty: 209
    Pomógł: 17
    Ocena: 42
    p.kaczmarek2 napisał:
    To powiedziawszy, zauważę również, że najnowszy GUI Flasher BK7231 może wykonywać podwójne przechwytywanie UART, ale nadal jest to nieco problematyczne, ponieważ okazało się, że opóźnienie COM/szeregowy/USB do szeregowego/cokolwiek jest tak duże, że czasami nadal dostaje pakiet kolejność jest błędna, więc w niektórych przypadkach nadal wymagane jest przetwarzanie końcowe przechwytywania pakietów przez człowieka.


    Czy używasz dwóch identycznych USB? Mówię to, ponieważ mam CP2102, który przechwytuje w Realterm z prędkością 20 znaków na sekundę (CPS: 20), i inny FTDI232, który przechwytuje tylko 5 znaków na sekundę (CPS: 5). I to jest bardzo widoczne w zestawieniach.

    [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna
  • REKLAMA
  • #9 20584984
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14623
    Pomógł: 655
    Ocena: 12642
    Mam dwa identyczne klucze sprzętowe CH340.
    [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna
    Problem jest związany z oprogramowaniem, próbowałem nawet utworzyć wątek dla każdego portu i stale odpytywać BytesToRead, ale nadal okazało się to problematyczne. Byłoby wspaniale mieć jakieś natychmiastowe wywołanie zwrotne niskiego poziomu w C # dla SerialPort, ale jak dotąd go nie znalazłem. Może DataReceived? Sprawdzę to w wolnej chwili.
    Pomogłem? Kup mi kawę.
  • #10 20585103
    rakalexei
    Poziom 8  
    Posty: 21
    Ocena: 4
    >>20584330

    Hej, mam 3 takie czujniki PIR, pomyślnie je sflashowałem, ale nie mogłem znaleźć prawidłowej konfiguracji. Czy możesz podzielić się swoim?
  • #11 20585139
    spin55
    Poziom 17  
    Posty: 209
    Pomógł: 17
    Ocena: 42
    Nie wiem czy to będzie to samo, ale ten który mam ma taką konfigurację:

    Kod: JSON
    Zaloguj się, aby zobaczyć kod


    Autoexec.bat
    
    setChannel 3 1
    addRepeatingEvent 30 -1 publishFloat "4" $CH4
    delay_s 60
    PinDeepSleep
    
  • #12 20585154
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14623
    Pomógł: 655
    Ocena: 12642
    @rakalexei czy masz kopię zapasową oprogramowania układowego 2 MB, abyśmy mogli wyodrębnić GPIO za pomocą tego narzędzia:
    https://github.com/openshwprojects/BK7231GUIFlashTool

    @ spin55 twój autoexec.bat działa, ale nie jest optymalny. Możesz zmniejszyć zużycie energii, kładąc się wcześniej spać.
    OSTRZEŻENIE! Poniższy szablon i skrypt dotyczy urządzenia BEZ MCU TUYA . Proszę tego nie mylić! Urządzenie z pierwszego postu to TuyaMCU.
    Coś jak:
    
    // set LED on???
    setChannel 3 1
    // every 1 second, publish value, just to be sure, should be not needed
    addRepeatingEvent 1 -1 publishFloat "4" $CH4
    // wait for MQTT connection to establish
    waitFor MQTTState 1
    // extra delay
    delay_s 3
    // go to sleep
    PinDeepSleep
    

    Mój skrypt ma również jedną wadę, będzie czekać wiecznie, jeśli serwer MQTT jest offline, możesz to naprawić, dodając linię:
    
    // after 60 seconds from now, force PinDeepSleep, even if MQTT was off
    addRepeatingEvent 60 -1 PinDeepSleep
    

    oczywiście musi być dodany przed WAITFOR.
    Pomogłem? Kup mi kawę.
  • REKLAMA
  • #13 20585196
    spin55
    Poziom 17  
    Posty: 209
    Pomógł: 17
    Ocena: 42
    p.kaczmarek2 napisał:
    @ spin55 twój autoexec.bat działa, ale nie jest optymalny. Możesz zmniejszyć zużycie energii, kładąc się wcześniej spać.
    OSTRZEŻENIE! Poniższy szablon i skrypt dotyczy urządzenia BEZ MCU TUYA. Proszę tego nie mylić! Urządzenie z pierwszego postu to TuyaMCU.


    Autoexec.bat służy jako odniesienie. Logicznie rzecz biorąc, musisz grać z wartościami:
    addRepeatingEvent 30 -1 publicFloat "4" $CH4 I opóźnienie_s 60 dostosować go do potrzeb każdego z osobna.

    Bez wątpienia twój autoexec jest najlepiej zoptymalizowany do natychmiastowego użycia.

    [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna
  • #14 20585200
    rakalexei
    Poziom 8  
    Posty: 21
    Ocena: 4
    >>20585154

    Nie, nie mam wysypiska.
  • #15 20585204
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14623
    Pomógł: 655
    Ocena: 12642
    spin55 napisał:

    Autoexec.bat służy jako odniesienie. Logicznie rzecz biorąc, musisz grać z wartościami:
    addRepeatingEvent 30 -1 publicFloat "4" $CH4 I opóźnienie_s 60 dostosować go do potrzeb każdego z osobna.

    Nie jestem też pewien, dlaczego masz tutaj wartość 30? Co 30 sekund?
    Publikowanie co 1 sekundę nie zaszkodzi, jeśli nie masz nic przeciwko odrobinie spamu...
    Mimo to, jeśli kanał jest używany, OBK powinien publikować go automatycznie po zmianie. Tak więc w rzeczywistości może nie być potrzeby publikowania ręcznego. Skąd więc wzięła się wartość 30s?

    rakalexei napisał:

    Nie, nie mam wysypiska.

    Nie wiem, jakiej metody używasz do flashowania, ale ogólnie rzecz biorąc, kopia zapasowa 2 MB jest teraz bardzo, bardzo przydatne ponieważ możemy z tego wyodrębnić GPIO.
    Pomogłem? Kup mi kawę.
  • #16 20585224
    spin55
    Poziom 17  
    Posty: 209
    Pomógł: 17
    Ocena: 42
    p.kaczmarek2 napisał:
    Nie jestem też pewien, dlaczego masz tutaj wartość 30? Co 30 sekund?
    Publikowanie co 1 sekundę nie zaszkodzi, jeśli nie masz nic przeciwko odrobinie spamu...
    Mimo to, jeśli kanał jest używany, OBK powinien publikować go automatycznie po zmianie. Tak więc w rzeczywistości może nie być potrzeby publikowania ręcznego. Skąd więc wzięła się wartość 30s?


    Umieszczam to, ponieważ OBK (tak samo jak TuyaMCU) wysyła posty tylko wtedy, gdy następuje zmiana wartości baterii. A wstawiałem co 30 sekund, żeby nie robił więcej niż jeden post wymuszony. Zrobiłem to, ponieważ w testach zasilam sprzęt ze źródła 3,3 V i musiałem zweryfikować, czy wartość baterii została opublikowana w HA.

    Na pewno zasilając sprzęt bateriami lub bateriami, to polecenie nie będzie konieczne, ponieważ gdy pojawi się zmiana, zostanie ona opublikowana (chyba, ponieważ jej nie weryfikowałem).
  • #17 20645711
    mkmunichmk
    Poziom 7  
    Posty: 32
    Ocena: 2
    p.kaczmarek2 napisał:
    wywołanie zwrotne niskiego poziomu w C#

    @p.kaczmarek2 Tak jak pisałem w innym wątku chciałem stworzyć dwukierunkowy sniffer portów w C#.
    W przeszłości korzystałem z tego podejścia, aby uzyskać dostęp do szeregowych portów USB i być blisko „czasu rzeczywistego”. Mój cel polegał na nagraniu 2 portów równolegle - byłeś szybszy ode mnie ;-)
    Również w twoim analizatorze jest wbudowane dekodowanie komunikatów Tuya MCU, którego nie ma w moim kodzie :-(
    Funkcje portu w twoim kodzie są takie same. Doszedłem do wniosku, że limity czasu muszą być skonfigurowane, aby uzyskać „czas rzeczywisty”. Możesz rzucić okiem na kod źródłowy https://github.com/MkMunich/SniffUART/tree/master/SniffUART

    Z pozdrowieniami mkMonachium
  • #18 20645869
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14623
    Pomógł: 655
    Ocena: 12642
    Twój link daje mi błąd 404:
    https://github.com/MkMunich/SniffUART
    Więc mówisz, że udało ci się uzyskać niezawodne przechwytywanie w czasie rzeczywistym bez zakłócania kolejności pakietów? Jak skonfigurowałeś limity czasu?
    Pomogłem? Kup mi kawę.
  • #19 20645901
    mkmunichmk
    Poziom 7  
    Posty: 32
    Ocena: 2
    p.kaczmarek2 napisał:
    Twój link daje mi błąd 404:


    Przepraszam, zapomniałem upublicznić projekt.

    Class PortHandler obsługuje rzeczy. Limity czasu są ustawiane w c'tor.
    Odczyt jest podzielony na wewnętrzną funkcję ReadBytes(), która albo przekracza limit czasu, albo dostarcza odebrane bajty, oraz ReadLoop(), która zapętla się, dopóki fragment bajtów nie zostanie odebrany i dostarcza bajtom znacznik czasu do formularza, który ma zostać wyświetlony .
    Brzmi trochę dziwnie, ale jest potrzebne, ponieważ Formularz to osobny wątek ...
  • #20 20645910
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14623
    Pomógł: 655
    Ocena: 12642
    Próbowałem to zrobić w osobnym wątku, ale nie udało się. Dziękuję za podzielenie się. Przeanalizuję Twój kod później, ale może jesteś zainteresowany współpracą z Analyzerem? Możesz po prostu otworzyć żądanie ściągnięcia i zaproponować tam swoje zmiany.
    Pomogłem? Kup mi kawę.
  • #21 20645958
    mkmunichmk
    Poziom 7  
    Posty: 32
    Ocena: 2
    p.kaczmarek2 napisał:
    współudział w analizatorze


    cóż, zainteresowany tak - jeśli to pomoże. Martwię się, że twój kod zostanie scalony z moim ... i utrzymywanie 2 różnych wersji tego samego nie ma dla mnie sensu. Decyzja należy do Ciebie. Sugeruję, abyś najpierw zajrzał.

    Krótka instrukcja:
    - Ustaw ustawienia UART0 na prawidłowe porty COMx pierwszego szeregowego adaptera USB
    - Ustaw ustawienia UART1 na prawidłowe porty COMx drugiego szeregowego adaptera USB
    - Dobrym punktem wyjścia dla Read Timeout jest 100 [ms]
    - możesz przełączyć się na widok szesnastkowy
    - Zapisz ustawienia (aby były dostępne przy następnym uruchomieniu
  • #22 20646377
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14623
    Pomógł: 655
    Ocena: 12642
    Twój kod wygląda bardzo dobrze. Klasa PortHandler.cs jest bardzo prosta i ładnie napisana. Wygląda na to, że byłem bardzo blisko zrozumienia tego, ponieważ miałem zasadniczo to samo podejście, ale z jakiegoś powodu to nie zadziałało. Może trzeba było bardziej dostroić timing.

    Nie mam teraz pod ręką sprzętu, żeby to sprawdzić, ale mam jeszcze czujnik od @spin55, może razem z nim skorzystam.

    Myślę, że twoje zmiany niczego nie zepsują, jeśli chcesz przenieść swój PortHandler.cs do naszego analizatora TuyaMCU, możesz to zrobić.

    Będziesz musiał zmodyfikować SinglePort.cs z mojego kodu źródłowego. Oczywiście nie zapomnij dołączyć Invoke do obsługi danych z wątku innego niż UI, ale widzę, że masz to w swoim kodzie, więc musisz już o tym wiedzieć.
    Pomogłem? Kup mi kawę.
  • REKLAMA
  • #23 20653382
    mkmunichmk
    Poziom 7  
    Posty: 32
    Ocena: 2
    p.kaczmarek2 napisał:
    Nie mam teraz pod ręką sprzętu żeby to sprawdzić


    Myślałeś, że masz co najmniej 2 adaptery USB? Zresztą są tanie :-)

    Jeśli masz czas, możesz zajrzeć do https://github.com/MkMunich/SniffUART
    Rozpocząłem dekodowanie Msg. Na szczęście mogę korzystać z dokumentacji Tuya protokołu MCU - więc zacząłem od zera, ponieważ jest to łatwiejsze w utrzymaniu ...
    Życzę miłego wieczoru. BR MK_Monachium [CB3S/BK7231N] Czujnik temperatury/wilgotności z TuyaMCU - Schemat, inżynieria wsteczna
  • #25 20655582
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14623
    Pomógł: 655
    Ocena: 12642
    Przepraszam za późną odpowiedź. Tak, widziałem postępy, bardzo dobre.

    Jeśli chodzi o pytanie, które mi wysłałeś, nie kopałem wystarczająco głęboko, aby odróżnić protokół urządzeń zasilanych bateryjnie TuyaMCU od standardowego protokołu TuyaMCU, ale chodzi o to, że użytkownik powinien już wiedzieć, czy urządzenie jest zasilane bateryjnie, czy proste. zasilany z zasilacza sieciowego.

    Polecam więc dodanie prostej opcji wyboru. Coś w rodzaju combobox, rozwijanego menu itp.
    Pomogłem? Kup mi kawę.
  • #26 20655740
    mkmunichmk
    Poziom 7  
    Posty: 32
    Ocena: 2
    p.kaczmarek2 napisał:
    dodanie prostej opcji wyboru

    To jest dokładnie to, co zrobiłem i przesłałem do git.
    Konsekwencją jest to, że użytkownik musi wybrać jeden z następujących protokołów portu szeregowego Tuya MCU przed dekodowaniem wiadomości:
    // McuSerPort: https://developer.tuya.com/en/docs/iot/tuya-c...rt-access-protocol?id=K9hhi0xxtn9cb#protocols
    // McuLowPower: https://developer.tuya.com/en/docs/iot/tuyacl...iversalsersialaccessprotocol?id=K95afs9h4tjjh
    // McuHomeKit: https://developer.tuya.com/en/docs/iot/wifi-m...lopment-overview-for-homekit?id=Kaa8fvusmgapc
    Z wyrazami szacunku
    MK_Monachium
  • #27 20655818
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14623
    Pomógł: 655
    Ocena: 12642
    Twoje narzędzie ładnie się rozwija, myślę, że powinieneś stworzyć osobny temat w naszej sekcji Tutorials i dostarczyć kilka zrzutów ekranu, informacje o użytkowaniu itp. Obecnie zajmujemy się tematem czujnika wilgotności i robimy z tym mały offtopic ...
    Pomogłem? Kup mi kawę.
  • #28 20659220
    mkmunichmk
    Poziom 7  
    Posty: 32
    Ocena: 2
    p.kaczmarek2 napisał:
    nasz dział samouczków

    zrobię to. Może podpowiecie mi gdzie to umieścić...

    Z wyrazami szacunku
    MK_Monachium
  • #29 20659282
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14623
    Pomógł: 655
    Ocena: 12642
    Sekcja samouczków dotyczących inteligentnego domu:
    https://www.elektroda.com/rtvforum/forum517.html
    Pomogłem? Kup mi kawę.
  • #30 20739869
    woszu
    Poziom 15  
    Posty: 287
    Pomógł: 2
    Ocena: 33
    Witam. Wczoraj uruchamiałem Openbk na czujniku temperatury Tuya.
    Firmware wgrał się bez najmniejszego problemu, ale miałem pewien przestój podczas testowania, bo czujnik nie pokazywał wartości, pomimo podłączenia zasilania z baterii.
    Do testów nie odłączałem jednak przylutowanych przewodów zasilania, masy oraz RX i TX. Okazało się, ze ma to jednak znaczenie i trzeba przewody odlutować, ponieważ BK może zasilać się pasożytniczo przez układ programujący.
    Ostatecznie wszystko ładnie zadziałało, łącznie ze wskazaniem stanu baterii (low, medium, high).
    Zastosowałem taki wsad do autoexec.bat:

    startDriver tuyaMCU 
    startDriver tmSensor 
    linkTuyaMCUOutputToChannel 1 val 1 
    setChannelType 1 Temperature_Div10 
    linkTuyaMCUOutputToChannel 2 val 2 
    setChannelType 2 Humidity
    linkTuyaMCUOutputToChannel 3 enum 3 
    setChannelType 3 ReadOnlyLowMidHigh 
    setChannelLabel 3 Battery
    

Podsumowanie tematu

✨ Dyskusja dotyczy inżynierii wstecznej bateryjnego czujnika temperatury i wilgotności Tuya opartych na protokole TuyaMCU, z osobnym mikrokontrolerem i modułem WiFi. Omówiono schematy, protokół komunikacji, role zmiennych dpID oraz metody flashowania firmware, w tym wykorzystanie narzędzi OpenBK7231T, BK7231 GUI Flash Tool i BTT Writer. Użytkownicy dzielili się doświadczeniami z konfiguracją autoexec.bat, optymalizacją zużycia energii, problemami z komunikacją UART, przechwytywaniem pakietów oraz integracją z Home Assistant. Poruszono kwestie zapisu stanu kanałów w pamięci flash, ustawiania interwałów raportowania temperatury i wilgotności, a także różnic w identyfikatorach dpID dla różnych wersji czujników (np. TH01 z dpID 1,2,3 vs. 27,46,101). Wskazano na konieczność odlutowania przewodów programujących, aby uniknąć zasilania pasożytniczego podczas testów. Przedstawiono także analizę PCB i identyfikację elementów pomiarowych, takich jak układ CHT8310. Dyskutowano o problemach z flashowaniem bez cięcia ścieżek UART oraz o metodach poprawnego podłączenia i konfiguracji urządzenia. Wątek zawierał także wymianę doświadczeń dotyczących narzędzi do snifferów UART i dekodowania protokołu TuyaMCU, a także propozycje ulepszeń oprogramowania i dokumentacji.
Wygenerowane przez model językowy.
REKLAMA