HERMES ELECTRONIC WR3223 ventilation controller ESP32

Great!

Since I have tado room thermostats in the living room, your suggestions would make absolute sense!

Would you mind sharing your automations/scenes?

Hey Everybody, I am also running a Schwörer WGT with WR3223 as command unit. However I already have the USB-Adapter from Hermes Elektronik. My idea is to connect the RPi (that is 2 meter away from the WR3223) and running my HA instance via USB with this connector. Can I install your solution directly on Homeassistant instead of an esp and use by usb interface for the connection?

Hi Pelzbaron,
this solution/code can only be applied to an esp und is written to work via the serial (UART) interface with the WR3223. It needs to be compiled via espHome.
Therefore you can not install this directly into homeassistant. But the esp connected with the WR3223 can be used by HomeAssistant via espHome like a normal device/entity.

Hi Schmurgel, in the meantime i was able to do the Job with Node-Red directly from HA. It was very straight forward. So reading values is done.

Next step is to write updates to the wr3223. For me this 20 seconds parameter wipe is not clear. Which Parameters habe to be resend every 20 seconds? Have you detached the old Panel physically?

Hello Pelzbaron,
that is interesting. What do you mean by “directly with Node-Red”? So you don’t use any ESP? How do you connect to the WR3223? Via the serial port?

I removed the panel as it overrides your values. You must update the SW command at least every 20 seconds. It is bit wise encoded and contains several parameters at once.

Most of my knowledge about the wr3223 interface comes from here:
OpenHab Git-Repo
OpenHab Forum

Hey Schmurgel, yes I bought an Serial Adapter from Hermes directly. Unfortunately the interface parameter list seems not to be complete or the right one for me as I am facing strange responses.

For example, when I try to execute ST (similar for MD) your bitmask for the state is


OFF =                   0b00000000,
HEAT_PUMP_OFF =         0b00000001,
VENT_LEVEL_1 =          0b00000110,
VENT_LEVEL_2 =          0b00000010,
VENT_LEVEL_3 =          0b00000100,
ADDITIONAL_HEATING_OFF= 0b00001000,
VENT_LEVEL_0 =          0b00010000,            
COOLING_OFF =           0b00100000,
     
STATUS_MASK_SW =           0b00111111

However in the response from WR3223 for example LS seems not to be reflected.

217 11011001 LS 3 Cool on, HP on Sommer
249 11111001 LS 2 Cool off, HP off Sommer
249 11111001 LS 3 Cool off, HP off Sommer
217 11011001 LS 2 Cool off, HP on Sommer

Am I doing intrerpreting something wrong? Which software version dies your 3223 have?

Hey guys,

Now it’s getting warmer, I tried to enable “Cooling” in the Summer-Mode. Although it seems to work, the switch just goes back to “off” after 1 sec.

Can you confirm this behaviour?

ezgif-5-0a0fe40f81

I can see that you also did not know where to read the current state of cooling.

// evtl. aus der Wärmepumpe, wenn sommermodus aktiv ist?!
    bool Get_Kuehlung_On()
    {
      return false; // statusHolder->getCoolingOnStatus();
    }
    
    bool Set_Kuehlung_On(bool pOn)
    {
      // den Status können wir derzeit nicht ermitteln
      // // wenn der Status schon stimmt, dann brauchen wir nicht noch einmal zu setzen
      // if(statusHolder->getCoolingOnStatus() == pOn)
      //   return true;


      statusHolder->setCoolingOn(pOn);
      char const* data = std::to_string((int)statusHolder->getSwStatus()).c_str();
      if(connector->write(StatusWriteCmd, data))
        return true;
      
      statusHolder->setCoolingOn(!pOn);
      return false;
    }

Maybe now you can find the values better :slight_smile:
Would appreciate!

hi, same here. If I switch to the ESP32 then th esystem even starts the cooling prozess without the switch.

Hey, sorry for the late reply.
Unfortunately I don’t have much time for my hobbies at the moment :frown:

@Pelzbaron Did you get any documentation for the official adapter? That would be helpful. Or at least a link to what exactly you bought.

I tested the cooling function with the original control panel. Unfortunately, the status is not reflected here even with active cooling. I got the information about the coding from the OpenHAB implementation. Unfortunately I don’t have any really suitable documentation for it :frowning:

The problem is that the WR3223 doesn’t just come up with the info and then you can see what it’s doing. He only gives information on request. But you have to know what questions to ask. And unfortunately I don’t have this information.

But I don’t want to give up either :slight_smile:

I did a small test and at least found the problem with the atctivation. The current implementation does not reflect the cooling bit at all.
When I activate the cooling, it seems that the heatpump needs to be activated as well.

SW Wert Kühlung Lufstufe Binary
43 2 101011
45 3 101101
12 x 3 001100

As you can see, the bit for HEAT_PUMP_OFF is missing when we activated the cooling. So we need to set heatpump active at the same time we activate the cooling.

I checked the Ta Command values as well but summermode with cooling on has a value of 39 and wintermode with hp on as well. So the question is, how to tertermine that the cooling is on.

The problem is, you can set cooling as active without the heatpump. I do not know whether this is a permissible or sensible constellation.

I first adapt the code so that the flag for the cooling is set and deliver the status of the SW specifically for the cooling flag. When I activate and deactivate the cooling, I also automatically activate the heat pump. However, the heat pump can still be switched off separately. The cooling remains active.
Since the mode isn’t part of the SW Commando, I’m a little screwed here.

1 Like

I’m sure you will be able to find a solution soon :slight_smile:
Thanks for your effort on this!

I updated the code: schmurgel-tg/esphome (github.com)

The cooling should now work. I implemented it so that the heat pump is activated and deactivated at the same time.

A note on this: The heat pump can be deactivated individually while the cooling is active. I think this is an invalid state, but the wr3223 accepts it. But I suspect that the cooling is not active then. Feel free to give me feedback if you test it.

@Pelzbaron When I have a little more time I’ll take a look at the ST command values ​​as well. I am currently not using them. Maybe you have some documents for that too :slight_smile:

Best regards to all

@schmurgel I sent you a pm, regarding the cooling function. Actually this makes sense, as the cooling mode is just activated heat pump on reverse. As you solution is quite complex i wonder if I can succeed with node red. Maybe I should head for ESP-solution as well. What would I need to put on my shopping list in order to have all what I need for your setup?

You just need an ESP32 and some jumper cables :wink:

Hallo,

we have exacte the same WS3223. Wich software must be installed on the ESP32 ?
Is it ESPHome?

Does the control panel have to be removed?

Hey Schmurgel, i bought an ESP and managed to integrate it in home assistant with the base image. However when I integrate your code into the yaml and upload the header files everything seems to be good, and compiling works find. But HomeAssistant is no more able to connect to this ESP. In th config log I see the following error. Any ideas? Once I remove your code, everything is fine again.

INFO ESPHome 2023.8.2
INFO Reading configuration /config/esphome/esphome-web-287c88.yaml...
INFO Generating C++ source...
INFO Compiling app...
Processing esphome-web-287c88 (board: esp32dev; framework: arduino; platform: platformio/[email protected])
--------------------------------------------------------------------------------
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
 - toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
