blueprint: author: runejuhl homeassistant: min_version: 2025.2.4 name: Radiator external temperature sensor control (0.0.2-alpha) description: |- ## Radiator external temperature sensor control 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. 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 multiple: false climate_sensor: name: Climate sensor temperature entity selector: entity: filter: - device_class: - temperature multiple: false mode: queued variables: climate_entity: !input radiator temperature_entity: !input climate_sensor triggers: - entity_id: !input climate_sensor trigger: state conditions: # We only want to execute the action if # # * the temperature sensor is available, or # # * 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(temperature_entity, 'temperature') is none %} False {% elif 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) or (trigger.to_state.state in ['unavailable', 'unknown']) %} {{ 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 }}