Skip to content

Home Assistant Blueprint to mimic the Adruino Temperature Control and use external Temp Sensors #22

@Else-automation

Description

@Else-automation

Hi @NewImproved,

I remember you mentioned the idea of improving the hybrid control logic to be used with an external sensor a while back, so I’ve been tinkering with a blueprint that follows the Aduro H1 logic from the manual. I thought I’d share it here as a starting point for the community to play with, not sure if this is the appropriate place though?
By using an external temperature sensor (like a Zigbee sensor) as the input instead of the one inside the stove, the regulation is more accurate because you can place the sensor higher up from the floor or closer to the location where you normally sit.

What is included in this version:

  • External Sensor Support: You can link any HA temperature sensor to drive the logic.

  • Stabilization Timers: It respects the 10-minute rule from the manual—once it changes a heat level, it waits 10 minutes for the room and flue to settle before moving again. That is aso the reason why this blueprint will not do anything for the first 10 minutes after startup.

  • Custom Thresholds: I added sliders so you can tweak the "too hot" and "too cold" sensitivity.

  • Same Shutdown behaviour: It only powers off the stove if the room is >1.0°C over target and the stove has already been at Level 1 for 10 minutes. It then waits at least 30 minutes to restart again, even if the temperature falls below the threshold.

  • Safety Guards: It’s designed to stay out of the way while the stove is in "Ignition" or "Shutdown" so it doesn't interrupt the stove's native safety cycles.

Quick Setup Note: It needs a manually created input_boolean helper to act as the "Auto-Restart" master switch. If it is switched off the stove will not restart the atutomation even if the temperature falls below the threshold.
It is still in the early testing phase, but it feels like a solid framework. But maybe someone here wants to try it out already.

The Blueprint Code:


blueprint:
  name: Aduro H1 – Advanced Hybrid Control
  description: |-
    ### **Aduro H1 Intelligent Temperature Control**
    A refined version of the hybrid logic that lets you use an external 
    temperature sensor instead of the built-in one for better accuracy.
    
    **Setup:** Create an 'input_boolean' helper in HA to use as 
    the "Auto-Restart" toggle.
  domain: automation

  input:
    stove_power:
      name: Stove Power Switch
      selector:
        entity:
          domain: switch
    heat_level:
      name: Heat Level Control
      selector:
        entity:
          domain: number
    room_temperature:
      name: Room Temperature Sensor (External)
      description: Use a remote sensor (e.g., Zigbee) for better accuracy.
      selector:
        entity:
          domain: sensor
          device_class: temperature
    target_temperature:
      name: Target Temperature Sensor
      selector:
        entity:
          domain: sensor
          device_class: temperature
    stove_state:
      name: Stove Substate Sensor
      selector:
        entity:
          domain: sensor
    auto_restart:
      name: Auto Restart Helper
      description: "Toggle this ON to allow the stove to light itself automatically."
      selector:
        entity:
          domain: input_boolean
    cold_threshold:
      name: Cold Threshold
      default: 0.5
      selector:
        number:
          min: 0.1
          max: 2.0
          step: 0.1
          unit_of_measurement: "°C"
          mode: slider
    hot_threshold:
      name: Hot Threshold
      default: 0.5
      selector:
        number:
          min: 0.1
          max: 2.0
          step: 0.1
          unit_of_measurement: "°C"
          mode: slider

mode: single
max_exceeded: silent

trigger:
  - platform: time_pattern
    minutes: "/1"

variables:
  stove_power_entity: !input stove_power
  heat_level_entity: !input heat_level
  room_temp_entity: !input room_temperature
  target_temp_entity: !input target_temperature
  stove_state_entity: !input stove_state
  auto_restart_entity: !input auto_restart
  thresh_cold: !input cold_threshold
  thresh_hot: !input hot_threshold

  room: "{{ states(room_temp_entity) | float(0) }}"
  target: "{{ states(target_temp_entity) | float(0) }}"
  level: "{{ states(heat_level_entity) | int(0) }}"
  current_substate: "{{ states(stove_state_entity) }}"
  power_state: "{{ states(stove_power_entity) }}"
  
  now_ts: "{{ as_timestamp(now()) }}"
  last_heat_change: "{{ as_timestamp(states[heat_level_entity].last_changed) if states[heat_level_entity] is defined else 0 }}"
  last_power_change: "{{ as_timestamp(states[stove_power_entity].last_changed) if states[stove_power_entity] is defined else 0 }}"
  time_since_heat: "{{ (now_ts - last_heat_change) | int }}"
  time_since_power: "{{ (now_ts - last_power_change) | int }}"

condition:
  - condition: template
    value_template: "{{ current_substate not in ['Ignition', 'Shutdown', 'Alarm'] }}"

action:
  - choose:
      # 1. AUTO RESTART
      - conditions:
          - condition: template
            value_template: "{{ power_state == 'off' }}"
          - condition: state
            entity_id: !input auto_restart
            state: "on"
          - condition: template
            value_template: "{{ room < (target - thresh_cold) }}"
          - condition: template
            value_template: "{{ time_since_power > 1800 }}"
        sequence:
          - service: switch.turn_on
            target:
              entity_id: !input stove_power
          - service: number.set_value
            target:
              entity_id: !input heat_level
            data:
              value: 3

      # 2. SHUTDOWN (Target + 1.0)
      - conditions:
          - condition: template
            value_template: "{{ power_state == 'on' }}"
          - condition: template
            value_template: "{{ room > target + 1.0 }}"
          - condition: template
            value_template: "{{ level == 1 }}"
          - condition: template
            value_template: "{{ time_since_heat > 600 }}"
        sequence:
          - service: switch.turn_off
            target:
              entity_id: !input stove_power

      # 3. TOO HOT -> DECREASE
      - conditions:
          - condition: template
            value_template: "{{ power_state == 'on' }}"
          - condition: template
            value_template: "{{ room > (target + thresh_hot) }}"
          - condition: template
            value_template: "{{ level > 1 }}"
          - condition: template
            value_template: "{{ time_since_heat > 600 }}"
        sequence:
          - service: number.set_value
            target:
              entity_id: !input heat_level
            data:
              value: "{{ level - 1 }}"

      # 4. TOO COLD -> INCREASE
      - conditions:
          - condition: template
            value_template: "{{ power_state == 'on' }}"
          - condition: template
            value_template: "{{ room < (target - thresh_cold) }}"
          - condition: template
            value_template: "{{ level < 3 }}"
          - condition: template
            value_template: "{{ time_since_heat > 600 }}"
        sequence:
          - service: number.set_value
            target:
              entity_id: !input heat_level
            data:
              value: "{{ level + 1 }}"


And thank you very much for the great integration! Highly appreciated.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions