Opentherm - modbus gateway



  • Does enyone have a "best practice"with the opentherm - modbus gateway?

    I'm trying to setup a HVAC controller with this gateway, the boiler will be controlled from that HVAC controller by modbus.

    I get some values (pressure, CHW return and supply) but the boiler won't start on enable the CHW bit and just send a value to the setpoint register.

    How did you configure your registers and control application?

    I already am in contact with the guys of support, but i'm wondering how others use the device.

    We're using the device in our own building. We only need some IO hardware to control the ventilation. Al room thermostats ar on BACnet MS/TP, boiler on modbus (if the gateway will work :wink: ), weather data from a XML webservice and control radiator valves by enocean. Almost forget: we will integrate our KNX lightning by a BACnet IP gateway.


  • administrators

    There are a few things that have to be done in order to get get the boiler starting:

    • set coil 1 to 1 (easier to debug, then you can start with the direct access mode if you want to)
    • Set bits CH enable (channel 1 - eg hot water for heating) and DHW (domestic hot water) to 1
    • Set control setpoint to some value - eg 50

    You should also check the status registers:

    • 2000 - 2027 which contains information about communication between the gateway and the room thermostat
    • 2100 - 2127 which contains information about communication between the gateway and the boiler

    Check that the counters of sent and received messages are increasing and also check the noreply or and errors counters. The best would be to post the values of the 2100 registers here so we can take a look at it.



  • Finally i got some time to do some tests.
    Short story:
    It's working fine now.

    Long story:
    You asked for the 21xx registers:
    0_1504864189633_Unipi statisticalPNG.PNG

    First of all (i knew already, thats how i get the right values out of the register as written in my earlier post.) the register mapping is the adres in the documentation +1. (register 0 = register 1 etc). No problem, We've seen this before on other devices).

    Then i started to tweak some stuff on our side of the MODbus.
    First of all, by default our values are send by change of value (COV).
    We can configure the bindings to send the message periodically, thats what i did, to prevent troubles when the Unipi gets a power or com loss.

    The setpoint signal was already fine, send a value, and the answer was the same value.

    The problem was the "enable CHW" point on register 0, HB1. I send a "true"value, but te answer was "false".
    I tweaked my registers. with read codes etc, but nothing worked.
    The mistake i made, was, i used a 16 bit register with a bitmask...
    We have also a "multibit register", that's the type i need to use.
    Now i can control the boiler exactly as i want.

    Thanks for the support.


  • administrators

    @FerryvanY So everything works well now? Could you please explain, what have you changed in order to make it work? What function did you use to write to the register or how did the data look like before and after?



  • This post is deleted!


  • @tomas_hora
    First of all i modified my bindings from the program in my controller to the modbus points.
    Normally they write to modbus once per 10 seconds, only when the value is changed.
    Now the the value will be written to the bus once per 10 secconds when changed, or once per minute when not changed.
    0_1505202217896_upload-c1935bcb-6bf4-4cf8-9528-c152357ecfb1

    I did this, to be shure that the configuration parameters will be set when the Unipi has a powerloss.

    Then the registers i use:
    0_1505202564786_upload-5cf6fdb8-0b7e-4397-b35a-705438e12f3b
    As you can see, i used a gain on the input values (CHW temperatures), it's 0,004. A strange value, but it works.

    Register 0 is a multibit register, 16bit with a bitmask doesn't work.
    In that register i set CH enable (works the same as a hardwired release, pump will start and when supply temperature is lower than setpoint, the burner will start).
    High bit 0 (Bit 8 ) is connected to the release off the boiler in my application.

    The register type i choose (16bit unsigned, using bitmask) was the reason it didn't work.
    When we use bitmask, we need to make a modbus point for every bit, and check the right bit in the bitmask to use a specific bit.

    The mulitbit registers is 1 point where we can conect 16 values, 1 to each bit, see image below.
    0_1505203010898_upload-565d3b20-db05-4edc-b040-b977774be53b

    The blue arrows are statuses we read from this register to use in the visualization, the green arrows are written to the register to control the boiler.

    Then te result in the BMS:

    0_1505203165417_upload-7ec054ff-ce85-4b73-8763-71df92313fc9



  • Little update:

    We had still some work to do on our heatingplant, we had some flow issues to fix to let the boiler do a good job.
    After we did this, we noticed that the boiler keeps burning on low flame. Even if the setpoint was high, the boiler stays at low flame.

    We found out that we need to write a value at this register as well:
    14 maximum relative modulation level setting
    By default all values are 0, even this one.

    When you give customers some advice about controlling their boiler with unipi, you should tell them this: ;)

    When a boiler needs to be controlled at setpoint:

    • write modulating supply setpoint at register 1
    • write fixed setpoint of maximum load of the boiler on register 14 (100%)

    When a boiler needs to be controlled at cappacity:

    • write fixed supply setpoint at register 1 (90°)
    • Write modulating value of requested load setpoint on register 14