Eurotronic Spirit Z-Wave - external temperature sensor

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?

Hi @ExTrEmE

You definitly can, that was the whole purpose for me choosing it. You will need to adjust the Measured Temperature Offset which can be adjusted to -5 C to +5 C of the internal measured temperature. See my previous post about how to adjust this temperature in automation.yaml.

I have recently set this up in the hassio node-red addon and can link that too if you want.

1 Like

Hi,
even though I use ioBroker instead of HomeAssistant I’m fighting the same fight trying to feed the Spirit with an external temperature.
has anybody had any luck with reaching out to Eurotronic?

Thanks,
Kevin