BAXI TXM / RXM 10c OpenTherm thermostat - HA integration

Hello again,

I’ve been running both implementations for one week now and have the following observations. My goal would be to merge both implementations into one integration easy to install and with configuration options, and working well day after day without any maintenance and monitoring.

Both implementations run well after configuration. vipial1’s integration installs like a breeze and is very straightforward but has limited info showing. Domaray’s integration is much more painful and tricky to install and configure, with some things having to be changed especially the lovelace code (at least for me).

After install, Domaray’s code is running smooth and all works great. From there it’s easy to add things, like I extracted the error code in an extra variable in node-red. On the contrary vipial1’s implementation is stopping working after a few refresh and throwing exceptions in the log.

I end up with a discrepancy between the two displays:

I’m analysing the code at the moment and do not see real issues. One issue is that it tries to retrieve the consumption and it fails, as was mentioned in the chat above. The only other issue I can think of is that the integration “looses” the pairing token at a certain point and then connection is in error. This did not happen with node-red implementation as the token is hardcoded in the relevant nodes.
Or maybe the Baxi server bans the token as it refreshes too much?

Here are some sample logs:

Here is the general connection issue:

and here is the error specific to the consumption request:

For completeness my boiler is a Baxi Neodens Plus Eco 33kW running on propan gas. It is linked to an ITM-10C opentherm gateway (a.k.a. “GTW-16”) and a Baxi Connect TXM thermostat. It also does hot water.

I couldn’t understand how to enable/disable features in the integration to avoid the error on consumption.

Below are the capabilities reported on my system. So no “energyConsumptionUri” reported, although I have the consumption available in the app (which is very important as I run on gas bottles). I was hopping to use Home assistant to calculate the aggregated consumption and predict the time to change the gas bottles among other things, and modulate the temperature when consumption goes too high (I can burn 15% of my bottles capacity in 1 day if I’m not careful…).

For central heating:
name: “GTW-16”
uri: “/central-heating-zone/1E10FFFFFFFF010”
coolingSupported: false
timeProgramsUri: “/central-heating-zone/1E10FFFFFFFF010/time-programs”
timeProgramActivitiesUri: “/central-heating-zone/1E10FFFFFFFF010/time-program-activities”
statusUri: “/central-heating-zone/1E10FFFFFFFF010/status”
getSetpointUri: “/central-heating-zone/1E10FFFFFFFF010/setpoint”
putSetpointScheduleUri: “/central-heating-zone/1E10FFFFFFFF010/setpoint/schedule”
putSetpointManualUri: “/central-heating-zone/1E10FFFFFFFF010/setpoint/manual”
putSetpointAntiFrostUri: “/central-heating-zone/1E10FFFFFFFF010/setpoint/anti-frost”
putSetpointTemporaryOverrideUri: “/central-heating-zone/1E10FFFFFFFF010/setpoint/temporary-override”
putSetpointHolidayUri: “/central-heating-zone/1E10FFFFFFFF010/setpoint/holiday”
putFirePlaceModeUri: “/central-heating-zone/1E10FFFFFFFF010/setpoint/fireplace-mode”
parametersUri: “/central-heating-zone/1E10FFFFFFFF010/parameters”
paramsMaxPreheatUri: “/central-heating-zone/1E10FFFFFFFF010/parameters/max-pre-heat”
paramsHeatingCurveUri: “/central-heating-zone/1E10FFFFFFFF010/parameters/heating-curve”
paramsHeatingCoolingSpeedUri: “/central-heating-zone/1E10FFFFFFFF010/parameters/heating-cooling-speed”
paramsAntiFrostHolidayUri: “/central-heating-zone/1E10FFFFFFFF010/parameters/anti-frost-and-holiday-setpoint”
paramsControlStrategyUri: “/central-heating-zone/1E10FFFFFFFF010/parameters/control-strategy”

For hot water:
name: “DHW Primary”
uri: “/domestic-hot-water-zone/1E10FFFFFFFF011”
timeProgramsUri: “/domestic-hot-water-zone/1E10FFFFFFFF011/time-programs”
getSetpointUri: “/domestic-hot-water-zone/1E10FFFFFFFF011/setpoint”
putSetpointScheduleUri: “/domestic-hot-water-zone/1E10FFFFFFFF011/setpoint/schedule”
putSetpointReducedUri: “/domestic-hot-water-zone/1E10FFFFFFFF011/setpoint/anti-frost”
putSetpointComfortUri: “/domestic-hot-water-zone/1E10FFFFFFFF011/setpoint/comfort”
putSetpointTemporaryOverrideUri: “/domestic-hot-water-zone/1E10FFFFFFFF011/setpoint/temporary-override”
putSetpointHolidayUri: “/domestic-hot-water-zone/1E10FFFFFFFF011/setpoint/holiday”
parametersUri: “/domestic-hot-water-zone/1E10FFFFFFFF011/parameters”

And for the system:
name: “GTW-16”
statusUri: “/producers/1E10FFFFFFFF”
powerSettingsUri: “/producers/1E10FFFFFFFF/parameters/power-settings”
waterPressureUri: “/system/water-pressure”
gatewayUri: “/system/gateway”
historyUri: “/system/errors/history”
locationUri: “/system/location”
connectionUri: “/system/gateway/connection”
errorStatusUri: “/system/error-status”
applianceTimeUri: “/system/appliance-time”
flowTemperatureUri: “/system/flow-temperature”
deviceInformationUri: “/system/device-information”

@Domaray I was looking into NodeRED for homebridge but couldn’t find anything. I have never worked with NodeRED so I don’t actually understand how it works. :frowning:

