Eurotronic Spirit - Missing entity for valve opening percentage

Hi,

I have several Eurotronic Spirit Radiator valves and I cannot find the valve opening value reading to be used in my automation.

Anybody can help me to find and use that value?

Thanks!

The sensor is not supported in HA but you can access the data using one of the workarounds here: https://github.com/home-assistant/core/issues/14526

Bear in mind you will also have to configure the report via your zwave integration first.

After some reading on similar issues and many other posts, I managed to work around the issue. I collect here my findings for further reference, being the main source of information this post (Eurotronic Spirit Thermostats firmware issues)

  1. OpenZwave device configuration is not up to date with the latest changes in https://github.com/OpenZWave/open-zwave...so it’s advisable to override the embedded configuration.
    1. Checkout the contents of https://github.com/OpenZWave/open-zwave/tree/master/config (I stored it under /home/homeassistant/.homeassistant/openzwave_config)
    2. Edit your zwave section in the configuration.yaml like:
zwave:
  usb_path: /dev/ttyACM0
  network_key: !secret zwave_network_key
  device_config: !include zwave_device_config.yaml
  config_path: /home/homeassistant/.homeassistant/openzwave_config
  1. Unfortunately the valve position is not pick up by HASS at this moment. This is discussed in https://github.com/home-assistant/core/issues/14526 and this code is a patch that provides a light dimmer entity that can be used to read/write the valve opening https://raw.githubusercontent.com/rweglarz/home-assistant/f65de53f4727e10e80ea71bc607a74486205d10c/homeassistant/components/zwave/discovery_schemas.py to apply this patch:
    1. Apply the relevant changes to your discover_schemas.py in your HASS installation by locating and editing the file (I suggest to do only the relevant changes instead of replacing the file). Those are my lines added to the file from version 0.115.3:
@@ -185,6 +185,11 @@ DISCOVERY_SCHEMAS = [
                    ],
                    const.DISC_OPTIONAL: True,
                },
+                'valve_state': {
+                    const.DISC_COMMAND_CLASS: [
+                        const.COMMAND_CLASS_SWITCH_MULTILEVEL],
+                    const.DISC_OPTIONAL: True,
+                },
                "zxt_120_swing_mode": {
                    const.DISC_COMMAND_CLASS: [const.COMMAND_CLASS_CONFIGURATION],
                    const.DISC_INDEX: [33],
@@ -294,10 +299,12 @@ DISCOVERY_SCHEMAS = [
        const.DISC_COMPONENT: "light",
        const.DISC_GENERIC_DEVICE_CLASS: [
            const.GENERIC_TYPE_SWITCH_MULTILEVEL,
+            const.GENERIC_TYPE_THERMOSTAT,
            const.GENERIC_TYPE_SWITCH_REMOTE,
        ],
        const.DISC_SPECIFIC_DEVICE_CLASS: [
            const.SPECIFIC_TYPE_POWER_SWITCH_MULTILEVEL,
+            const.SPECIFIC_TYPE_THERMOSTAT_GENERAL_V2,
            const.SPECIFIC_TYPE_SCENE_SWITCH_MULTILEVEL,
            const.SPECIFIC_TYPE_NOT_USED,
        ],
  1. Restart HASS after changing the file (no need to remove/add device) and a new Light device should appear like (light.eurotronic_eur_spiritz_wall_radiator_thermostat_level) which will show the valve opening percentage and can be used to change the value when the “Manufacturer Specific” mode is selected.
4 Likes

Thanks! I was just posting my findings and I used the same source of information.

Have you tried OpenZwave Beta with the thermostats?

No, I just started with the basic home-assistant setup using pip. I did not tried the OpenZwave Beta. Do you think it can improve in any way?

Well, it should be possible to use the spiritz without any hacks, hopefully.
Look in the github issue you mentioned. There are people who are using the spiritz with successfully - including valve control.

Ohh, thanks for the heads up. Indeed it will be much better to avoid any hacks.

I will have a look when I have some time and in the meantime keep my appdaemon scripts as generic as possible to accomodate for the changes.

Thank you, it works great :slight_smile:
I hope it will be included by default soon

I use zwave2mqtt. it detects valve opening by default, so I can configure automation to start boiler.
The other values ate not detected properly, but it provides basic functionality.
Ideally if I will have time I will create the Eurotronic full zwave config to have all values available in HA

Can-you share your configuration in zwave2mqtt?

I tried this but It’s not working…And I don’t understand what’s not working :frowning:

{
  "type": "climate",
  "object_id": "thermostat",
  "values": ["64-1-0", "49-1-1", "67-1-1", "67-1-11"],
  "mode_map": { "off": "Off", "heat": "Heat", "auto": "Heat Eco" },
  "setpoint_topic": { "Heat": "67-1-1", "Heat Eco": "67-1-11" },
  "default_setpoint": "67-1-1",
  "discovery_payload": {
    "min_temp": 11,
    "max_temp": 25,
    "modes": ["off", "heat", "auto"],
    "mode_state_topic": "64-1-0",
    "mode_command_topic": true,
    "current_temperature_topic": "49-1-1",
    "current_temperature_template": "{{ value_json.value }}",
    "temperature_state_template": "{{ value_json.value }}",
    "temperature_command_topic": true
  }
}

I have a standard one and it is being reset every time I reboot zwave2mqtt.

{
  "type": "climate",
  "object_id": "thermostat",
  "values": [
    "64-1-0",
    "49-1-1",
    "67-1-1",
    "67-1-11"
  ],
  "mode_map": {
    "off": "Off",
    "heat": "Heat",
    "cool": "Heat Eco",
    "drying": "Full Power"
  },
  "setpoint_topic": {
    "Heat": "67-1-1",
    "Heat Eco": "67-1-11",
    "Full Power": "67-1-1"
  },
  "default_setpoint": "67-1-1",
  "discovery_payload": {
    "min_temp": 8,
    "max_temp": 28,
    "modes": [
      "off",
      "heat",
      "cool",
      "drying"
    ],
    "mode_state_topic": "z2m/room/Thermostat/64/1/0",
    "mode_command_topic": "z2m/room/Thermostat/64/1/0/set",
    "current_temperature_topic": "z2m/room/Thermostat/z2m/temp",
    "temp_step": 0.5,
    "current_temperature_template": "{{ value_json.value }}",
    "temperature_state_template": "{{ value_json.value }}",
    "temperature_command_topic": "z2m/room/Thermostat/67/1/1/set",
    "mode_state_template": "{{ {\"0\":\"off\",\"1\":\"heat\",\"2\":\"cool\",\"3\":\"drying\"}[value_json.value | string] | default('off') }}",
    "temperature_state_topic": "z2m/room/Thermostat/67/1/1",
    "temperature_unit": "C",
    "precision": 0.1,
    "device": {
      "identifiers": [
        "zwave2mqtt_0xcxxxxx_nodeX"
      ],
      "manufacturer": "EUROtronic",
      "model": "EUR_SPIRITZ Wall Radiator Thermostat (0x0001)",
      "name": "Kidsroom-Thermostat",
      "sw_version": "0.16"
    },
    "name": "Kidsroom-Thermostat_thermostat",
    "unique_id": "zwave2mqtt_0xcxxx_NodeX_thermostat"
  },
  "discoveryTopic": "climate/room-Thermostat/thermostat/config",
  "persistent": true,
  "ignoreDiscovery": false,
  "id": "climate_thermostat"
}

I use dimmer topic to control the boiler.

{
  "type": "light",
  "object_id": "dimmer",
  "discovery_payload": {
    "schema": "template",
    "brightness_template": "{{ (value_json.value / 99 * 255) | round(0) }}",
    "state_topic": "z2m/room/Thermostat/z2m/valve",
    "state_template": "{{ \"off\" if value_json.value <= 20 else \"on\" }}",
    "command_topic": "z2m/room/Thermostat/z2m/valve/set",
    "command_on_template": "{{ ((brightness / 255 * 99) | round(0)) if brightness is defined else 255 }}",
    "command_off_template": "0",
    "device": {
      "identifiers": [
        "zwave2mqtt_0xcxxxx2e_node7"
      ],
      "manufacturer": "EUROtronic",
      "model": "EUR_SPIRITZ Wall Radiator Thermostat (0x0001)",
      "name": "room-Thermostat",
      "sw_version": "0.16"
    },
    "name": "room-Thermostat_dimmer",
    "unique_id": "zwave2mqtt_0xcxxxx_7-38-1-0"
  },
  "discoveryTopic": "light/room-Thermostat/dimmer/config",
  "values": [
    "38-1-0"
  ],
  "persistent": true,
  "ignoreDiscovery": false,
  "id": "light_dimmer"
}

Here’s mine, which I have also edited to expose the Manufacturer Specific mode to HA, allowing me to automate switching between using set temperature and directly setting the valve position. This is for the Aeotec device but as far as I know they are identical products sold under two different brands.

{
  "type": "climate",
  "object_id": "thermostat",
  "values": [
    "64-1-0",
    "49-1-1",
    "67-1-1",
    "67-1-11"
  ],
  "mode_map": {
    "off": "Off",
    "heat": "Heat",
    "cool": "Heat Eco",
    "dry": "Boost",
    "auto": "Manufacturer Specific"
  },
  "setpoint_topic": {
    "Heat": "67-1-1",
    "Heat Eco": "67-1-11",
    "Full Power": "67-1-1"
  },
  "default_setpoint": "67-1-1",
  "discovery_payload": {
    "min_temp": 8,
    "max_temp": 28,
    "modes": [
      "off",
      "heat",
      "cool",
      "dry",
      "auto"
    ],
    "mode_state_topic": "zwave2mqtt/15/64/1/0",
    "mode_command_topic": "zwave2mqtt/15/64/1/0/set",
    "current_temperature_topic": "zwave2mqtt/15/49/1/1",
    "temp_step": 0.5,
    "current_temperature_template": "{{ value_json.value }}",
    "temperature_state_template": "{{ value_json.value }}",
    "temperature_command_topic": "zwave2mqtt/15/67/1/1/set",
    "mode_state_template": "{{ {\"Off\":\"off\",\"Heat\":\"heat\",\"Heat Eco\":\"cool\",\"Boost\":\"dry\",\"Manufacturer Specific\":\"auto\"}[value_json.value] | default('off') }}",
    "temperature_state_topic": "zwave2mqtt/15/67/1/1",
    "temperature_unit": "C",
    "precision": 0.1,
    "device": {
      "identifiers": [
        "zwave2mqtt_0xf52fe0c8_node15"
      ],
      "manufacturer": "Aeotec Limited",
      "model": "ZWA021 Thermostatic Valve (0x0015)",
      "name": "Kitchen_TRV",
      "sw_version": "0.16"
    },
    "name": "Kitchen_TRV_thermostat",
    "unique_id": "zwave2mqtt_0xf52fe0c8_Node15_thermostat"
  },
  "discoveryTopic": "climate/Kitchen_TRV/thermostat/config",
  "persistent": true,
  "ignoreDiscovery": false,
  "id": "climate_thermostat"
}

You should be able to avoid your config getting reset by clicking “Store” once you’ve edited it.

1 Like

I had also a battery issue, batteries were dying after 2 days of use.
After I’ve switched to OpenZwave beta the battery life improved, 7 days all valves are working fine.
I think it is connected with poll interval, but OpenZwave works better for me so I’ve decided to stick to it.
In OpenZwave thermostats are not being marked as dead if the fail to respond to controller,
which is ideal for me.
OpenZwave uses MQTT to transmit date to HA.
So to have Valve opening percentage I’ve used MQTT explorer to find the right topic
I was looking for command class 38
Just added :

sensor:
  - platform: mqtt
    name: "Thermostat valve"
    state_topic: "OpenZWave/1/node/2/instance/1/commandclass/38/value/38326345/"
    unit_of_measurement: '%'
    value_template: "{{ value_json.Value }}"

And now I can turn on the boiler when valve opens.

P.S.
I’ve noticed that not all valve changes are being send to the controller,
But i need time to investigate it.

1 Like

Hi, It’s been a while since this was active, but I wrote a small how-to on how to use the valves with an external thermometer and using zwave-js to set the valves to a specific position: