diff --git a/blueprints/danfoss_ally_trv_external_sensor.yaml b/blueprints/danfoss_ally_trv_external_sensor.yaml new file mode 100644 index 0000000..1749e60 --- /dev/null +++ b/blueprints/danfoss_ally_trv_external_sensor.yaml @@ -0,0 +1,80 @@ +--- +blueprint: + author: runejuhl + homeassistant: + min_version: 2024.6.0 + name: Radiator external temperature sensor control (0.0.1-alpha) + description: |- + ## Radiator external temperature sensor control + + Version `0.0.1-alpha`. + + Sets the `external_measured_room_sensor` value on Danfoss Ally TRV, enabling + the TRV to adjust the valve based on an external sensor. + domain: automation + source_url: https://git.petardo.dk/runejuhl/hass-blueprints/raw/branch/dev/blueprints/danfoss_ally_trv_external_sensor.yaml + + input: + radiator: + name: Radiator thermostat + selector: + entity: + filter: + - domain: climate + climate_sensor: + name: Climate sensor temperature entity + selector: + entity: + filter: + - device_class: + - temperature + +mode: queued + +variables: + climate_entity: !input radiator + temperature_entity: !input climate_sensor + +triggers: + - entity_id: !input climate_sensor + attribute: temperature + 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 + }} + +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 + }}