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

shell_command:
  ouman_logon: 'curl "http://192.168.1.211:8090/login?uid=mysecretuserid;pwd=mytopsecretpassword;" > /dev/null'

This seems to work for login, no errors on user interface or logs. I have automation, that runs ouman_logon every five minutes. Rest of the changes were pretty much same Belaial has made, that is, formatting, and since it’s split config, I have:

command_line: !include command_line.yaml

in configuration.yaml and sensors and switches in command_line.yaml look like this now:

- switch:
    name: eh800ltp
    command_on: >
      curl "http://192.168.1.211:8090/update?S_135_85=1;" --output /config/oumanltp.txt
    command_off: >
      curl "http://192.168.1.211:8090/update?S_135_85=0;" --output /config/oumanltp.txt
      
- sensor:
    name: ouman_ltp_kysely
    command: 'curl "http://192.168.1.211:8090/request?S_230_85;" --output /config/oumanltp.txt'

- sensor:
    name: ouman_menovesi_kierto
    command: 'curl "http://192.168.1.211:8090/request?S_259_85" --output /config/oumankierto.txt'

- sensor:
    name: ouman_menovesi_pyynto
    command: 'curl "http://192.168.1.211:8090/request?S_275_85" --output /config/oumanpyynto.txt'

- sensor:
    name: Oumankierto
    command: 'cut -b 18-21 /config/oumankierto.txt'
    unit_of_measurement: "°C"

- sensor:
    name: Oumanpyynto
    command: 'cut -b 18-21 /config/oumanpyynto.txt'
    unit_of_measurement: "°C"
  
- binary_sensor:
    name: Oumanltptila
    command: 'cut -b 17 /config/oumanltp.txt'
    payload_on: ON
    payload_off: OFF

I know this isn’t as streamlined solution as possible, but it works well, no more update reminders. Next thing, I have to clean this using *nix pipes ( | ) :laughing:

Hi @honkkkis,

Your post let me think about my needs (Generic Temperature setting point · home-assistant/frontend · Discussion #17028 · GitHub).
However it doesn’t answer it :sweat_smile:

1 Like

Done some preliminary testing with request codes sending them via browser URL to Ouman, like e.g.

http://192.168.1.8/request?S_227_85

…to get the outside temp in this case.

The format very much look like GET, however Ouman responds by offering a file to be downloaded??? Why is this?

The file contains the right information, though:

request?S_227_85=13.3;

@Hyacinthe,
I guess this would be next step :grin: I have floor heating and as such, system doesn’t really need room thermostats. If you have traditional water-radiators, more fine-grained adujstment would be useful. Ouman itself offers all the needed commands and responses. There is no technological barrier for example, adjusting heating curve for EH800 from Home Assistant.

Ouman seems to be such popular device (even outside Finland), that it’s worth studying some more. My current project is creating power meter for my Jäspi Econature 40 wood fired heater. It will work with other heaters too, and it’s based on M5Stack Core2 ESP32-unit. When it’s ready, time to do more Ouman.

@mekanics,
it might be possible to parse responses in the fly, but my *nix-skills are too limited. It would be definitely more elegant way of handling responses. IIRC, you can request / set multiple variables at once, which makes number of separate files smaller.

@honkkkis thanks for the initial setup for this!

I have made some additional call for the Ouman to be able to plot the temperature graph. Here is the bit for that on command_line.yaml file:

# Gathering heating curve data

- sensor:

      name: Ouman EH800 - Heating curve low req

      command: 'curl "http://ip_address_ouman_eh800:port/request?S_67_85" | cut -d '';'' -f 1 | cut -b 17-'

      unit_of_measurement: "°C"

      unique_id: sensor.ouman_eh800_heat_crv_low_req

- sensor:

      name: Ouman EH800 - Heating curve low req 2

      command: 'curl "http://ip_address_ouman_eh800:port/request?S_69_85" | cut -d '';'' -f 1 | cut -b 17-'

      unit_of_measurement: "°C"

      unique_id: sensor.ouman_eh800_heat_crv_low_2_req

- sensor:

      name: Ouman EH800 - Heating curve mid req

      command: 'curl "http://ip_address_ouman_eh800:port/request?S_71_85" | cut -d '';'' -f 1 | cut -b 17-'

      unit_of_measurement: "°C"

      unique_id: sensor.ouman_eh800_heat_crv_mid_req

- sensor:

      name: Ouman EH800 - Heating curve high req 2

      command: 'curl "http://ip_address_ouman_eh800:port/request?S_73_85" | cut -d '';'' -f 1 | cut -b 17-'

      unit_of_measurement: "°C"

      unique_id: sensor.ouman_eh800_heat_crv_high_2_req

- sensor:

      name: Ouman EH800 - Heating curve high req

      command: 'curl "http://ip_address_ouman_eh800:port/request?S_75_85" | cut -d '';'' -f 1 | cut -b 17-'

      unit_of_measurement: "°C"

      unique_id: sensor.ouman_eh800_heat_crv_high_req

- sensor:

      name: Ouman EH800 - Minimum water temperature

      command: 'curl "http://ip_address_ouman_eh800:port/request?S_54_85" | cut -d '';'' -f 1 | cut -b 17-'

      unit_of_measurement: "°C"

      unique_id: sensor.ouman_eh800_minimum_water_temperature

- sensor:

      name: Ouman EH800 - Maximum water temperature

      command: 'curl "http://ip_address_ouman_eh800:port/request?S_55_85" | cut -d '';'' -f 1 | cut -b 17-'

      unit_of_measurement: "°C"

      unique_id: sensor.ouman_eh800_maximum_water_temperature

This then lets me to plot the graph using plotly:

Here is the card code:

type: custom:plotly-graph
layout:
  xaxis:
    type: number
    showlegend: false
  yaxis:
    fixedrange: true
    range:
      - 0
      - 60
entities:
  - entity: ''
    x:
      - -20
      - -10
      - 0
      - 10
      - 20
    'y':
      - $ex hass.states["sensor.ouman_eh800_heating_curve_low_req"].state
      - $ex hass.states["sensor.ouman_eh800_heating_curve_low_req_2"].state
      - $ex hass.states["sensor.ouman_eh800_heating_curve_mid_req"].state
      - $ex hass.states["sensor.ouman_eh800_heating_curve_high_req_2"].state
      - $ex hass.states["sensor.ouman_eh800_heating_curve_high_req"].state
    line:
      shape: spline
raw_plotly_config: true

As you see, I have configured the Ouman EH-800 to use 5-point adjustment. Also the graph is ‘‘inverted’’, but that can be adjusted according to one’s preferences.

My goal would be to make the Ouman to adjust for forecast info, here are couple of articles how to do it on generally any weather based system:
https://www.sciencedirect.com/science/article/pii/S0959652622012227
https://www.sciencedirect.com/science/article/abs/pii/S0378778821000505

I’m planning to use the adjusting algorithm by changing the adjustable room-temperature offset value on register:

S_134_85 Room temp fine adjustment

Also it would be great to make the Ouman Graph interactive, I think that’s doable by some default integrations. With this, you wouldn’t have to go to the device to adjust, and can see the loop working remotely. I’m also polling data from the valve position etc.

1 Like

Nice work @Atomicsickness!

I was dong some comparison on energy use between years and found that degree day-measurement can be implemented quite easily in Home Assistant:
Track your degree days using HA and benchmark your gas consumption - Share your Projects! - Home Assistant Community (home-assistant.io)

By using Ouman collected data and having energy consumption numbers, I think one could collect easily all the data needed for those weather based adjustments, as degee day is indicator for “heating need”. In previous example they are using gas measured in cubic meters, but it can be adapted for whatever energy source.

Last winter I did almost all heating with electricity and my utility company provides hourly temp with consumption in their site in Excel form, using it I can calculate heat losses quite accurately. If utility company provides that kind of data, it will help making better prediction (and saves one year for collecting data!)

1 Like

Did you ever find out the register for the inside temp sensor?

I just ordered this and waiting for it to arrive later this week.

EDIT

Used Google translate now on a previous post, “S_261_85: L1 Huonelämpötila” I guess that might be the inside temp sensor register, will test it once I have the sensor installed.

Yes, S_261_85 register is indoor temperature.

Ok, thanks for the reply.
Should have this sensor installed before the weekend hopefully :+1:

Did you buy Ouman made sensor, or are you using just common NTC-10 resistor for measurement?

Ouman made, their sensor called “TMR-SP”

The WAF (Wife acceptance factor - Wikipedia) needed to be high :slight_smile: therefore a Ouman made sensor that looks nice, also nice to have a quick way to adjust the heat right on the sensor.

Still waiting for it to arrive.

So the TMR-SP is finally installed and everything is working except that I can’t have the TMR-SP to control the V2 circuit which is my floor heating… reading the manual it seems to be “hard coded” to only control V1 when using a TMR-SP…

So all I can do is to switch places on the Ouman EH800 and the EXP-800 and reconfigured them to get this working…
(I have both since I have radiators and floor heating in my house)

Completely baffled V2 can’t be controlled by TMR-SP…

EDIT

Could have mentioned that

V1 = The Ouman EH-800 itself, mounted on the radiator circuit (floor 2 in the house)
V2 = EXP-800, mounted on the floor heating circuit (floor 1 in the house)

So yeah, I guess I will be switching around the Ouman / EXP-800 tonight…

(Seems V1/V2 is called H1/H2 in English manual and L1/L2 in Finnish manual)
I have my unit set to Swedish so that’s why I have V1/V2, in case someone got confused :slight_smile:

So, now I have changed around the EH-800 and the EXP-800… was not that hard but changing all the settings back and making the motors change directions so the vales open / closes correctly was more of a pain when the manuals don’t really have all the info…

Anyway, TMR-SP works great, logging it’s values from the following ID’s

S_261_85 - Indoor temperature
S_274_85 - Value of the potentiometer

1 Like

Hi
I use three extra analog input channel in my Ouman EH800. How can I read these variables to home assistant?

@Mikkeli, are those inputs connected using EXU-800 or EXP-800? EXU and EXP seem to be (almost) same device. Or wired to EH-800?

According to lampopumput.info, registers are:

  • measurement 3, register S_234_85
  • measurement 4, register S_235_85
  • measurement 5, register S_238_85

There is also register for EXU-relay, it’s register S_1004_85 (read only)

However, another source in lampopumput.info suggests measurements 3 and 4 are

  • measurement 3, register S_238_85
  • measurement 4, register S_283_85
    Information on this is contradicting and would be good, if someone can check what those five registers actually have in fully furnished system with EXU.

About EXU/EXP measurements, Ouman EXU/EXP deployment guide states (page 7), that

  • measurement 5 is heating circuit (L2 / V2 depending on language settings) supply water or other temp signal
  • measurement 6 contact information (home/away switch or alarm)

Measurement channel numbering per EH-800 manual:

  • channels 3 and 4 are internal to EH-800 base unit
  • channel 5 is available with EXU

Edit: EXP is EXU with factory equipped shunt?
Edit: more registers / readibility
Edit: measurements 5 and 6 description from manual
Edit: channel numbering scheme from Ouman EH-800 manuals

I have EXU800.

command: ‘curl “http://192.168.0.98:60098/request?S_238_85” | cut -d “:” -f 2 | cut -d “;” -f 1 | cut -b 18-’
Käytin tätä saman tyylistä commandia, kuin ulkolämpötilan mittaukseen. Mutta tämä antaa vain 0,0 ulos. Onko näiden exu mittausten sanoma eri tyyppinen, jolloin nuo leikkaukset pitäisi muuttaa?

Kannattaa tarkastaa, koska cut-komennolle ilmoitetaan tässä tapauksessa tiedostosta luettavien merkkien “x-koordinaatti”, eli monesko/mitkä merkit, ja mittausten 3-5 rekisterien nimet ovat 8 merkkiä pitkiä, kun taas osassa esimerkeissä rekisterin nimen pituus on 7 merkkiä ja vastauksessa on aina alussa rekisterin nimi. Cut-komennon käytöstä Linux cut Command Explained with 6 Examples (phoenixnap.com)

Kannattaa tietysti tarkastaa tiedostosta, mitä siellä on sisältönä / ohjata tarvittaessa vianhakuvaiheessa tiedostoon suoran unix-putkituksen sijasta. Tällöin saa ainakin varmuuden, mitä Ouman antaa ulos ja tuleeko nollat sieltä, vai Home Assistantista. Ouman antaa ilmeisesti nollaa (0.0) ulos numeerisille mittauksille, joissa ei ole anturia/tilatietoa.

Jos voit tänne postaa, mitä tietoa mittauskanavat antoivat?


Some discussion about measurements 3-5 and cut-command, mikkeli is getting output 0,0 (either from Ouman or Home Assistant), asked him to provide us with raw output from file/command line.

@Belaial, you have EXU-800, are you reading additional measurements (channel 5 and / or 6) from it, can you confirm its output? I have no EXU, as my Ouman is attached to simple single circuit floor heating.

Yes I am reading values from the EXU-800 unit (and values I guess are related to it once connected), I hope these are the correct ones…

(from my configuration.yaml)

  - sensor:
        name: Ouman EH800 - Radiator Temperatur
        command: 'curl "http://ip.ip.ip.ip:port/request?S_293_85" | cut -d '';'' -f 1 | cut -b 18-'
        unit_of_measurement: "°C"
        unique_id: sensor.ouman_eh800_temperatur_radiator
        
  - sensor:
        name: Ouman EH800 - Temperatur Radiator Finjustering
        command: 'curl "http://ip.ip.ip.ip:port/request?S_221_85" | cut -d '';'' -f 1 | cut -b 18-'
        unit_of_measurement: "°C"
        unique_id: sensor.ouman_eh800_temperatur_radiator_finjustering

  - sensor:
        name: Ouman EH800 - Beräknad Temperatur Radiator
        command: 'curl "http://ip.ip.ip.ip:port/request?S_310_85" | cut -d '';'' -f 1 | cut -b 18-'
        unit_of_measurement: "°C"
        unique_id: sensor.ouman_eh800_beraknad_temperatur_radiator

  - sensor:
        name: Ouman EH800 - Radiator Ventil
        command: 'curl "http://ip.ip.ip.ip:port/request?S_306_85" | cut -d '';'' -f 1 | cut -b 18-'
        unit_of_measurement: "%"
        unique_id: sensor.ouman_eh800_radiator_ventil

I just changed around some in my config when I switched place on the unit’s to install the room sensor… so if they seem wrong let me know and I will check again.

There are some Swedish names on the sensors but a rough translation is

name: Ouman EH800 - Radiator Temperatur - Temperature going out

name: Ouman EH800 - Temperatur Radiator Finjustering - Adjustment (if you want to change the room temperature, not sure how ti explain it)

name: Ouman EH800 - Beräknad Temperatur Radiator - Calculated temperature (what it aims to provide so to speak)

name: Ouman EH800 - Radiator Ventil - Value of the valve in % (open / closed)

EDIT

Can add that my EH800 controls the floor heating and the EXU controls my radiators.

1 Like