diff --git a/blueprints/danfoss_ally_trv_external_sensor.yaml b/blueprints/danfoss_ally_trv_external_sensor.yaml index 1749e60..80842cf 100644 --- a/blueprints/danfoss_ally_trv_external_sensor.yaml +++ b/blueprints/danfoss_ally_trv_external_sensor.yaml @@ -1,13 +1,12 @@ ---- blueprint: author: runejuhl homeassistant: - min_version: 2024.6.0 - name: Radiator external temperature sensor control (0.0.1-alpha) + min_version: 2025.2.4 + name: Radiator external temperature sensor control (0.0.2-alpha) description: |- ## Radiator external temperature sensor control - Version `0.0.1-alpha`. + Version `0.0.2-alpha`. Sets the `external_measured_room_sensor` value on Danfoss Ally TRV, enabling the TRV to adjust the valve based on an external sensor. @@ -20,15 +19,17 @@ blueprint: selector: entity: filter: - - domain: climate + - domain: + - climate + multiple: false climate_sensor: name: Climate sensor temperature entity selector: entity: filter: - - device_class: - - temperature - + - device_class: + - temperature + multiple: false mode: queued variables: @@ -36,45 +37,44 @@ variables: temperature_entity: !input climate_sensor triggers: - - entity_id: !input climate_sensor - attribute: temperature - trigger: state +- entity_id: !input climate_sensor + trigger: state conditions: - # We only want to execute the action if the temperature has changed by at - # least 0.1 degress C, according to the Zigbee2MQTT documentation for the - # device: https://www.zigbee2mqtt.io/devices/014G2461.html - # - # `external_measured_room_sensor` defaults to `-8000`, so this will work in - # all cases. - - condition: template - value_template: >- - {{ - ( - ( - state_attr(climate_entity, 'external_measured_room_sensor') - - trigger.to_state.attributes.temperature * 100) - | abs) - >= 10 - }} +# We only want to execute the action if the temperature has changed by at least +# 0.1 degress C, according to the Zigbee2MQTT documentation for the device: +# https://www.zigbee2mqtt.io/devices/014G2461.html +# +# `external_measured_room_sensor` defaults to `-8000`, so this will work in all +# cases. +- condition: template + value_template: |- + {% if state_attr(climate_entity, 'external_measured_room_sensor') == None %} + True + {% else %} + {{ + ( (state_attr(climate_entity, 'external_measured_room_sensor') + - (trigger.to_state.state | float) * 100) | abs) + >= 10 + }} + {% endif %} actions: - - variables: - # If we don't have a trigger ID the automation has been run manually, in - # which case we pull the temperature from the sensor instead of the - # trigger state. - external_temperature: >- - {% if trigger.id is not defined %} - {{ state_attr(temperature_entity, 'temperature') }} - {% else %} - {{ trigger.to_state.attributes.temperature }} - {% endif %} - - action: number.set_value - target: - entity_id: |- - number.{{ states[climate_entity].object_id }}_external_measured_room_sensor - data: - value: >- - {{ - (external_temperature * 100) | int - }} +- variables: + # If we don't have a trigger ID the automation has been run manually, in + # which case we pull the temperature from the sensor instead of the trigger + # state. + external_temperature: |- + {% if trigger.id is not defined %} + {{ state_attr(temperature_entity, 'temperature') }} + {% else %} + {{ trigger.to_state.state | float }} + {% endif %} +- action: number.set_value + target: + entity_id: number.{{ states[climate_entity].object_id }}_external_measured_room_sensor + data: + value: |- + {{ + (external_temperature * 100) | int + }}