Nevertheless, I have the BAXI with the wireless RXM that connects through RF to the gateway (I’m not sure about the reference of the gateway though, basically is this one.

What would be the best way to integrate it? This is the only thread “on the internet” that I came closer to make an integration with Homebridge.

Thank you!

Where did you find the REST API docs for the BAXI btw? @ibernat

Hi, there is no API documentation. I have analyzed the communication between the app and API servers.

Hi all,
I setup node-red version from Domoray, and tried to modify it for the remeha version.
The pairing was succesvol, and i can read the flow-temperature and waterpressusure from mqtt.
the url for reading central heating brought me by a ZoneId thats probably not the same as the baxi integration. Who can help me finding my zone that is used in the folowing url
https://ruapi.remoteapp.bdrthermea.com/v1.0/central-heating-zone/1E10FFFFFFFF010/status
1E10FFFFFFFF010 must be different in the remeha version.
because all the other functions in node red are working great accept the most usefull “GET current status” in de node red flow.

Thanks in advance

Solved it with GET https://ruapi.remoteapp.bdrthermea.com/v1.0/capabilities and the zoneID for remeha etwist = 1E1000000000010

1 Like

Hi @Miguel_Ruivo I don’t know how Homebridge works. Finding in Google I saw the other way: integrate Homebridge devices into Node-Red. Maybe there is also the reverse option but I don’t find it.

Other option could be to install Node-Red in your hardware (Raspberry or other) and do the integration of your boiler and also Homebridge.

@Domaray so does that mean that by using your workflow for node red on my Rpi I can integrate it with homebridge plugin and expose it to mqtt to homebridge? Is that it? I’m not familiar with node red at all. Never actually used it so I’m not sure how it works.

Should your workflow work just out of the box if the BAXI RXM (not TXM in my case) is connected to the same network of node Ted server? Where did you get the credentials from?

Hi @vipial1
Great job, many thanks! I stumbled this topic whilst searching for a Remeha e-twist HA integration. Apparently the BAXI is identical apart from the api endpoints.
In about 2 months I will have a new boiler (cv in Dutch) so I will be able to test.

In github it is stated it should be available in HACS, however it is not. Isn’t it published anymore? When integration and thermostat are in, I could help you investigating any issues in that combination,

I am having the exact same issue as @amoyacan
The integration is not setup after I followed the manual installation steps described. Running the latest versions and ofcourse did a restart.

Home Assistant Core 2022.5.0

Home Assistant Supervisor 2022.05.0

Home Assistant OS 7.6

Hello and thanks for node-red flow and ha custom component.
I know long time has passed since the last update but I have had some issues I hope you can help me.

This question is for @Domaray or anyone with node-red pairing working that can help with this issue:
Once I decided to use the node-red flow, I faced with the fact the pairing is not working for me. It seems I can login with my baxi credentials (it returns my user info), but when I use the pairing code and my username and password, the server returns a message with statusCode=480. I don’t really know what’s the problem here.
Please, helping here would be so appreciated.

Thanks in advance.

Regards.

Can you share the content of “set POST pairing” message that you send (obviously obfuscate your secrets) ? Don’t know if I can help for your issue, but I can confirm it worked for me and I could get the pairing code to be reused in the recurring queries.

@Domaray @vipial1 I have now created an automation to decide which mode the boiler should run. I realise that you have programmed the change of setpoint on the Lovelace card, but there is no NodeRed flow to change the mode itself. I would like to switch between “anti-frost” (boiler sort of “off”) and “schedule 1” based on the logic of the automation.

Do you have any idea what POST request would be relevant to change the mode of the boiler please?

— Edited —

Found the way… if you want to, e.g. switch to “manual” mode then you need to send the payload “{“roomTemperatureSetpoint”:20}” (like for setting to 20 degrees) to the URI ending with “/setpoint/manual” instead of “setpoint/temporary-override” as is used it Domaray’s NodeRed flow for temp update. Actually I found out as well that temp override only works with scheduled programs I think, at least it doesn’t work with “anti-frost”.

Food for thoughts…

If this can help anyone here is my integration based on Domaray’s proposal:

in configuration.yaml:

climate:
  - platform: mqtt
    name: Baxi Neodens Plus Eco 33kW
    icon: mdi:water-boiler
    unique_id: "Baxi-boiler-mqtt"
    modes:
      - "heat"
      - "cool"
      - "off"
    temperature_command_topic: "home/thermostat_baxi_connect/current_setpoint/set"
    temperature_state_topic: "home/thermostat_baxi_connect/current_setpoint"
    temperature_state_template: "{{ value_json|float }}"
    current_temperature_topic: "home/thermostat_baxi_connect/current_temperature"
    current_temperature_template: "{{ value_json|float }}"
    #mode_command_topic: "home/thermostat_baxi_connect/mode_filtered/set"
    mode_state_topic: "home/thermostat_baxi_connect/mode_filtered"
    action_topic: "home/thermostat_baxi_connect/action"
    temperature_unit: C
    max_temp: 30
    min_temp: 7
    precision: 0.5
    temp_step: 0.5
    retain: true

sensor:
  - platform: mqtt
    name: "Baxi thermostat connection Status"
    state_topic: "home/thermostat_baxi_connect/connection"
    #value_template: "{{ value_json }}"  
    icon: mdi:expansion-card

  - platform: mqtt
    name: "Baxi thermostat current mode"
    state_topic: "home/thermostat_baxi_connect/mode"
    #value_template: "{{ value_json }}"  
    icon: mdi:calendar-blank-multiple

  - platform: mqtt
    name: "Baxi thermostat current display mode"
    state_topic: "home/thermostat_baxi_connect/display_mode"
    #value_template: "{{ value_json }}"  
    icon: mdi:calendar-blank-multiple

  - platform: mqtt
    name: "Baxi thermostat current action"
    state_topic: "home/thermostat_baxi_connect/action"
    #value_template: "{{ value_json }}"  
    icon: mdi:calendar-blank-multiple

  - platform: mqtt
    name: "Baxi thermostat current temperature"
    state_topic: "home/thermostat_baxi_connect/current_temperature"
    value_template: "{{ value_json|float }}"
    unit_of_measurement: 'ºC'
    icon: mdi:thermometer
    
  - platform: mqtt
    name: "Baxi thermostat current setpoint"
    state_topic: "home/thermostat_baxi_connect/current_setpoint"
    value_template: "{{ value_json|float }}"
    unit_of_measurement: 'ºC'
    icon: mdi:thermometer-plus

  - platform: mqtt
    name: "Baxi thermostat water preassure"
    state_topic: "home/thermostat_baxi_connect/water_preassure"
    value_template: "{{ value_json|float }}"
    unit_of_measurement: 'bar'
    icon: mdi:speedometer

  - platform: mqtt
    name: "Baxi thermostat flow temperature"
    state_topic: "home/thermostat_baxi_connect/flow_temperature"
    value_template: "{{ value_json|float }}"
    unit_of_measurement: 'ºC'
    icon: mdi:thermometer-chevron-up

  - platform: mqtt
    name: "Baxi thermostat current errors"
    state_topic: "home/thermostat_baxi_connect/current_errors"
    icon: mdi:alert-circle-check-outline

  - platform: mqtt
    name: "Baxi thermostat error code"
    state_topic: "home/thermostat_baxi_connect/current_errors_code"
    icon: mdi:alert-circle-outline
    
  - platform: mqtt
    name: "Baxi thermostat next switch Time"
    state_topic: "home/thermostat_baxi_connect/schedule/next_switch/time"
    icon: mdi:calendar-clock
    
  - platform: mqtt
    name: "Baxi thermostat next switch Setpoint"
    state_topic: "home/thermostat_baxi_connect/schedule/next_switch/setpoint"
    unit_of_measurement: 'ºC'
    icon: mdi:thermometer-plus
    
  - platform: mqtt
    name: "Baxi thermostat program"
    state_topic: "home/thermostat_baxi_connect/schedule/program"
    icon: mdi:calendar-month

I have created an automation for setting the mode and temperature automatically depending if someone is at home or not (for this I created 2 toggle helpers called “home_occupation” (“on” when someone is at home) and “boiler_mode_auto” (“off” if I don’t want this automation to override the direct programming on the thermostat). This code can be added to automation.yaml directly.

alias: Control Boiler Mode
description: ''
trigger:
  - platform: time_pattern
    hours: /1
condition:
  - condition: state
    entity_id: input_boolean.chaudiere_mode_auto
    state: 'on'
  - condition: not
    conditions:
      - condition: state
        entity_id: sensor.baxi_thermostat_current_display_mode
        state: disconnected
action:
  - if:
      - condition: and
        conditions:
          - condition: state
            entity_id: input_boolean.home_occupation
            state: 'on'
          - condition: numeric_state
            entity_id: sensor.baxi_thermostat_current_temperature
            below: '22'
    then:
      - service: mqtt.publish
        data:
          topic: home/thermostat_baxi_connect/current_mode/set
          payload: schedule
    else:
      - service: mqtt.publish
        data:
          topic: home/thermostat_baxi_connect/current_mode/set
          payload: manual
mode: single

Hope this will help other Baxi users :slight_smile:

To make the MQTT entities work you need to import the NodeRed flow published here:

And follow the instructions from Domaray above in this discussion. This is basically, add a client in the Baxi app to get a one-time-password (OTP) and with it get an authorisation token that you copy/paste where mentioned.

Other two files above are also available in the same repo in GitHub.

There are still a few things missing, in particular the payload to switch the boiler to anti-frost mode. I couldn’t do it so I use “manual” mode with a 9°C set temp instead.

More important, I’d really like to get the payload to retrieve the consumption values, this would be very valuable for me.

cheers!

I have your same setup, same situation: non sensors for consumption

Hello everyone,
can anyone tell me what functions the baxi txm allows?

  • temperature change?
  • switching on / off schedules?
  • underfloor heating water temperature setting?
  • setting the domestic (bathroom) water temperature?

Is the api for the new baxi and remeha home app also available?

Any ideas if this allow to adjust the heating curve or the max heating setpoint at least?