Dependency Graph
|-- AsyncTCP-esphome @ 1.2.2
|-- EEPROM @ 2.0.0
|-- WiFi @ 2.0.0
|-- FS @ 2.0.0
|-- Update @ 2.0.0
|-- ESPAsyncWebServer-esphome @ 2.1.0
|-- DNSServer @ 2.0.0
|-- ESPmDNS @ 2.0.0
|-- noise-c @ 0.1.4
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/api/api_connection.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/api/api_frame_helper.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/api/api_pb2.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/api/api_pb2_service.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/api/api_server.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/api/list_entities.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/api/proto.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/api/subscribe_state.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/api/user_services.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/binary_sensor/automation.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/binary_sensor/binary_sensor.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/binary_sensor/filter.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/button/button.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/captive_portal/captive_portal.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/custom/binary_sensor/custom_binary_sensor.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/custom/sensor/custom_sensor.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/custom/text_sensor/custom_text_sensor.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/esp32/gpio.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/esp32/preferences.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/logger/logger.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/md5/md5.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/mdns/mdns_component.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/mdns/mdns_esp32.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/mdns/mdns_esp8266.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/mdns/mdns_host.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/mdns/mdns_rp2040.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/network/util.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/number/automation.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/number/number.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/number/number_call.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/number/number_traits.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/ota/ota_backend_arduino_esp32.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/ota/ota_backend_arduino_esp8266.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/ota/ota_backend_arduino_rp2040.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/ota/ota_backend_esp_idf.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/ota/ota_component.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/select/select.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/select/select_call.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/sensor/automation.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/sensor/filter.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/sensor/sensor.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/socket/bsd_sockets_impl.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/socket/lwip_raw_tcp_impl.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/socket/socket.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/switch/automation.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/switch/switch.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/template/number/template_number.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/template/select/template_select.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/template/switch/template_switch.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/text_sensor/filter.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/text_sensor/text_sensor.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/uart/uart.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/uart/uart_component.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/uart/uart_component_esp32_arduino.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/uart/uart_component_esp8266.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/uart/uart_component_esp_idf.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/uart/uart_component_rp2040.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/uart/uart_debugger.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/web_server_base/web_server_base.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/wifi/wifi_component.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/wifi/wifi_component_esp32_arduino.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/wifi/wifi_component_esp8266.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/wifi/wifi_component_esp_idf.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/components/wifi/wifi_component_pico_w.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/core/application.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/core/component.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/core/component_iterator.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/core/controller.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/core/entity_base.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/core/helpers.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/core/log.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/core/scheduler.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/core/string_ref.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/esphome/core/util.cpp.o
Compiling /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/src/main.cpp.o
Linking /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/firmware.elf
RAM:   [=         ]  14.3% (used 46720 bytes from 327680 bytes)
Flash: [=======   ]  68.7% (used 1260457 bytes from 1835008 bytes)
Building /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/firmware.bin
Creating esp32 image...
Successfully created esp32 image.
esp32_create_combined_bin(["/data/esphome-web-287c88/.pioenvs/esphome-web-287c88/firmware.bin"], ["/data/esphome-web-287c88/.pioenvs/esphome-web-287c88/firmware.elf"])
Wrote 0x145230 bytes to file /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/firmware-factory.bin, ready to flash to offset 0x0
========================= [SUCCESS] Took 77.58 seconds =========================
INFO Successfully compiled program.
INFO Connecting to 192.168.178.153
INFO Uploading /data/esphome-web-287c88/.pioenvs/esphome-web-287c88/firmware.bin (1266224 bytes)
Uploading: [============================================================] 100% Done...

INFO Waiting for result...
INFO OTA successful
INFO Successfully uploaded program.
INFO Starting log output from 192.168.178.153 using esphome API
WARNING Can't connect to ESPHome API for 192.168.178.153: Timeout while connecting to ('192.168.178.153', 6053) (SocketAPIError)
INFO Trying to connect to 192.168.178.153 in the background

Hi Pelzbaron, i have the same error. What dev Board do sou use? I think the problem is that the new Boadrs from az.delivery not yet 100% esphome compatible. In the picture from the git the esp ist not version is not read able i tryed it with ESP32S NodeMCU WLAN WiFi Dev Kit C mit CH340 kompatibel mit Arduino (ESP32-WROOM-32 )and with this one ESP32 Dev Kit C V4 NodeMCU WLAN WiFi Development Board (ESP32S).

I think it would helpful, when the picture from @schmurgel could be sharper. @schmurgel thank for you top work!

Hey, this is a pic from my ESP32.

THX @Pelzbaron for the Info. This NMCU-ESP32 has just 1 UART: https://www.berrybase.de/Pixelpdfdata/Articlepdf/id/136/onumber/NMCU-ESP32 Think that is the problem.
@booze wich board do you have and where could we buy it?

Hi, I’ve got it working using this board: ESP32 Dev Kit C V4 NodeMCU WLAN WiFi Development Board

Now I’m working on the automations and wanted to ask, if somebody could post, how they’ve made it for inspiration what can be done.

Thanks a lot