HOW-TO: Control your Ouman EH-800 heating controller using Home Assistant

Beer always hepls :smiley: My installation is kind of second circulation floor heating for bathroom, sauna and laundry room. Geothermal pump is doing the heating and Ouman is just adjusting the floor heating. So I have to make Thermia pump curve and Ouman curve to dance the same song. Or actually Ouman is doing it by itself. I made this fine tune (and kuivausjakso) thing in the first place from same reason you have, my wife isn’t HA user at all so I stamped a Ikea Zigbee button to laundry room wall. Now she can just push the button after she (or mostly I) takes the laundry out of the machine to dry. Graph showing the on going water temp would be straight line, but I have automation to stop the heatpump when spot prices are too high.


I was trying read Ouman relay state to binary-sensor but it not works. What is wrong?
Sensors are working well.

Hi, I tried looking for register 1004 towards my Ouman

curl http://ip.ip.ip.ip:port/request\?S_1004_85 --output -

request?S_1004_85=Relä inte i funktion;#

and I get this which translates to “Relay not in use”, seems I don’t use this feature so can’t help out unfortunately.

Could you please explain what this function does on register 1004 so I can add it to my registers list on Github, this is a register currently missing in my documentation here Ouman-EH800---Home-Assistant/registers.txt at f5bb9c351799a39a2cea4c6b0943396901c4e1e1 ¡ Belaial/Ouman-EH800---Home-Assistant ¡ GitHub

Hi
Register 1004 is state of the Ouman relay in EXU-800 module. It’s only read register. Answers are “request?S_1004_85=ON” or “request?S_1004_85=OFF”. Request working well, but HA value-template is not working. I was trying that value_template and Paylod_on and Payload_off, but these not working. And extra measurement registers are little different what I was read (237, 283 and 347). These works well. I think extra measurements could be in different registers depending Ouman configuration.

Added info about register 1004, thank you for that.

Regarding the value-template not working it’s harder for me to help there since I don’t use that relay.

Maybe you need to implement a command_state: like in this example of a switch

According to the HA specs I understand that you have to set payloads for ON and OFF states:

- binary_sensor:
    name: relay
    command: curl "{{ states('input_text.ouman_eh800_ip')}}request?S_1004_85" | cut -d "=" -f2 | cut -d ";" -f1
    payload_on: ON
    payload_off: OFF

Hello all!

My brother has a Ouman in his garage for floor heating and we have setup Home Assistant to control heat sources and get inputs from solar panel production and electric prices to make automations :slight_smile:

By following this great thread, we have managed to add temps sensors and basic adjustment of the ouman.

We are trying to make a climate entity in HA for the Ouman where one can adjust set temperaure, feedback of actual temperatur, home/away/off modes. But our limited level of coding competence is unfortunately blocking us from getting this done.

Do you have any suggestions on how to get this done?

1 Like

If anyone needs to calculate lämmitystarveluku S17 in official way (used in Finland), here’s one possible way to do it. Outdoor temp is required information, it can be read from EH-800.

A heads up to people using this, it seems that HA 2024.8.0 breaks our little project, all I get after upgrading now on all my Ouman sensors is,

This entity is no longer being provided by the command_line integration. If the entity is no longer in use, delete it in settings.

I have not yet had time to look into solving it.

EDIT

It seems it’s not the HA 2024.8.0 that broke it, seems my EH800 have suffered a dead Ethernet port… I get no response from ping or anything so…

Can confirm EH-800 working as before, running Core 2024.8.1, operating system 13.0., updated couple days ago.

Yeah, as mentioned in my edit of previous message, dead Ethernet port om my Ouman… 800€ for a new one :frowning_face:

There’s no repair / replacement service? Did you disassemble the failed one, pictures of its internals would be nice :thinking:

(side note before my reply, sorted it via my insurance company, they where super helpful, more than the Ouman broke in a thunderstorm)

There’s no repair / replacement service?

Not sure, have not checked into that.

Did you disassemble the failed one, pictures of its internals would be nice

Only as far as I needed to see the PCB with the IC that I presume is the one that controls the Ethernet port.

Since all was sorted via insurance I did not bother more than this, also I needed to turn in the broken one so, also I don’t own a hot air soldering station so would have been a hassle to try and replace the IC.

I could not see any burnt areas on the PCB, so a good bet would have been to replace that SMSC 8700c-AEZG.

Skjermbilde 2024-09-28 132111

Adding Ouman EH800 Floor Heating Controller as a Climate Entity in Home Assistant

I’ve integrated the Ouman EH800 floor heating controller into Home Assistant (HA) as a climate entity. If you’re looking to achieve the same, here’s a step-by-step guide on how I did it.

Overview

Rather than adjusting the heat curve directly on the Ouman, I set all three curve values to the same target and manage this target via Home Assistant. This allows for seamless control of the heating curve from HA.

Step 1: Create an Input Number Helper

First, create an input number helper to set the target temperature in configuration.yaml:

input_number:
  heating_curve:
    name: Heating Curve
    min: 4
    max: 30
    step: 1
    unit_of_measurement: "°C"
    icon: mdi:thermometer

Step 2: Control the Heating Curves via Shell Commands

Next, add shell commands to set the three heating curve setpoints on the Ouman device based on the input number helper:

shell_command:
  ouman_logon: 'curl "http://192.168.1.134:80/login?uid=xxxxxx;pwd=yyyyyy;" > /dev/null'
  ouman_set_heating_curve: >
    curl "http://192.168.1.134:80/update?S_61_85={{ states('input_number.heating_curve') }};" ; 
    curl "http://192.168.1.134:80/update?S_63_85={{ states('input_number.heating_curve') }};" ; 
    curl "http://192.168.1.134:80/update?S_65_85={{ states('input_number.heating_curve') }};"

Step 3: Add Sensors for Monitoring

I also added sensors to monitor the current floor temperature and the setpoint from the Ouman controller:

command_line:
  - sensor:
      name: Ouman EH800 - Floor Temperature
      command: 'curl "http://192.168.1.134:80/request?S_259_85" | cut -d '';'' -f 1 | cut -b 18-'
      unit_of_measurement: "°C"
      unique_id: sensor.ouman_eh800_temperatur_golv

  - sensor:
      name: Ouman EH800 - Setpoint Temperature
      command: 'curl "http://192.168.1.134:80/request?S_275_85" | cut -d '';'' -f 1 | cut -b 18-'
      unit_of_measurement: "°C"
      unique_id: sensor.ouman_eh800_temperatur_setpoint

Step 4: Create the Climate Entity

For the climate entity, I used the hass-template-climate integration. This lets you build a custom climate entity from any sensor data. Here’s the configuration I used for the Ouman EH800:

climate:
  - platform: climate_template
    name: Ouman EH800 Thermostat
    unique_id: ouman_eh800_thermostat
    modes:
      - "heat"
    min_temp: 8
    max_temp: 30
    target_temperature_template: "{{ states('sensor.ouman_eh800_temperatur_setpoint') | float }}"
    set_temperature:
      service: input_number.set_value
      data:
        entity_id: input_number.heating_curve
        value: "{{ temperature }}"
    current_temperature_template: "{{ states('sensor.ouman_eh800_temperatur_golv') | float }}"
    availability_template: "{{ states('sensor.ouman_eh800_temperatur_radiator') not in ['unknown', 'unavailable'] }}"

Step 5: Automation to Ensure Setpoint Update

Occasionally, the setpoint doesn’t update immediately for reasons I haven’t fully identified. To ensure the setpoint is applied correctly, I created an automation that checks every 30 seconds after updating and resends the command if necessary:

alias: Ensure Ouman Setpoint Update
description: ""
trigger:
  - platform: state
    entity_id: input_number.heating_curve
action:
  - wait_template: >
      {{ states('climate.ouman_eh800_thermostat') | float == states('input_number.heating_curve') | float }}
    timeout: "00:00:30"
    continue_on_timeout: true
  - condition: template
    value_template: >
      {{ states('climate.ouman_eh800_thermostat') | float != states('input_number.heating_curve') | float }}
  - data:
      entity_id: climate.ouman_eh800_thermostat
      temperature: "{{ states('input_number.heating_curve') | float }}"
    service: climate.set_temperature

This setup allows you to control your Ouman EH800 floor heating system through Home Assistant. The target temperature is managed via Home Assistant, while the Ouman unit takes care of the actual heating regulation in automatic mode.

2 Likes

@ugglas, amazing work! :star_struck:

1 Like