Eurotronic Spirit Z-Wave - external temperature sensor

Hello all,

I have an issue with the Eurotronics Spirit Z-Wave Thermostat valves. For a start I bought three of them and I would like to use them to regulate the floor heating.
In our house we have got the floor heating something like this:

On the valves I installed the thermostatic heads in hope that I will be able to control each circle of the floor heating. The Spirit Z-Wave should the the best oprtion because regarding the specification it tells that it can control the valve and getting the temperature from external sensor. Because the thermostatic heads are in the completly different area (closed in box) then the area for which they are making regulation.

Anyhow I am not able to make it working.

I made a googling for long time and found lot of users which have the simmilar problem, but never the proper solution which can work. I am trying to get it work with the Homeassistant installed on RPi 3 and Hassbian.
The Spirit I can add via Z-Wave that work. Even the temperature changes working etcetera, but it still counting via the temperature sensor in the Spirit itself, but it is irelevant.

In manual is written that to get work the external sensor you have to pu tthe parameter ā€œ8: Measured Temperature Offsetā€ to the 128. I made even that. But I donā€™t know what to do next?

I was searching for solution and I found some relevant topics:
Device specification: Device List - Spirit Z-Wave
Down there is even the manual fot the device. (Like a new user I cannot put more than two links sorry).

About the external sensor is writen on the page number: 18

Then I get an idea if the external temperature is not getting the each Spirit from the some Z-Wave device which vould be associated in the same Z-Wave group? Or? I even donā€™t understand in details to this. And I would like to operate it not only with the Z-Wave sensors. One of the Spirit I would like to control via NetAtmo sensor which is included in HomeAssistant. The other one with the ESP8266 temperature sensor. And the third one with the Z-Wave sensor. But anyhow from the different type temperature sensor which are in my HomeAssistant.

I found this topic even for the OpenHab here: Eurotronic Spirit Z-Wave Plus & external temperatures
And there is writen that the solution brings some update of OpenHab, but I donā€™t understand the detailes.
Can someone for example desribe me that? They somehow get it work and send via Z-Wave the temperature to the Spirit?
I donā€™t know how to ā€œsendā€ something via HomeAssistant Z-Wave to the Z-Wave devices other way then setting the parametres in Z-Wave config.

Question is is there a way to get it work and push the Spirit Z-Wave to use the external temperature sensor from HomeAssistant and amke than the regulation of the valve?

Many thanks for your help in advance and look forward that this topic wil hopefully will be not helpfull only for me.

In theory, all youā€™ll need to do is;

  1. Set the Measured Temperature Offset on the Spirit TRV to 128, which youā€™ve already done.
  2. On the configuration for a different Z-Wave temperature sensor, add the Spirit TRV to that nodeā€™s association group.

This should result in the Z-Wave temperature sensor sending its temperature readings directly to the Spirit TRV over your Z-Wave mesh and then the Spirit TRV using that temperature sensor reading as the room temperature, thus adjusting the valve appropriately.

Unfortunately, iā€™ve not been able to get this working myself - I have an Aeotec Multisensor 6 but even when I have followed the steps above the readings appear to be completely ignored. This may be because theyā€™re not in the format, or the specific type of Z-Wave attribute, that the Spirit TRV wants.

The OpenHAB thread you linked to is slightly different. Instead of using the Z-Wave network to have a sensor send a direct reading, OpenHAB have updated their Z-Wave binding so that the controller (i.e. OpenHAB itself) can send the readings to the Spirit TRV. This nicely works around issues such as other sensors sending in the wrong format, or allowing you to use other non-Z-Wave sensors as the room temperature sensor.

Iā€™d love to hear if anyone else has managed to get this working as itā€™d be really useful! Right now iā€™m having to rely on the Spiritā€™s own sensor which as I have them mounted low and vertically (British radiators!) isnā€™t as accurate as mounting them high and horizontally as seems to be more common on the continent.

Many thanks for your reply!

I was thinking that it will be related to the groups in Z-Wave. I have only one Z-Wave temperature sensor so I will try to do it like that and let you know.

I am not sure if I understand you right, but it seems to me that OpenHAB and Home Assistant have different aproach to that issue. And there now any way how to force the home assistant to send to Z-Wave device the readings from other not Z-Wave sensors?
What about some ā€œfakeā€ Z-Wave devices made in Home Assistant which would be possible to put in to the groups with the Spitit?
Or some other way how to push the Home Assistant to send the temperature to Spirit somehow?
As I understod you also donā€™t know?
Maybe there is someone who know the way.

1 Like

Here I would also like to have a function to connect my xomai temperature sensors (zigbee -> mqtt) with my Eurotronic Spirit as external temperature sensor.

From the Eurotronic Spirit datasheet it should be possible to send the tempature using the multilevel Sensor outgoing report (page 18 in the datsheet).
Does anyone know how to send this report?

In my zwcfg-file this is created:

<CommandClass id="49" name="COMMAND_CLASS_SENSOR_MULTILEVEL" version="5" innif="true">
   <Instance index="1" />
   <Value type="decimal" genre="user" instance="1" index="1" label="Temperature" units="C" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="19.28" />
</CommandClass>

But is this only to handle the incomming report?

Hey @Siggylicious , only way to do this is as @KingJ has described. So af HA canā€™t create ā€œfakeā€ Z-Wave devices which would then send data from other HA temp sensor to the Z-Wave network, the solution that I went with is temperature correction on change.
There is Z-Wave config 8: Measured Temperature Offset. I am setting it to compensate the difference between my external sensor, and whatever TRV reports. It works quite okay for my liking.
But also, for this to work good you need to decrease 5: Temperature Report Threshold from 0.5C threshold to something less.

configuration.yaml

input_number:
  livingroom_adj:
    name: Living Room Adjustment Level
    min: 0
    max: 50
    step: 1

automations.yaml

- alias: Keep TRV living temperature sensor in sync
  trigger:
    platform: state
    entity_id: sensor.temperature_158d00023256d7
    platform: state
    entity_id: sensor.eurotronic_eur_spiritz_wall_radiator_thermostat_temperature
  action:
  - service: input_number.set_value
    data_template:
       entity_id: input_number.livingroom_adj 
       value: '{{  (states.sensor.temperature_158d00023256d7.state | float  * 10 -(states.sensor.eurotronic_eur_spiritz_wall_radiator_thermostat_temperature.state | float  * 10 -states.input_number.livingroom_adj.state| float  ))| float  | round(0) }}'
  - service: zwave.set_config_parameter
    data_template: {
      "node_id": 3,
      "parameter": 8,
      "value": '{{  states.input_number.livingroom_adj.state | float  | round(0) }}'
      }

Here is how sync results look(thereā€™s some small sync issue, due to automation triggers, but I havenā€™t investigated it more because what I have is quite enough)
TRV_and_ext_sensors_sync

1 Like

Multilevel sensors are read only. OZW does not support sending reports from the controller.

Thanks @freshcoast, good to know.

Thanks for your reply @insajd, it really helped me a lot and I have implemented your idea and got it working this weekend.
I made some changes as your code couldnā€™t provide negative numbers to 8: Measured Temperature Offset represented as 206-256.

My automation.yaml now looks like this:

- alias: Setting real office TRV temperature
  trigger:
    platform: state
    entity_id: sensor.eurotronic_eur_spiritz_wall_radiator_thermostat_temperature_3
  action:
    - service: input_number.set_value
      data_template:
        entity_id: input_number.office_trv_real_temp
        value: "{{ ((states.sensor.eurotronic_eur_spiritz_wall_radiator_thermostat_temperature_3.state|float) - (states.input_number.office_temp_offset_in_degrees.state|float) + 1) }}"
  
- alias: Setting average office temperature
  trigger:
    - platform: state
      entity_id: sensor.eurotronic_eur_spiritz_wall_radiator_thermostat_temperature_3
    - platform: state
      entity_id: sensor.temperature_158d00025d8dfd
  action:
    - service: input_number.set_value
      data_template:
        entity_id: input_number.office_temp_avg
        value: "{{ (((states.input_number.office_trv_real_temp.state|float) + (states.sensor.temperature_158d00025d8dfd.state|float)) / 2)|round(2) }}"

- alias: Setting office temperature offset in degrees
  trigger:
    platform: state
    entity_id: input_number.office_temp_avg
  action:
    - service: input_number.set_value
      data_template:
        entity_id: input_number.office_temp_offset_in_degrees
        value: "{{ ((states.input_number.office_temp_avg.state|float) - (states.input_number.office_trv_real_temp.state|float))|round(2) }}"
    
- alias: Setting office temperature offset to match config param
  trigger:
    platform: state
    entity_id: input_number.office_temp_offset_in_degrees
  action:
    - service: input_number.set_value
      data_template:
        entity_id: input_number.office_temp_offset_in_byte
        value: >-
          {% if (states.input_number.office_temp_offset_in_degrees.state|float) > 5 %}
            {{ 50 }}
          {% elif states.input_number.office_temp_offset_in_degrees.state|float >= 0 %}
            {{ (states.input_number.office_temp_offset_in_degrees.state|float * 10)|round(0) }}
          {% elif (states.input_number.office_temp_offset_in_degrees.state|float) < -5 %}
            {{ 206 }}
          {% else %}
            {{ (256 + (states.input_number.office_temp_offset_in_degrees.state|float * 10))|round(0)|int }}
          {% endif %}

- alias: Send temperature offset to office TRV
  trigger:
    platform: state
    entity_id: input_number.office_temp_offset_in_byte
  action:
    - service: zwave.set_config_parameter
      data_template: {
        "node_id": 9,
        "parameter": 8,
        "value": '{{  states.input_number.office_temp_offset_in_byte.state | float | round(0) }}'
        }
4 Likes

Looking at my recent graphs now that the heating is back on for the winter, I think this is now working but iā€™m not sure whatā€™s changed to make it work! Iā€™m on HASS 0.101.3, with the lifeline association on an Aeotec MultiSensor associated to the Spirit TRV.

image

I noticed that the reported temperature from the Spirit TRV was leveling off despite being below the target setpoint and with the heating running;

image

However, checking the temperature reported by the Multisensor I can see that the desired setpoint temperature has been reached;

image

So it seems that associating the devices does work and the Spirit TRV uses the temperature report from the Multisensor instead of the built in sensor. However, the Spirit TRV will continue to report itā€™s own temperature using the built-in sensor rather than the value it receives from the Multisensor.

A little confusing, but iā€™m glad it seems to be working! Is anyone else able to confirm if theyā€™re now seeing this behaviour too?

I had a technical exchange with Eurotronic last year as I was struggling to use an Aeotec Multisensor 6 as the external temperature sensor source with my Spirit. My system uses a Vera Lite controller.

It appears that the Spirit is fussy about the encapsulation of the temperature sensor data that is being sent to it (by Association). Their words were ā€œThe Spirit does not support the multi-channel command class. The reception is confirmed via ACK but the command is not processed on application level. Please send the multilevel sensor report without endpoint encapsulation.ā€

As mentioned, I was trying to use an Aeotec Multisensor 6 to provide the external temperature reading. With the Vera I had no control over this data was encapsulated, as it was being sent by the Multisensor directly to the Spirit by Association. I used a Zniffer to see what was actually being sent, and the data did appear to have an extra layer of encapsulation which would explain why the Spirit was ignoring it - although it was acknowledging it with an ACK!

I still havenā€™t got this working (no spare time!) - it seems that I would need to use another type of sensor that sends the data without encapsulation, unless of course Aeotec provided a firmware update that changed the way the multilevel sensor report was sent from the Multisensor.

Another alternative is to try to route the temperature through the controller somehow. I donā€™t believe that is possible with the Vera, but it might be possible on one of the more open controllers.

3 Likes

@Morgano thatā€™s the most helpful comment I have found in the world on this topic !
I am amazed that nobody managed so far to use this external temperature sensor feature.
Does someone know by chance which temperature sensor can work with this Spirit ?

