logo elektroda
logo elektroda
X
logo elektroda

Request for Help – Flashing Della Minisplit WiFi Module (WBR3 on TCWBRCU1)

dressyspider 4983 214
ADVERTISEMENT
  • #31 21550113
    p.kaczmarek2
    Moderator Smart Home
    Ah, sorry, you probably aren't aware about this, but when I link to PR, you can click the green check mark on the latest build, find "Get artifacts zip" or whatever is this option called, and download binaries for latest commit in the PR. That one should include the driver on the Realtek, unless I've missed which platform you use.
    Screenshot showing a list of downloadable artifacts from a GitHub Actions build process, with the “OpenBK7231T_App_1635_merge_2a4427f3f80d” artifact highlighted, size 53 MB.
    How well do you know C? I don't have this device on site so we need to work together through forum efficiently to test this and check if it runs. There might be still some strange issues..

    In a meantime, I can try to setup some simple self-tests for this driver (they run without device, on Windows or linux) just to see if the basics are working, is anything sent via UART, etc

    Btw, you don't need logic analyzer, you can capture traffic just by connecting UART RX line to the line you want to listen. Just make sure to set the correct baud.
    Helpful post? Buy me a coffee.
  • ADVERTISEMENT
  • #32 21550129
    dressyspider
    Level 2  
    Thanks for the info and the tip about downloading the latest build artifacts. How do I apply the artifact zip? Is it just an OTA update or is there another method?

    I am fairly technical but my skill level with C is basic. I am not afraid to figure things out and help with testing as best I can. Setting up self-tests sounds like a great idea.

    I have a question about capturing UART traffic. Would tapping only the RX line capture half of the data? Do we not need to capture the other half, the responses from the MCU?

    Let me know what you would like me to test next or if there is any info I can provide to help with driver development.


    I really appreciate you taking the time to work through this with me.
    Helpful post? Buy me a coffee.
  • ADVERTISEMENT
  • #33 21550132
    p.kaczmarek2
    Moderator Smart Home
    You need to unpack zip and find OTA file for your platform. The main zip is 50MB in size and contains binaries for all platforms, including Windows simulator.

    Don't worry about C skills, you don't need to write code, maybe you can just give a sneak peak there to smooth testing process, ChatGPT can also help with basics.

    For UART capture, you have to do capture for both lanes separetely, just as you said. And better write down what you capture, because the data on WiFi module to MCU line is different than data on MCU to WiFi module.

    I will try to make a basic self test in a moment
    Helpful post? Buy me a coffee.
  • #34 21550139
    dressyspider
    Level 2  
    Thanks for the explanation about the OTA file and unpacking the zip. That makes sense, I will give it a try in a few minutes.

    I appreciate the encouragement on the C skills. I’ll definitely use ChatGPT for help if I get stuck.

    Good to know about capturing both UART lanes separately and noting the differences between WiFi module to MCU and MCU to WiFi module traffic.

    Should I pull the system apart and get the chip make and model from the board inside the indoor unit? Looks like a pain to get to, but I’m thinking I should for the guide or teardown. What do you think?

    Interior of an electrical box with wires connected to terminals and a circuit board.

    Wiring diagram inside a device showing connectors, optional parts, and internal wiring layout.



    Edit: I started the OTA update. It's been running for a couple mins and has not changed from this status.
    Screenshot of the OTA panel with a selected .img update file for the RTL87X0C chipset.

    Edit: I opened another tab and it appears to have updated, but didn't update the status of the update.
    Screenshot showing device details like build date, uptime, partially redacted MAC address, short name, and chipset.

    Running startDriver TCL:
    
    Debug:API:POST to api/cmnd
    Debug:CMD:cmd [startDriver TCL]
    Debug:CMD:Adding command ACMode
    Info:MAIN:Started TCL.
    Info:CMD:[WebApp Cmd 'startDriver TCL' Result] OK
    


    Running ACMode 0:
    
    Debug:API:POST to api/cmnd
    Debug:CMD:cmd [ACMode 0]
    Warn:EnergyMeter:User set mode 0
    Warn:EnergyMeter:build_set_cmd: sizeof(get_cmd_resp_t) = 61, sizeof(m_set_cmd.data) = 35, sizeof(m_set_cmd.raw) = 35
    Info:CMD:[WebApp Cmd 'ACMode 0' Result] OK
    ExtraDebug:TuyaMCU:TuyaMCU heartbeat_valid = 0, product_information_valid=0, self_processing_mode = 1, wifi_state_valid = 0, wifi_state_timer=0
    Warn:EnergyMeter:Sending data
    
    Helpful post? Buy me a coffee.
  • #35 21550158
    p.kaczmarek2
    Moderator Smart Home
    Please take care with anything you do, I wouldn't want you to break the device just to make photos. Of course, any photos for teardowns are welcome, but as I said, be careful and don't proceed if the disassembly is problematic.

    Still, I personally do a lot of teardowns, not just IoT ones, you can check out them here: https://www.elektroda.com/rtvforum/forum519.html (only translated), and full site (Polish - but Google translate works well enough) https://www.elektroda.pl/rtvforum/forum519.html

    So, I ran the current driver on Windows and got that:

    Screenshot of Microsoft Visual Studio with source code and a debugging console open.
    It sent:
    
    BB0001031D00006403FF0000000000000000000000000000000000000000000000003C
    

    I have TOTALLY no idea whether it's good or not, but @insmod linked to the site of adaasch which has this:
    A table showing the structure of a serial communication protocol frame with field descriptions and a sample data packet.
    So the header is matching...

    
    BB 00 01 03 1D 00006403FF0000000000000000000000000000000000000000000000003C
    

    0xBB - preamble
    0x00 - sent by module flag
    0x01 - sent by module flag
    0x03 - Set command
    0x1D - payload len, matches here:
    Part of a table showing the structure of command 0x03 for setting parameters, with the 29 0x1D cell in Payload Length highlighted.

    So it seems to match the expectations, more or less, but I don't even know yet whether it's the protocol your device uses....

    Added after 1 [minutes]:

    UPDATE - I see you added things to your post
    So, first of all, remove autoexec.bat. TuyaMCU may conflict with this driver. Totally disable it. Then do full power off and on cycle. Fresh start.
    Helpful post? Buy me a coffee.
  • #36 21550163
    dressyspider
    Level 2  
    Thanks for confirming. I will be careful with any disassembly and definitely not looking to break anything just for photos. That said, I think grabbing the chip info from the indoor unit board might still be worth it for the sake of completeness in the guide or teardown. If I do go for it, I will make sure to document it clearly and safely. Appreciate the links to your teardown posts too, super helpful.

    Thank you as well for the reminder about the autoexec.bat. I created it when I was testing but then forgot about it.

    Also, I came across this great teardown and analysis by avnesh on Element14: Hardware Hacking: Della Mini-Split Aircon Unit
    It looks like they are working with a similar Della mini split, but the WiFi module in their unit is different. They mention a WB2S, whereas mine uses a WBR3. The internal board and connector layout are very close though, so the post is still a helpful reference.

    Glad to hear the driver is at least generating data that seems to match what adaasch captured. That looks like a promising start. I will try to capture some UART traffic from the live system after work today.
    Helpful post? Buy me a coffee.
  • #37 21550172
    p.kaczmarek2
    Moderator Smart Home
    If your OBK is working, then you can check if your device reacts to ACMode 0, ACMode 1, ACMode 2, etc?
    0 - off
    1 - cool
    2 - dry
    3 - fan only etc


    A fragment of C code showing an enumeration of climate modes.
    Helpful post? Buy me a coffee.
  • #39 21550186
    p.kaczmarek2
    Moderator Smart Home
    Well, then I can see two options now.
    1. either this ACMode command works and @dressyspider need to check
    2. or the parsing is missing, because I can see they first parse state reply and then send it back
    Screenshot of a C++ code snippet highlighting a memcpy function call copying between struct raw fields.
    I will try to port a bit more in a meantime

    I kinda expected padding issues, I remember using #pragma pack a lot back in the day, but I'm a MSVC guy and it wasn't even for embedded. Also, all types in structs/unions are bytes here, hm so it should be ok.
    Helpful post? Buy me a coffee.
  • #40 21550196
    dressyspider
    Level 2  
    Got stuck in a meeting. Checking now.

    Edit:
    I can't really tell if that worked or not because the unit doesn't report back the state to the physical remote control. I think it just sends commands and doesn't request status. Code is below though. Maybe fan speed would be better to start with because I could tell right away if it worked?

    Started with unit powered on, then I tried ACMode 0. As far as I can tell, nothing happened:
    
    Debug:API:POST to api/cmnd
    Debug:CMD:cmd [ACMode 0]
    Warn:EnergyMeter:User set mode 0
    Warn:EnergyMeter:build_set_cmd: sizeof(get_cmd_resp_t) = 61, sizeof(m_set_cmd.data) = 35, sizeof(m_set_cmd.raw) = 35
    Info:CMD:[WebApp Cmd 'ACMode 0' Result] OK
    ExtraDebug:TuyaMCU:TuyaMCU heartbeat_valid = 0, product_information_valid=0, self_processing_mode = 1, wifi_state_valid = 0, wifi_state_timer=0
    Warn:EnergyMeter:Sending data
    



    Started with unit powered off, then I tried ACmode 1. As far as I can tell, nothing happened:
    
    Debug:API:POST to api/cmnd
    Debug:CMD:cmd [ACMode 1]
    Warn:EnergyMeter:User set mode 1
    Warn:EnergyMeter:build_set_cmd: sizeof(get_cmd_resp_t) = 61, sizeof(m_set_cmd.data) = 35, sizeof(m_set_cmd.raw) = 35
    Info:CMD:[WebApp Cmd 'ACMode 1' Result] OK
    ExtraDebug:TuyaMCU:TuyaMCU heartbeat_valid = 0, product_information_valid=0, self_processing_mode = 1, wifi_state_valid = 0, wifi_state_timer=0
    Warn:EnergyMeter:Sending data
    
    Helpful post? Buy me a coffee.
  • #41 21550202
    p.kaczmarek2
    Moderator Smart Home
    Hm ok I can port fan speed in a moment
    Helpful post? Buy me a coffee.
  • #42 21550213
    dressyspider
    Level 2  
    I see "wind" and "windspeed" in the properties query results.

    Properties Query Results:
    
    {
      "result": {
        "properties": [
          {
            "code": "Power",
            "custom_name": "",
            "dp_id": 1,
            "time": 1747169669388,
            "type": "bool",
            "value": false
          },
          {
            "code": "temp_set",
            "custom_name": "",
            "dp_id": 2,
            "time": 1747169572752,
            "type": "value",
            "value": 240
          },
          {
            "code": "temp_current",
            "custom_name": "",
            "dp_id": 3,
            "time": 1747181991152,
            "type": "value",
            "value": 27
          },
          {
            "code": "mode",
            "custom_name": "",
            "dp_id": 4,
            "time": 1747169572752,
            "type": "enum",
            "value": "cold"
          },
          {
            "code": "windspeed",
            "custom_name": "",
            "dp_id": 5,
            "time": 1747169572752,
            "type": "enum",
            "value": "mid"
          },
          {
            "code": "humidity_current",
            "custom_name": "",
            "dp_id": 18,
            "time": 1747169572752,
            "type": "value",
            "value": 0
          },
          {
            "code": "temp_unit_convert",
            "custom_name": "",
            "dp_id": 19,
            "time": 1747169572752,
            "type": "enum",
            "value": "f"
          },
          {
            "code": "Fault",
            "custom_name": "",
            "dp_id": 20,
            "time": 1747169572752,
            "type": "bitmap",
            "value": 0
          },
          {
            "code": "temp_current_f",
            "custom_name": "",
            "dp_id": 23,
            "time": 1747175144670,
            "type": "value",
            "value": 81
          },
          {
            "code": "temp_set_f",
            "custom_name": "",
            "dp_id": 24,
            "time": 1747169572752,
            "type": "value",
            "value": 760
          },
          {
            "code": "pm25",
            "custom_name": "",
            "dp_id": 101,
            "time": 1747169572752,
            "type": "value",
            "value": 0
          },
          {
            "code": "fresh_air",
            "custom_name": "",
            "dp_id": 102,
            "time": 1747169572752,
            "type": "enum",
            "value": "off"
          },
          {
            "code": "freshair_filter",
            "custom_name": "",
            "dp_id": 103,
            "time": 1747169572752,
            "type": "bool",
            "value": false
          },
          {
            "code": "SN_SW_ver",
            "custom_name": "",
            "dp_id": 104,
            "time": 1747169079480,
            "type": "raw"
          },
          {
            "code": "sleep",
            "custom_name": "",
            "dp_id": 105,
            "time": 1747169572752,
            "type": "enum",
            "value": "off"
          },
          {
            "code": "markbit",
            "custom_name": "",
            "dp_id": 110,
            "time": 1747169572752,
            "type": "bitmap",
            "value": 2232892
          },
          {
            "code": "up_down_sweep",
            "custom_name": "",
            "dp_id": 113,
            "time": 1747169572752,
            "type": "enum",
            "value": "3"
          },
          {
            "code": "left_right_sweep",
            "custom_name": "",
            "dp_id": 114,
            "time": 1747169572752,
            "type": "enum",
            "value": "3"
          },
          {
            "code": "totalN",
            "custom_name": "",
            "dp_id": 115,
            "time": 1747169079480,
            "type": "value",
            "value": 0
          },
          {
            "code": "totalP",
            "custom_name": "",
            "dp_id": 116,
            "time": 1747169627802,
            "type": "value",
            "value": 6940
          },
          {
            "code": "money",
            "custom_name": "",
            "dp_id": 119,
            "time": 1747169572752,
            "type": "enum",
            "value": "0"
          },
          {
            "code": "energy",
            "custom_name": "",
            "dp_id": 120,
            "time": 1747169572752,
            "type": "enum",
            "value": "off"
          },
          {
            "code": "fault2",
            "custom_name": "",
            "dp_id": 122,
            "time": 1747169079480,
            "type": "bitmap",
            "value": 0
          },
          {
            "code": "boolCode",
            "custom_name": "",
            "dp_id": 123,
            "time": 1747169668732,
            "type": "string",
            "value": "0000"
          },
          {
            "code": "airquality",
            "custom_name": "",
            "dp_id": 125,
            "time": 1747169572752,
            "type": "enum",
            "value": "great"
          },
          {
            "code": "up_down_freeze",
            "custom_name": "",
            "dp_id": 126,
            "time": 1747169572752,
            "type": "enum",
            "value": "0"
          },
          {
            "code": "left_right_freeze",
            "custom_name": "",
            "dp_id": 127,
            "time": 1747169572752,
            "type": "enum",
            "value": "0"
          },
          {
            "code": "style",
            "custom_name": "",
            "dp_id": 128,
            "time": 1747169572752,
            "type": "enum",
            "value": "0"
          },
          {
            "code": "kwh",
            "custom_name": "",
            "dp_id": 129,
            "time": 1747169572752,
            "type": "enum",
            "value": "1"
          },
          {
            "code": "savemoney_temp",
            "custom_name": "",
            "dp_id": 130,
            "time": 1747169572752,
            "type": "value",
            "value": 26
          },
          {
            "code": "dirty_filter",
            "custom_name": "",
            "dp_id": 131,
            "time": 1747169572752,
            "type": "bool",
            "value": false
          },
          {
            "code": "hot_cold_wind",
            "custom_name": "",
            "dp_id": 132,
            "time": 1747169572752,
            "type": "bool",
            "value": false
          },
          {
            "code": "wind",
            "custom_name": "",
            "dp_id": 133,
            "time": 1747169572752,
            "type": "enum",
            "value": "3"
          },
          {
            "code": "work_time",
            "custom_name": "",
            "dp_id": 134,
            "time": 1747181991117,
            "type": "string",
            "value": "{\\\"t\\\":1747181990,\\\"s\\\":false,\\\"clr\\\":false}"
          },
          {
            "code": "run_time",
            "custom_name": "",
            "dp_id": 135,
            "time": 1747181938647,
            "type": "value",
            "value": 1
          }
        ]
      },
      "success": true,
      "t": 1747181994156,
      "tid": "28aca7ea305911f0a059b204054d17ef"
    }
    
    
    Helpful post? Buy me a coffee.
  • #43 21550217
    p.kaczmarek2
    Moderator Smart Home
    First try ACMode 3 (to enable Fan Only) and then try random values of FANMode
    A snippet of C code showing an enum definition for fan operating modes.
    But wait... now that I think about it... Fan mode may not work because we don't read back the state and state is a cleared buffer, so it would probably get sent with ACmode disabled.

    Wait, I will implement read as well.
    Helpful post? Buy me a coffee.
  • #44 21550220
    insmod
    Level 26  
    You forgot to disable TuyaMCU driver, it can interfere.
  • ADVERTISEMENT
  • #45 21550232
    p.kaczmarek2
    Moderator Smart Home
    I didn't port packet parse at first because I didn't like the way it's implemented. I have it now almost ported, but I still can't shake the feeling that is done incorrectly.
    Screenshot of source code in tcl_climate.h showing a loop processing UART data with a static buffer and conditionally parsing packets.
    @insmod do you also think that it lacks a "look ahead" mechanism, so if the UART buffer contains a half of a correct packet, it will just consume this half of a packet, instead of waiting for full data to arrive? In the rare situation that parsing is called during new packet arrival (in a middle of it, let's say).

    This won't hurt, since they request state update on every refresh (half a second), but still, not a perfect approach.

    I'm about to add parsing to PR, but that is without testing, I must find some packets to plug into simulator to see if it parses.

    Added after 40 [seconds]:

    EDIT: Or wait, maybe it does, the buffer is static...

    Added after 40 [seconds]:

    And pos in read_data_line is also static...
    Helpful post? Buy me a coffee.
  • #46 21550236
    insmod
    Level 26  
    Is received packet length always the same?
    If so, then perhaps delay by 1ms once, if packet header is correct but packet length is != expected length
  • #47 21550240
    p.kaczmarek2
    Moderator Smart Home
    This guy has put sample packets: https://github.com/adaasch/AC-hack let's see
    Helpful post? Buy me a coffee.
  • #48 21550249
    insmod
    Level 26  
    Length is variable, from what i see. But there is a payload length byte, so if received length < 5 (header + command), then wait 1ms, then parse length byte, etc, etc.
  • #49 21550265
    p.kaczmarek2
    Moderator Smart Home
    Ok so it parses something:
    Screenshot of Visual Studio showing C code and a console window with repeated lines Len -1, buffer[3] 9.
    but it expects buffer[3] to be 0x04, and we don't have packet sample for that:
    A part of documentation showing the format of request and response for the 0x04 Get Values command, including a table and example.
    Probably I could create it myself, just update CRC manually, but maybe I will just push what I have and let @dressyspider do the testing on the device...
    Expected output is this print every second:
    Screenshot of Microsoft Visual Studio with a C code file open, and a section of code highlighted with a red box.

    added latest changes
    https://github.com/openshwprojects/OpenBK7231T_App/pull/1635

    Added after 2 [minutes]:

    @dressyspider you can check now
    Helpful post? Buy me a coffee.
  • #50 21550313
    dressyspider
    Level 2  
    Sorry, but I am in a meeting for the next 30 minutes. I will check promptly after.

    Edit:
    Just to be clear, you want me to run the following commands, after installing the latest OTA? Also, what file do i download from https://github.com/openshwprojects/OpenBK7231T_App/actions/runs/15052203045
    
    startDriver TCL
    ACMode 3
    FANMode 1
    FANMode 2
    FANMode 3
    FANMode 4
    FANMode 5
    


    Edit:
    I tested the latest OTA from this build:
    GitHub Actions Artifact

    Steps Taken:
    1. Flashed OTA
    2. Restarted the module
    3. Ran: startDriver TCL
    4. Powered on the unit via remote
    5. Ran: ACMode 3
    6. Ran: FANMode 1
    7. Ran: FANMode 5
    8. Powered off the unit via remote

    Observation: Unfortunately, the fan speed never changed during testing.

    OBK Log:
    
    Info:MAIN:Started TCL.
    Info:CMD:[WebApp Cmd 'startDriver TCL' Result] OK
    ...
    Warn:EnergyMeter:User set mode 3
    Warn:EnergyMeter:build_set_cmd: sizeof(get_cmd_resp_t) = 61, sizeof(m_set_cmd.data) = 35, sizeof(m_set_cmd.raw) = 35
    Info:CMD:[WebApp Cmd 'ACMode 3' Result] OK
    Warn:EnergyMeter:Sending data
    ...
    Info:CMD:[WebApp Cmd 'FANMode 1' Result] OK
    Warn:EnergyMeter:Sending data
    ...
    Info:CMD:[WebApp Cmd 'FANMode 5' Result] OK
    Warn:EnergyMeter:Sending data
    ...
    

    Let me know if you'd like the full log in a file or if there's anything specific you'd like me to retest.
    Helpful post? Buy me a coffee.
  • #51 21550462
    p.kaczmarek2
    Moderator Smart Home
    I see, so we need to check if anything is received at all.
    I added this line - print every second.

    Screenshot of a C code fragment with a highlighted function and a logging line.
    Update and retry.,


    hm maybe wrong parity?

    Added after 8 [minutes]:

    
    Logic analyzer -> UART, Baudrate 9600, Bits 8, Parity Even, Stop-Bits 1 -> 9600 8E1
    

    and we set:
    Code: C / C++
    Log in, to see the code

    I copied code from TuyaMCU but it has parity none, so obviously it won't work... need to change parity.

    Added after 1 [minutes]:

    @insmod you did porting to RTL, is 1 equivalent to even parity?
    Code: C / C++
    Log in, to see the code
    Helpful post? Buy me a coffee.
  • #54 21550488
    p.kaczmarek2
    Moderator Smart Home
    Even parity is 2? Then wait, I need to change this in PR.

    So... that means the code in RN8209_Init is incorrect? There is UART_InitUART call with argument 1 but RN8209 requires even parity...

    Ok we will need to look into it, and I will try to update PR in a moment, but right now I'm testing PIR with user from germany so there will be a delay (to the morning at worst case)

    Added after 9 [hours] 24 [minutes]:

    insmod wrote:

    No, even parity is 2.

    I've pushed parity 2 now, can you check @dressyspider ? It will build for like 10 minutes from when I post this message, so take care, but probably you won't read it that fast anyway...


    GitHub commit history and CI status with failed and pending checks displayed.
    Helpful post? Buy me a coffee.
  • ADVERTISEMENT
  • #55 21551100
    dressyspider
    Level 2  
    I tested the latest OTA from this build:
    GitHub Actions Artifact


    Steps Taken:
    1. Flashed OTA
    2. Restarted the module
    3. Powered on the unit via remote
    4. Ran: startDriver TCL
    5. Ran: ACMode 3
    6. Ran: FANMode 1
    7. Ran: FANMode 5
    8. Ran: FANMode 3
    9. Ran: ACMode 0

    Observation: It worked! The unit beeps when a command is sent, so I could tell right away. With the SmartLife app, you can turn the beep off. Not with the remote though.

    Here is the log... i think some of the lines cut off because there was alot added.
    
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 31 D8 01 80 00 00 00 00 00 00 66 0B 88 00 00 00 00 00 00 00 00 00 00 64 FF 42 00 69 2B 2A 36 00 00 80 00 00 00 00 EE 00 03 00 44 40 00 00 00 00 1A 00 00 00 00 F4 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 5, turbo 0, mute 0
    Warn:EnergyMeter:fan 05
    Warn:EnergyMeter:mode 01
    Info:MAIN:Time 142, idle 0/s, free 94304, MQTT 1(1), bWifi 1, secondsWithNoPing 73, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 31 D8 01 80 00 00 00 00 00 00 66 0B 88 00 00 00 00 00 00 00 00 00 00 64 FF 42 00 69 2B 2A 36 00 00 80 00 00 00 00 EE 00 03 00 44 40 00 00 00 00 1A 00 00 00 00 F4 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 5, turbo 0, mute 0
    Warn:EnergyMeter:fan 05
    Warn:EnergyMeter:mode 01
    Info:MAIN:Time 143, idle 0/s, free 94304, MQTT 1(1), bWifi 1, secondsWithNoPing 74, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 31 D8 01 80 00 00 00 00 00 00 66 0B 88 00 00 00 00 00 00 00 00 00 00 64 FF 42 00 69 2B 2A 36 00 00 80 00 00 00 00 EE 00 03 00 44 40 00 00 00 00 1A 00 00 00 00 F4 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 5, turbo 0, mute 0
    Warn:EnergyMeter:fan 05
    Warn:EnergyMeter:mode 01
    Info:MAIN:Time 144, idle 0/s, free 94304, MQTT 1(1), bWifi 1, secondsWithNoPing 75, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 31 D8 01 80 00 00 00 00 00 00 66 0B 88 00 00 00 00 00 00 00 00 00 00 64 FF 42 00 69 2B 2A 36 00 00 80 00 00 00 00 EE 00 03 00 44 40 00 00 00 00 1A 00 00 00 00 F4 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 5, turbo 0, mute 0
    Warn:EnergyMeter:fan 05
    Warn:EnergyMeter:mode 01
    Info:MAIN:Time 145, idle 0/s, free 94304, MQTT 1(1), bWifi 1, secondsWithNoPing 76, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 31 D8 01 80 00 00 00 00 00 00 66 0B 88 00 00 00 00 00 00 00 00 00 00 64 FF 42 00 69 2B 2A 36 00 00 80 00 00 00 00 EE 00 03 00 44 40 00 00 00 00 1A 00 00 00 00 F4 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 5, turbo 0, mute 0
    Warn:EnergyMeter:fan 05
    Warn:EnergyMeter:mode 01
    Info:MAIN:Time 146, idle 0/s, free 94304, MQTT 1(1), bWifi 1, secondsWithNoPing 77, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 31 D8 01 80 00 00 00 00 00 00 66 0B 88 00 00 00 00 00 00 00 00 00 00 64 FF 42 00 69 2B 2A 36 00 00 80 00 00 00 00 EE 00 03 00 44 40 00 00 00 00 1A 00 00 00 00 F4 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 5, turbo 0, mute 0
    Warn:EnergyMeter:fan 05
    Warn:EnergyMeter:mode 01
    Info:MAIN:Time 147, idle 0/s, free 94304, MQTT 1(1), bWifi 1, secondsWithNoPing 78, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 31 D8 01 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 69 2B 2A 36 00 00 80 00 00 00 00 EE 00 03 00 44 40 00 00 00 00 1A 00 00 00 00 D6 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 5, turbo 0, mute 0
    Warn:EnergyMeter:fan 05
    Warn:EnergyMeter:mode 01
    Info:MAIN:Time 148, idle 0/s, free 94304, MQTT 1(1), bWifi 1, secondsWithNoPing 79, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 31 D8 01 80 00 00 00 00 00 00 66 0B 88 00 00 00 00 00 00 00 00 00 00 64 FF 42 00 69 2B 2A 36 00 00 80 00 00 00 00 EE 00 03 00 44 40 00 00 00 00 1A 00 00 00 00 F4 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 5, turbo 0, mute 0
    Warn:EnergyMeter:fan 05
    Warn:EnergyMeter:mode 01
    Info:MAIN:Time 149, idle 0/s, free 94304, MQTT 1(1), bWifi 1, secondsWithNoPing 80, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 31 D8 01 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 69 2B 2A 36 00 00 80 00 00 00 00 EE 00 03 00 44 40 00 00 00 00 1A 00 00 00 00 D6 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 5, turbo 0, mute 0
    Warn:EnergyMeter:fan 05
    Warn:EnergyMeter:mode 01
    Info:MAIN:Time 150, idle 0/s, free 94304, MQTT 1(1), bWifi 1, secondsWithNoPing 81, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 31 D8 01 80 00 00 00 00 00 00 66 0B 88 00 00 00 00 00 00 00 00 00 00 64 FF 42 00 69 2B 2A 36 00 00 80 00 00 00 00 EE 00 03 00 44 40 00 00 00 00 1A 00 00 00 00 F4 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 5, turbo 0, mute 0
    Warn:EnergyMeter:fan 05
    Warn:EnergyMeter:mode 01
    Info:MAIN:Time 151, idle 0/s, free 94304, MQTT 1(1), bWifi 1, secondsWithNoPing 82, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 31 D8 01 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 69 2B 2A 36 00 00 80 00 00 00 00 EE 00 03 00 44 40 00 00 00 00 1A 00 00 00 00 D6 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 5, turbo 0, mute 0
    Warn:EnergyMeter:fan 05
    Warn:EnergyMeter:mode 01
    Info:MAIN:Time 152, idle 0/s, free 94136, MQTT 1(1), bWifi 1, secondsWithNoPing 83, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 31 D8 01 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 69 2B 2A 36 00 00 80 00 00 00 00 EE 00 03 00 44 40 00 00 00 00 1A 00 00 00 00 D6 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 5, turbo 0, mute 0
    Warn:EnergyMeter:fan 05
    Warn:EnergyMeter:mode 01
    Info:MAIN:Time 153, idle 0/s, free 94304, MQTT 1(1), bWifi 1, secondsWithNoPing 84, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 31 D8 01 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 69 2B 2A 36 00 00 80 00 00 00 00 EE 00 03 00 44 40 00 00 00 00 1A 00 00 00 00 D6 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 5, turbo 0, mute 0
    Warn:EnergyMeter:fan 05
    Warn:EnergyMeter:mode 01
    Info:MAIN:Time 154, idle 0/s, free 94304, MQTT 1(1), bWifi 1, secondsWithNoPing 85, socks 2/21 
    Warn:EnergyMeter:User set mode 3
    Warn:EnergyMeter:build_set_cmd: sizeof(get_cmd_resp_t) = 61, sizeof(m_set_cmd.data) = 35, sizeof(m_set_cmd.raw) = 35
    Info:CMD:[WebApp Cmd 'ACMode 3' Result] OK
    Warn:EnergyMeter:Sending data
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 31 D8 01 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 69 2B 2A 36 00 00 80 00 00 00 00 EE 00 03 00 44 40 00 00 00 00 1A 00 00 00 00 D6 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 5, turbo 0, mute 0
    Warn:EnergyMeter:fan 05
    Warn:EnergyMeter:mode 01
    Info:MAIN:Time 155, idle 0/s, free 94000, MQTT 1(1), bWifi 1, secondsWithNoPing 86, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Info:MAIN:Time 156, idle 0/s, free 94000, MQTT 1(1), bWifi 1, secondsWithNoPing 87, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 DA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 69 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 D5 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 5, turbo 0, mute 0
    Warn:EnergyMeter:fan 05
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 157, idle 0/s, free 93664, MQTT 1(1), bWifi 1, secondsWithNoPing 88, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 DA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 69 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 D5 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 5, turbo 0, mute 0
    Warn:EnergyMeter:fan 05
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 158, idle 0/s, free 94168, MQTT 1(1), bWifi 1, secondsWithNoPing 89, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 DA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 69 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 D5 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 5, turbo 0, mute 0
    Warn:EnergyMeter:fan 05
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 159, idle 0/s, free 94000, MQTT 1(1), bWifi 1, secondsWithNoPing 90, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 DA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 69 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 D5 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 5, turbo 0, mute 0
    Warn:EnergyMeter:fan 05
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 160, idle 0/s, free 94168, MQTT 1(1), bWifi 1, secondsWithNoPing 91, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 DA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 69 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 D5 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 5, turbo 0, mute 0
    Warn:EnergyMeter:fan 05
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 161, idle 0/s, free 94000, MQTT 1(1), bWifi 1, secondsWithNoPing 92, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 DA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 69 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 D5 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 5, turbo 0, mute 0
    Warn:EnergyMeter:fan 05
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 162, idle 0/s, free 94168, MQTT 1(1), bWifi 1, secondsWithNoPing 93, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 DA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 69 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 D5 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 5, turbo 0, mute 0
    Warn:EnergyMeter:fan 05
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 163, idle 0/s, free 94000, MQTT 1(1), bWifi 1, secondsWithNoPing 94, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 DA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 69 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 D5 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 5, turbo 0, mute 0
    Warn:EnergyMeter:fan 05
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 164, idle 0/s, free 94000, MQTT 1(1), bWifi 1, secondsWithNoPing 95, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 DA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 69 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 D5 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 5, turbo 0, mute 0
    Warn:EnergyMeter:fan 05
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 165, idle 0/s, free 94000, MQTT 1(1), bWifi 1, secondsWithNoPing 96, socks 2/21 
    Warn:EnergyMeter:build_set_cmd: sizeof(get_cmd_resp_t) = 61, sizeof(m_set_cmd.data) = 35, sizeof(m_set_cmd.raw) = 35
    Info:CMD:[WebApp Cmd 'FANMode 1' Result] OK
    Warn:EnergyMeter:Sending data
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 DA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 69 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 D5 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 5, turbo 0, mute 0
    Warn:EnergyMeter:fan 05
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 166, idle 0/s, free 94000, MQTT 1(1), bWifi 1, secondsWithNoPing 97, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Info:MAIN:Time 167, idle 0/s, free 93832, MQTT 1(1), bWifi 1, secondsWithNoPing 98, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 9A 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 69 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 95 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 1, turbo 0, mute 0
    Warn:EnergyMeter:fan 01
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 168, idle 0/s, free 94168, MQTT 1(1), bWifi 1, secondsWithNoPing 99, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 9A 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 4B 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 B7 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 1, turbo 0, mute 0
    Warn:EnergyMeter:fan 01
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 169, idle 0/s, free 94000, MQTT 1(1), bWifi 1, secondsWithNoPing 100, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 9A 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 4B 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 B7 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 1, turbo 0, mute 0
    Warn:EnergyMeter:fan 01
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 170, idle 0/s, free 94168, MQTT 1(1), bWifi 1, secondsWithNoPing 101, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 9A 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 4B 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 B7 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 1, turbo 0, mute 0
    Warn:EnergyMeter:fan 01
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 171, idle 0/s, free 93720, MQTT 1(1), bWifi 1, secondsWithNoPing 102, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 9A 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 4B 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 B7 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 1, turbo 0, mute 0
    Warn:EnergyMeter:fan 01
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 172, idle 0/s, free 94168, MQTT 1(1), bWifi 1, secondsWithNoPing 103, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 9A 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 4B 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 B7 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 1, turbo 0, mute 0
    Warn:EnergyMeter:fan 01
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 173, idle 0/s, free 94000, MQTT 1(1), bWifi 1, secondsWithNoPing 104, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 9A 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 4B 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 B7 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 1, turbo 0, mute 0
    Warn:EnergyMeter:fan 01
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 174, idle 0/s, free 93608, MQTT 1(1), bWifi 1, secondsWithNoPing 105, socks 2/21 
    Warn:EnergyMeter:build_set_cmd: sizeof(get_cmd_resp_t) = 61, sizeof(m_set_cmd.data) = 35, sizeof(m_set_cmd.raw) = 35
    Info:CMD:[WebApp Cmd 'FANMode 5' Result] OK
    Warn:EnergyMeter:Sending data
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 9A 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 4B 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 B7 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 1, turbo 0, mute 0
    Warn:EnergyMeter:fan 01
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 175, idle 0/s, free 94168, MQTT 1(1), bWifi 1, secondsWithNoPing 106, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Info:MAIN:Time 176, idle 0/s, free 94168, MQTT 1(1), bWifi 1, secondsWithNoPing 107, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 BA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 4B 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 97 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 3, turbo 0, mute 0
    Warn:EnergyMeter:fan 03
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 177, idle 0/s, free 93336, MQTT 1(1), bWifi 1, secondsWithNoPing 108, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 BA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 73 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 AF 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 3, turbo 0, mute 0
    Warn:EnergyMeter:fan 03
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 178, idle 0/s, free 92280, MQTT 1(1), bWifi 1, secondsWithNoPing 109, socks 3/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 BA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 73 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 AF 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 3, turbo 0, mute 0
    Warn:EnergyMeter:fan 03
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 179, idle 0/s, free 94504, MQTT 1(1), bWifi 1, secondsWithNoPing 110, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 BA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 73 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 AF 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 3, turbo 0, mute 0
    Warn:EnergyMeter:fan 03
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 180, idle 0/s, free 94168, MQTT 1(1), bWifi 1, secondsWithNoPing 111, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 BA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 73 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 AF 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 3, turbo 0, mute 0
    Warn:EnergyMeter:fan 03
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 181, idle 0/s, free 94168, MQTT 1(1), bWifi 1, secondsWithNoPing 112, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 BA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 73 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 AF 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 3, turbo 0, mute 0
    Warn:EnergyMeter:fan 03
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 182, idle 0/s, free 94336, MQTT 1(1), bWifi 1, secondsWithNoPing 113, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 BA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 73 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 AF 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 3, turbo 0, mute 0
    Warn:EnergyMeter:fan 03
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 183, idle 0/s, free 94336, MQTT 1(1), bWifi 1, secondsWithNoPing 114, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 BA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 73 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 AF 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 3, turbo 0, mute 0
    Warn:EnergyMeter:fan 03
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 184, idle 0/s, free 94168, MQTT 1(1), bWifi 1, secondsWithNoPing 115, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 BA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 73 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 AF 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 3, turbo 0, mute 0
    Warn:EnergyMeter:fan 03
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 185, idle 0/s, free 94336, MQTT 1(1), bWifi 1, secondsWithNoPing 116, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 BA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 73 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 AF 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 3, turbo 0, mute 0
    Warn:EnergyMeter:fan 03
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 186, idle 0/s, free 94168, MQTT 1(1), bWifi 1, secondsWithNoPing 117, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 BA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 73 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 AF 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 3, turbo 0, mute 0
    Warn:EnergyMeter:fan 03
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 187, idle 0/s, free 94336, MQTT 1(1), bWifi 1, secondsWithNoPing 118, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 BA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 73 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 AF 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 3, turbo 0, mute 0
    Warn:EnergyMeter:fan 03
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 188, idle 0/s, free 94336, MQTT 1(1), bWifi 1, secondsWithNoPing 119, socks 2/21 
    Warn:EnergyMeter:build_set_cmd: sizeof(get_cmd_resp_t) = 61, sizeof(m_set_cmd.data) = 35, sizeof(m_set_cmd.raw) = 35
    Info:CMD:[WebApp Cmd 'FANMode 3' Result] OK
    Warn:EnergyMeter:Sending data
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 BA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 73 2B 2A 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 AF 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 3, turbo 0, mute 0
    Warn:EnergyMeter:fan 03
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 189, idle 0/s, free 94000, MQTT 1(1), bWifi 1, secondsWithNoPing 120, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Info:MAIN:Time 190, idle 0/s, free 94168, MQTT 1(1), bWifi 1, secondsWithNoPing 121, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 AA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 73 2B 2B 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 BE 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 2, turbo 0, mute 0
    Warn:EnergyMeter:fan 02
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 191, idle 0/s, free 94336, MQTT 1(1), bWifi 1, secondsWithNoPing 122, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 AA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 5A 2B 2B 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 97 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 2, turbo 0, mute 0
    Warn:EnergyMeter:fan 02
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 192, idle 0/s, free 94168, MQTT 1(1), bWifi 1, secondsWithNoPing 123, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 AA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 5A 2B 2B 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 97 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 2, turbo 0, mute 0
    Warn:EnergyMeter:fan 02
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 193, idle 0/s, free 93776, MQTT 1(1), bWifi 1, secondsWithNoPing 124, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 AA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 5A 2B 2B 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 97 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 2, turbo 0, mute 0
    Warn:EnergyMeter:fan 02
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 194, idle 0/s, free 94336, MQTT 1(1), bWifi 1, secondsWithNoPing 125, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 AA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 5A 2B 2B 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 97 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 2, turbo 0, mute 0
    Warn:EnergyMeter:fan 02
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 195, idle 0/s, free 94168, MQTT 1(1), bWifi 1, secondsWithNoPing 126, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 AA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 5A 2B 2B 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 97 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 2, turbo 0, mute 0
    Warn:EnergyMeter:fan 02
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 196, idle 0/s, free 94168, MQTT 1(1), bWifi 1, secondsWithNoPing 127, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 AA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 5A 2B 2B 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 97 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 2, turbo 0, mute 0
    Warn:EnergyMeter:fan 02
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 197, idle 0/s, free 94336, MQTT 1(1), bWifi 1, secondsWithNoPing 128, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 AA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 5A 2B 2B 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 97 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 2, turbo 0, mute 0
    Warn:EnergyMeter:fan 02
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 198, idle 0/s, free 94336, MQTT 1(1), bWifi 1, secondsWithNoPing 129, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 AA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 5A 2B 2B 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 97 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 2, turbo 0, mute 0
    Warn:EnergyMeter:fan 02
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 199, idle 0/s, free 94168, MQTT 1(1), bWifi 1, secondsWithNoPing 130, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 AA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 5A 2B 2B 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 97 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 2, turbo 0, mute 0
    Warn:EnergyMeter:fan 02
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 200, idle 0/s, free 94336, MQTT 1(1), bWifi 1, secondsWithNoPing 131, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 AA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 5A 2B 2B 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 97 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 2, turbo 0, mute 0
    Warn:EnergyMeter:fan 02
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 201, idle 0/s, free 94336, MQTT 1(1), bWifi 1, secondsWithNoPing 132, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 AA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 5A 2B 2B 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 97 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 2, turbo 0, mute 0
    Warn:EnergyMeter:fan 02
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 202, idle 0/s, free 94168, MQTT 1(1), bWifi 1, secondsWithNoPing 133, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 AA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 5A 2B 2B 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 97 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 2, turbo 0, mute 0
    Warn:EnergyMeter:fan 02
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 203, idle 0/s, free 94336, MQTT 1(1), bWifi 1, secondsWithNoPing 134, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 AA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 5A 2B 2B 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 97 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 2, turbo 0, mute 0
    Warn:EnergyMeter:fan 02
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 204, idle 0/s, free 94336, MQTT 1(1), bWifi 1, secondsWithNoPing 135, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 AA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 5A 2B 2B 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 97 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 2, turbo 0, mute 0
    Warn:EnergyMeter:fan 02
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 205, idle 0/s, free 94168, MQTT 1(1), bWifi 1, secondsWithNoPing 136, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 AA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 5A 2B 2B 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 97 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 2, turbo 0, mute 0
    Warn:EnergyMeter:fan 02
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 206, idle 0/s, free 94336, MQTT 1(1), bWifi 1, secondsWithNoPing 137, socks 2/21 
    Warn:EnergyMeter:User set mode 0
    Warn:EnergyMeter:build_set_cmd: sizeof(get_cmd_resp_t) = 61, sizeof(m_set_cmd.data) = 35, sizeof(m_set_cmd.raw) = 35
    Info:CMD:[WebApp Cmd 'ACMode 0' Result] OK
    Warn:EnergyMeter:Sending data
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 32 AA 00 80 00 00 00 00 00 00 66 2B 88 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 5A 2B 2B 36 00 00 80 00 00 00 00 EE 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 97 
    Warn:EnergyMeter:Ok we got reply with mode 1, fan 2, turbo 0, mute 0
    Warn:EnergyMeter:fan 02
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 207, idle 0/s, free 94168, MQTT 1(1), bWifi 1, secondsWithNoPing 138, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Info:MAIN:Time 208, idle 0/s, free 94000, MQTT 1(1), bWifi 1, secondsWithNoPing 139, socks 2/21 
    



    Log when the unit is powered off:
    
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 22 AA 00 80 00 00 00 00 00 00 69 23 08 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 00 2C 2B 35 00 00 80 00 00 00 00 ED 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 5D 
    Warn:EnergyMeter:Ok we got reply with mode 0, fan 2, turbo 0, mute 0
    Warn:EnergyMeter:fan 02
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 1076, idle 0/s, free 89800, MQTT 1(1), bWifi 1, secondsWithNoPing 1007, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 22 AA 00 80 00 00 00 00 00 00 69 23 08 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 00 2C 2B 35 00 00 80 00 00 00 00 ED 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 5D 
    Warn:EnergyMeter:Ok we got reply with mode 0, fan 2, turbo 0, mute 0
    Warn:EnergyMeter:fan 02
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 1077, idle 0/s, free 94336, MQTT 1(1), bWifi 1, secondsWithNoPing 1008, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 22 AA 00 80 00 00 00 00 00 00 69 23 08 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 00 2C 2B 35 00 00 80 00 00 00 00 ED 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 5D 
    Warn:EnergyMeter:Ok we got reply with mode 0, fan 2, turbo 0, mute 0
    Warn:EnergyMeter:fan 02
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 1078, idle 0/s, free 94168, MQTT 1(1), bWifi 1, secondsWithNoPing 1009, socks 2/21 
    Warn:EnergyMeter:Initial size: 61
    Warn:EnergyMeter:BB 01 00 04 37 04 00 22 AA 00 80 00 00 00 00 00 00 69 23 08 00 00 00 00 00 00 00 00 00 00 66 FF 42 00 00 2C 2B 35 00 00 80 00 00 00 00 ED 00 00 00 44 40 00 00 00 00 1A 00 00 00 00 5D 
    Warn:EnergyMeter:Ok we got reply with mode 0, fan 2, turbo 0, mute 0
    Warn:EnergyMeter:fan 02
    Warn:EnergyMeter:mode 02
    Info:MAIN:Time 1079, idle 0/s, free 93776, MQTT 1(1), bWifi 1, secondsWithNoPing 1010, socks 2/21 
    
    Helpful post? Buy me a coffee.
  • #56 21551613
    p.kaczmarek2
    Moderator Smart Home
    That's a very good news, thank you for testing. Now I will try to add remaining commands and then we can think about some kind of UI.
    Helpful post? Buy me a coffee.
  • #57 21551637
    dressyspider
    Level 2  
    That sounds great and there is no rush at all. I imagine you have a lot going on.

    Also, I will be on holiday and traveling from Monday through Friday, so I will not be able to run any tests during that time.

    Is there anything else you need from me to complete the remaining commands? Did you still need me to sniff packets?

    Ideally, I would like to control the mini split through MQTT and Home Assistant using a thermostat card.
    Helpful post? Buy me a coffee.
  • #58 21551642
    p.kaczmarek2
    Moderator Smart Home
    Can you make a sorted list of which features are most important to implement now and how they work?


    I'm pushing two new commands - SwingH and SwingV, here is related enumeration (first option is 0, second is 1, etc, I hope you know):
    Code: C / C++
    Log in, to see the code

    So SwingH 2 is move left... whatever it means.
    Helpful post? Buy me a coffee.
  • #59 21551652
    dressyspider
    Level 2  
    List below.

    I’m on my phone and far less efficient with it versus my computer. Please let me know if this is enough info, or if you are wanting to know how the DPs affect the mini split.

    Reference this post: https://www.elektroda.com/rtvforum/topic4119999.html#21536711

    Important DPIDs
    Collected Datapoints via Tuya IoT Platform Website
    DPIDKeyNameTypeUnitRWRange/NotesFunction
    1Power开关booltruePower On/Off
    4mode工作模式enumtruecold, hot, wet, wind, autoOperating Mode (Cool/Heat/Fan/etc.)
    5windspeed风速enumtruestrong, high, mid_high, mid, mid_low, low, mute, autoFan Speed Setting
    20Fault故障告警bitmapfalseFault/Error Report
    23temp_current_f当前温度 ℉valuefalseCurrent Temperature (Fahrenheit)
    24temp_set_f温度设置 ℉valuetrueTarget/Set Temperature (Fahrenheit)
    101pm25PM2.5valuefalseAir Quality Sensor (PM2.5)
    104SN_SW_verSN及软件版本rawfalseSerial Number / Firmware Version
    113up_down_sweep上下扫风enumtrue0, 1, 2, 3Vertical Swing Control
    114left_right_sweep左右扫风enumtrue0, 1, 2, 3, 4, 5, 6, 7Horizontal Swing Control
    122fault2故障报警2bitmapfalseAdditional Fault Reporting


    Edit: I am heading to bed because it’s almost 2:00am where I live. If you need anything else, I will assist when I get up.

    Thank you again for all your hard work!!
    Helpful post? Buy me a coffee.
  • #60 21552151
    divadiow
    Level 35  
    @dressyspider at a guess your MCU is reporting klo4xmr94giahmug to the module and pairing with Tuya with that product key? There are 4 keys in the firmware dump starting at B1B2C.

    Code: Text
    Log in, to see the code

    it seems klo4xmr94giahmug is the only one that matches your dpID list 100%. Just curious.

Topic summary

The discussion centers on flashing and customizing the WiFi module (WBR3 on TCWBRCU1 board) of a Della Optima Series minisplit air conditioner to run OpenBeken firmware for local, cloud-free control. Initial assumptions about the device using TuyaMCU were revised after UART traffic analysis revealed a custom protocol similar to TCL AC units, leading to the development and testing of a dedicated TCL driver in OpenBeken. The user successfully desoldered the WBR3 module, backed up its firmware using appropriate Realtek tools (ltchiptool and AmebaZ2 PG Tool), and flashed OpenBeken firmware. Key datapoints such as power, mode, fan speed, temperature, humidity, and PM2.5 were identified from the Tuya IoT platform, but the device uses a binary packet protocol rather than standard Tuya DPIDs.

The community collaboratively developed and refined the TCL driver, enabling control of power, mode (cool, heat, dry, fan, auto), fan speeds (mapped to Smart Life app presets including auto, mute, mid-low to turbo), swing positions (vertical and horizontal), buzzer (beep) on/off, and display brightness on/off. The driver was integrated with Home Assistant via MQTT with discovery support, allowing control and state feedback. Challenges included correct UART parity settings (even parity), packet parsing, and mapping driver values to Home Assistant entities. The user provided detailed logs, testing results, and UI feedback, leading to improvements in MQTT integration, UI elements for fan speed and swing controls, and bug fixes for state synchronization. The project also discussed future enhancements like better OBK UI integration, thermostat card improvements, and potential DIY thermostat projects using OBK on ESP32 with external sensors.

Overall, the thread documents a successful reverse engineering and firmware replacement effort for the Della minisplit WiFi module, enabling local control with OpenBeken, full MQTT/Home Assistant integration, and detailed community-driven driver development for a non-standard protocol device.
Summary generated by the language model.
ADVERTISEMENT