-
Notifications
You must be signed in to change notification settings - Fork 5
Description
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.