I also had a look at the Spirit Zigbee version and it doesnā€™t work either:

@thermostat Yes itā€™s been exasperating trying to get such a simple concept to work! It looks like it is possible on OpenHAB (see the final link in the first post) as this appears to allow more low-level control than Home Assistant. Iā€™ve been trialling both OpenHAB and Home Assistant with a view to moving away from my Vera, but both systems seem to have their drawbacks - Iā€™m not convinced I like either!
Back to the External sensor question, I also tried unsuccessfully with a Fibaro Universal sensor. Later on I bought a ZWave Me Z-Uno. I never got around to trying this but the documentation suggested that it would not be possible.
So, I think the only definite solutions are to use an external sensor but route it though the controller (OpenHAB, not possible in HA), or to implement the ā€˜Temperature Offset correctionā€™ scheme described earlier in this thread.
Another possibility is to try to get the approach used in OpenHAB to work on HA. It only really requires the ability to send bytes out on the Z-Wave network (the Z-wave commands themselves are quite simple), and to effectively ā€˜roll your ownā€™ Multilevel sensor report in the simple format that the Spirit requires.

@Morgano I have written to Eurotronic about this topic and asked if they can confirm a working temperature sensor. I am a bit reluctant to go with the OpenHAB approach or the ā€˜Temperature Offset correctionā€™ (as they are highly dependent on OpenHAB or HA sending regular updates/sync).
I will report here if I can get any answer.

@thermostat I already asked them a while back about compatible sensors and got nowhere; hopefully you might have more success!
In case it is of interest, below is a screenshot of the technical part of the email I sent them showing the sensor sending a temperature report to the Spirit, captured by my Zniffer. This got ACKed by the Spirit but is not processed by it due to the encapsulation.

Probably the best solution to this whole issue would be for Eurotronic to update the firmware in their devices to cope with this type of sensor report. However, it might not help existing owners of the devices as I donā€™t believe that the Spirit is user-updatable.

@Morgano Indeed but based on Eurotronicā€™s previous behaviour, I wouldnā€™t hold my breath for a new firmwareā€¦
It seems that for the time being, it makes more sense to go with a proprietary solution like Homematic HMIP-eTRV-2 which can be easily bought with the associated external temperature sensor.
In addition it seems that it is well supported by Home Assistant.

Just out of curiosity, what is your feedback with Home Assistant ? You seemed a bit dissatisfied ?

Hey, I bought 9 of these (36ā‚¬ @ amazon.de) and want to eliminate the need of the classic room thermostat, and instead, if one of 'em is askigh heat (and I donā€™t mean ā€œonā€ or ā€œheatā€) because set temp is higher then current temp, I want to switch my gas heater/boiler on. how do I do this? Reading valve opening of all 9 of them? writing a rule for delta t?

Valve opening readout is not stock atm. So Iā€™m looking for a concequent switching in heat/eco and boost mode.

Thanks!

PS; any nice examples of a programmable thermostat gui in HA?

Can I ask you why you are compensating to the average temperature instead of relying solely on your external temp sensor?

My TRV is sitting in the opposite end of the room. I wanted a temperature that represented the room better. So my setup consist of two temperature sensors at both ends of the room, and the avarage should represent the general room temperature.

When I have a temperature sensor inside the TRV why not use it as well? :slight_smile:

I see. The opposite ends explains the average calculation. Thanks :slight_smile:

Hi guys,
Iā€™m actually on zipato zipabox and Iā€™m exploring hass to migrate all my system. One of my primary objectives is to get my eurotronics trv to works, as it never worked good with zipabox (Iā€™m unable to use external temperature).

As I understand, now Spirit valve is compatible with hass and is possibile to use an external temperature as @Siggylicious wrote in his post on top of the thread (I have a similar situation, long room with a big window and radiator near the window, so big temp differenceā€¦ 15Ā°C near the window, 19Ā°C on the other side).

I understood correctly? Is now possibile to use spirit trv with hass and external temp?