upload
This commit is contained in:
23
README.md
Normal file
23
README.md
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# HA - Bluerpints
|
||||||
|
|
||||||
|
Home Assistant Blueprints repository for automating smart home tasks.
|
||||||
|
|
||||||
|
## Project Info
|
||||||
|
- **Repo:** https://gitlab.domowyasystent.com/peakcontroll/ha-bluerpints
|
||||||
|
- **Created:** January 3, 2026
|
||||||
|
- **Auto DevOps:** Enabled
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
1. Browse the available blueprints in this repository.
|
||||||
|
2. Import the desired blueprint into your Home Assistant instance.
|
||||||
|
3. Customize triggers and actions as needed for your devices.
|
||||||
|
|
||||||
|
[](https://my.home-assistant.io/redirect/blueprint_import/?blueprint_url=https%3A%2F%2Fgitlab.domowyasystent.com%2Fpeakcontroll%2Fha-bluerpints%2F-%2Fraw%2Fmain%2FTRVZB+and+External+sensor.yaml?)
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
- Fork the repo and create a branch for your changes.
|
||||||
|
- Submit a merge request with clear description of the new blueprint or improvement.
|
||||||
|
|
||||||
|
## License
|
||||||
|
Specify your license here (e.g., MIT, Apache 2.0).
|
||||||
|
|
||||||
89
TRVZB and External sensor.yaml
Normal file
89
TRVZB and External sensor.yaml
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
blueprint:
|
||||||
|
name: Sonoff TRVZB & Zewnętrzny czujnik temperatury
|
||||||
|
description: >
|
||||||
|
|
||||||
|
<summary><b>PeakControl Sonoff Głowica - TRVZB & Zewnętrzny czujnik temperatury</b> 👈</summary>
|
||||||
|
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><b>The Automation Process:</b> 👈</summary>
|
||||||
|
|
||||||
|
**Automatyzacja synchronizuje temperaturę z wybranego czujnika:**
|
||||||
|
**z urządzeniem wykorzystującym tryb „external”.**
|
||||||
|
|
||||||
|
|
||||||
|
**Działanie:**
|
||||||
|
|
||||||
|
- uruchamia się co 2 minuty ORAZ przy każdej zmianie temperatury czujnika
|
||||||
|
- sprawdza, czy czujnik zwraca poprawną wartość (nie unknown / unavailable)
|
||||||
|
- ustawia select.* na opcję „external”
|
||||||
|
- po 5 sekundach wpisuje aktualną temperaturę z czujnika do number.*
|
||||||
|
|
||||||
|
**Typowe użycie:**
|
||||||
|
|
||||||
|
- głowice / termostaty z trybem external temperature
|
||||||
|
- przekazywanie temperatury z zewnętrznego sensora do urządzenia
|
||||||
|
|
||||||
|
</details>
|
||||||
|
domain: automation
|
||||||
|
input:
|
||||||
|
temperature_sensor:
|
||||||
|
name: Czujnik temperatury
|
||||||
|
selector:
|
||||||
|
entity:
|
||||||
|
filter:
|
||||||
|
domain: sensor
|
||||||
|
device_class: temperature
|
||||||
|
|
||||||
|
target_number:
|
||||||
|
name: Number (Głowica - nastawienie temperatury)
|
||||||
|
selector:
|
||||||
|
entity:
|
||||||
|
filter:
|
||||||
|
domain: number
|
||||||
|
device_class: temperature
|
||||||
|
|
||||||
|
|
||||||
|
target_select:
|
||||||
|
name: Select (Głowica)
|
||||||
|
selector:
|
||||||
|
entity:
|
||||||
|
filter:
|
||||||
|
domain:
|
||||||
|
- select
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
- platform: time_pattern
|
||||||
|
minutes: "/2"
|
||||||
|
|
||||||
|
- platform: state
|
||||||
|
entity_id: !input temperature_sensor
|
||||||
|
|
||||||
|
variables:
|
||||||
|
set_temperature_sensor: !input temperature_sensor
|
||||||
|
|
||||||
|
condition:
|
||||||
|
- condition: template
|
||||||
|
value_template: >
|
||||||
|
{{ states(set_temperature_sensor) not in ['unknown', 'unavailable'] }}
|
||||||
|
|
||||||
|
action:
|
||||||
|
- service: select.select_option
|
||||||
|
target:
|
||||||
|
entity_id: !input target_select
|
||||||
|
data:
|
||||||
|
option: external
|
||||||
|
|
||||||
|
- delay:
|
||||||
|
hours: 0
|
||||||
|
minutes: 0
|
||||||
|
seconds: 5
|
||||||
|
milliseconds: 0
|
||||||
|
|
||||||
|
- service: number.set_value
|
||||||
|
target:
|
||||||
|
entity_id: !input target_number
|
||||||
|
data:
|
||||||
|
value: "{{ states(set_temperature_sensor) | float }}"
|
||||||
|
|
||||||
|
mode: single
|
||||||
128
dynamic_valve.yaml
Normal file
128
dynamic_valve.yaml
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
blueprint:
|
||||||
|
name: Dynamic Radiator Valve
|
||||||
|
description: Automatically sets radiator valve closing/opening degree based on temperature difference and window status
|
||||||
|
domain: automation
|
||||||
|
|
||||||
|
input:
|
||||||
|
radiator_climate:
|
||||||
|
name: Radiator (climate)
|
||||||
|
selector:
|
||||||
|
entity:
|
||||||
|
domain: climate
|
||||||
|
|
||||||
|
temperature_sensor:
|
||||||
|
name: Temperature Sensor
|
||||||
|
selector:
|
||||||
|
entity:
|
||||||
|
domain: sensor
|
||||||
|
|
||||||
|
valve_closing_number:
|
||||||
|
name: Valve Closing Number
|
||||||
|
selector:
|
||||||
|
entity:
|
||||||
|
domain: number
|
||||||
|
|
||||||
|
valve_opening_number:
|
||||||
|
name: Valve Opening Number (optional)
|
||||||
|
default: null
|
||||||
|
selector:
|
||||||
|
entity:
|
||||||
|
domain: number
|
||||||
|
|
||||||
|
window_sensor:
|
||||||
|
name: Window Sensor / Input Boolean
|
||||||
|
selector:
|
||||||
|
entity:
|
||||||
|
domain:
|
||||||
|
- binary_sensor
|
||||||
|
- input_boolean
|
||||||
|
|
||||||
|
difference_text:
|
||||||
|
name: Temperature Difference (optional)
|
||||||
|
default: null
|
||||||
|
selector:
|
||||||
|
entity:
|
||||||
|
domain: input_text
|
||||||
|
|
||||||
|
triggers:
|
||||||
|
|
||||||
|
- platform: state
|
||||||
|
entity_id: !input radiator_climate
|
||||||
|
|
||||||
|
- platform: state
|
||||||
|
entity_id: !input temperature_sensor
|
||||||
|
|
||||||
|
- platform: state
|
||||||
|
entity_id: !input window_sensor
|
||||||
|
|
||||||
|
- platform: time_pattern
|
||||||
|
minutes: "/1"
|
||||||
|
|
||||||
|
#conditions:
|
||||||
|
# - condition: template
|
||||||
|
# value_template: >
|
||||||
|
# {{ states(climate_entity) not in ['unavailable', 'unknown'] }}
|
||||||
|
|
||||||
|
actions:
|
||||||
|
- variables:
|
||||||
|
climate_entity: !input radiator_climate
|
||||||
|
temp_entity: !input temperature_sensor
|
||||||
|
window_entity: !input window_sensor
|
||||||
|
closing_entity: !input valve_closing_number
|
||||||
|
opening_entity: !input valve_opening_number
|
||||||
|
diff_text_entity: !input difference_text
|
||||||
|
|
||||||
|
- variables:
|
||||||
|
window_closed: "{{ states(window_entity) in ['off', 'false', 'closed'] }}"
|
||||||
|
|
||||||
|
- choose:
|
||||||
|
- conditions:
|
||||||
|
- condition: template
|
||||||
|
value_template: "{{ window_closed }}"
|
||||||
|
sequence:
|
||||||
|
- variables:
|
||||||
|
target: "{{ state_attr(climate_entity, 'temperature') | float(0) }}"
|
||||||
|
current: "{{ states(temp_entity) | float(0) }}"
|
||||||
|
diff: "{{ current - target }}"
|
||||||
|
closing_degree: >
|
||||||
|
{% if diff >= 1.0 %} 100
|
||||||
|
{% elif diff >= 0.5 %} 80
|
||||||
|
{% elif diff >= 0.0 %} 60
|
||||||
|
{% elif diff >= -1.0 %} 50
|
||||||
|
{% else %} 30
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
- conditions:
|
||||||
|
- condition: template
|
||||||
|
value_template: "{{ not window_closed }}"
|
||||||
|
sequence:
|
||||||
|
- variables:
|
||||||
|
closing_degree: 0
|
||||||
|
|
||||||
|
- variables:
|
||||||
|
valve_entities: >
|
||||||
|
{% if opening_entity %}
|
||||||
|
{{ [closing_entity, opening_entity] }}
|
||||||
|
{% else %}
|
||||||
|
{{ [closing_entity] }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
- service: number.set_value
|
||||||
|
target:
|
||||||
|
entity_id: "{{ valve_entities }}"
|
||||||
|
data:
|
||||||
|
value: "{{ closing_degree }}"
|
||||||
|
|
||||||
|
- choose:
|
||||||
|
- conditions:
|
||||||
|
- condition: template
|
||||||
|
value_template: "{{ diff_text_entity != None }}"
|
||||||
|
sequence:
|
||||||
|
- service: input_text.set_value
|
||||||
|
target:
|
||||||
|
entity_id: "{{ diff_text_entity }}"
|
||||||
|
data:
|
||||||
|
value: "{{ closing_degree }}"
|
||||||
|
|
||||||
|
mode: queued
|
||||||
|
max: 5
|
||||||
199
dynamic_valve_test.yaml
Normal file
199
dynamic_valve_test.yaml
Normal file
@@ -0,0 +1,199 @@
|
|||||||
|
blueprint:
|
||||||
|
name: Dynamic Radiator Valve – Pro Configurator
|
||||||
|
description: >
|
||||||
|
Automatyczne sterowanie zaworem grzejnika na podstawie temperatury,
|
||||||
|
różnicy temperatur oraz statusu okna.
|
||||||
|
domain: automation
|
||||||
|
|
||||||
|
input:
|
||||||
|
radiator_climate:
|
||||||
|
name: Radiator (Climate)
|
||||||
|
description: Wybierz urządzenie klimatyczne (np. termostat grzejnika)
|
||||||
|
selector:
|
||||||
|
entity:
|
||||||
|
domain: climate
|
||||||
|
|
||||||
|
temperature_sensor:
|
||||||
|
name: Temperature Sensor
|
||||||
|
description: Sensor aktualnej temperatury w pomieszczeniu
|
||||||
|
selector:
|
||||||
|
entity:
|
||||||
|
domain: sensor
|
||||||
|
|
||||||
|
window_sensor:
|
||||||
|
name: Window Sensor / Input Boolean
|
||||||
|
description: Określ czujnik stanu okna lub pomocniczy input boolean
|
||||||
|
selector:
|
||||||
|
entity:
|
||||||
|
domain: - binary_sensor
|
||||||
|
- input_boolean
|
||||||
|
|
||||||
|
valve_closing_number:
|
||||||
|
name: Valve Closing Number
|
||||||
|
description: Number entity służąca do ustawiania poziomu zamknięcia zaworu
|
||||||
|
selector:
|
||||||
|
entity:
|
||||||
|
domain: number
|
||||||
|
|
||||||
|
valve_opening_number:
|
||||||
|
name: Valve Opening Number (optional)
|
||||||
|
description: (opcjonalnie) number entity do otwierania zaworu
|
||||||
|
default: null
|
||||||
|
selector:
|
||||||
|
entity:
|
||||||
|
domain: number
|
||||||
|
|
||||||
|
difference_text:
|
||||||
|
name: Temperature Difference (optional)
|
||||||
|
description: (opcjonalnie) input_text do zapisywania aktualnej różnicy
|
||||||
|
default: null
|
||||||
|
selector:
|
||||||
|
entity:
|
||||||
|
domain: input_text
|
||||||
|
|
||||||
|
# Advanced Options
|
||||||
|
min_diff_threshold:
|
||||||
|
name: Min Difference Threshold
|
||||||
|
description: Minimalna różnica względem target do otwarcia zaworu
|
||||||
|
default: 0.0
|
||||||
|
selector:
|
||||||
|
number:
|
||||||
|
unit_of_measurement: '°C'
|
||||||
|
min: -5
|
||||||
|
max: 5
|
||||||
|
step: 0.1
|
||||||
|
|
||||||
|
max_diff_threshold:
|
||||||
|
name: Max Difference Threshold
|
||||||
|
description: Maksymalna różnica do pełnego zamknięcia zaworu
|
||||||
|
default: 2.0
|
||||||
|
selector:
|
||||||
|
number:
|
||||||
|
unit_of_measurement: '°C'
|
||||||
|
min: 0
|
||||||
|
max: 10
|
||||||
|
step: 0.1
|
||||||
|
|
||||||
|
window_override:
|
||||||
|
name: Window Open Override
|
||||||
|
description: Gdy okno otwarte, czy zawory powinny zostać zamknięte?
|
||||||
|
default: true
|
||||||
|
selector:
|
||||||
|
boolean: {}
|
||||||
|
|
||||||
|
weekdays:
|
||||||
|
name: Operate on Weekdays
|
||||||
|
description: Wybierz dni, w których automatyka ma działać
|
||||||
|
default: ['mon','tue','wed','thu','fri','sat','sun']
|
||||||
|
selector:
|
||||||
|
select:
|
||||||
|
multiple: true
|
||||||
|
options:
|
||||||
|
- label: Monday
|
||||||
|
value: mon
|
||||||
|
- label: Tuesday
|
||||||
|
value: tue
|
||||||
|
- label: Wednesday
|
||||||
|
value: wed
|
||||||
|
- label: Thursday
|
||||||
|
value: thu
|
||||||
|
- label: Friday
|
||||||
|
value: fri
|
||||||
|
- label: Saturday
|
||||||
|
value: sat
|
||||||
|
- label: Sunday
|
||||||
|
value: sun
|
||||||
|
|
||||||
|
active_time:
|
||||||
|
name: Active Time Range
|
||||||
|
description: Określ ramy czasowe działania automatyki (opcjonalne)
|
||||||
|
selector:
|
||||||
|
time:
|
||||||
|
start: true
|
||||||
|
end: true
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
- platform: state
|
||||||
|
entity_id: !input radiator_climate
|
||||||
|
- platform: state
|
||||||
|
entity_id: !input temperature_sensor
|
||||||
|
- platform: state
|
||||||
|
entity_id: !input window_sensor
|
||||||
|
- platform: time_pattern
|
||||||
|
minutes: "/1"
|
||||||
|
|
||||||
|
condition:
|
||||||
|
- condition: time
|
||||||
|
weekday: !input weekdays
|
||||||
|
- condition: template
|
||||||
|
value_template: >
|
||||||
|
{{ states(!input radiator_climate) not in ['unavailable','unknown'] }}
|
||||||
|
|
||||||
|
action:
|
||||||
|
- variables:
|
||||||
|
climate_entity: !input radiator_climate
|
||||||
|
temp_entity: !input temperature_sensor
|
||||||
|
window_entity: !input window_sensor
|
||||||
|
closing_entity: !input valve_closing_number
|
||||||
|
opening_entity: !input valve_opening_number
|
||||||
|
diff_text_entity: !input difference_text
|
||||||
|
min_diff: !input min_diff_threshold
|
||||||
|
max_diff: !input max_diff_threshold
|
||||||
|
override_open: !input window_override
|
||||||
|
|
||||||
|
- variables:
|
||||||
|
target_temp: "{{ state_attr(climate_entity,'temperature')|float(0) }}"
|
||||||
|
current_temp: "{{ states(temp_entity)|float(0) }}"
|
||||||
|
diff: "{{ current_temp - target_temp }}"
|
||||||
|
|
||||||
|
- choose:
|
||||||
|
- conditions:
|
||||||
|
- condition: template
|
||||||
|
value_template: >
|
||||||
|
{{ override_open and (states(window_entity) in ['on','true','open']) }}
|
||||||
|
sequence:
|
||||||
|
- variables:
|
||||||
|
closing_degree: 0
|
||||||
|
|
||||||
|
- conditions:
|
||||||
|
- condition: template
|
||||||
|
value_template: >
|
||||||
|
{{ diff >= max_diff }}
|
||||||
|
sequence:
|
||||||
|
- variables:
|
||||||
|
closing_degree: 100
|
||||||
|
|
||||||
|
- conditions:
|
||||||
|
- condition: template
|
||||||
|
value_template: >
|
||||||
|
{{ diff <= min_diff }}
|
||||||
|
sequence:
|
||||||
|
- variables:
|
||||||
|
closing_degree: 30
|
||||||
|
|
||||||
|
default:
|
||||||
|
- variables:
|
||||||
|
closing_degree: >
|
||||||
|
{{ ((diff - min_diff) / (max_diff - min_diff) * 100) | round(0) }}
|
||||||
|
|
||||||
|
- service: number.set_value
|
||||||
|
data:
|
||||||
|
value: "{{ closing_degree }}"
|
||||||
|
target:
|
||||||
|
entity_id: >
|
||||||
|
{% if opening_entity %}
|
||||||
|
[{{ closing_entity }}, {{ opening_entity }}]
|
||||||
|
{% else %}
|
||||||
|
{{ closing_entity }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
- choose:
|
||||||
|
- conditions:
|
||||||
|
- condition: template
|
||||||
|
value_template: "{{ diff_text_entity != None }}"
|
||||||
|
sequence:
|
||||||
|
- service: input_text.set_value
|
||||||
|
data:
|
||||||
|
value: "{{ diff }}"
|
||||||
|
target:
|
||||||
|
entity_id: "{{ diff_text_entity }}"
|
||||||
3680
dynamic_valve_test_na_kurwie.yaml
Normal file
3680
dynamic_valve_test_na_kurwie.yaml
Normal file
File diff suppressed because it is too large
Load Diff
1
helloworld.yaml
Normal file
1
helloworld.yaml
Normal file
@@ -0,0 +1 @@
|
|||||||
|
temperature_sensorddddddssssdsadsa
|
||||||
62
motion_light.yaml
Normal file
62
motion_light.yaml
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
blueprint:
|
||||||
|
name: Motion-activated Light
|
||||||
|
description: Turn on a light when motion is detected.
|
||||||
|
domain: automation
|
||||||
|
source_url: https://github.com/home-assistant/core/blob/dev/homeassistant/components/automation/blueprints/motion_light.yaml
|
||||||
|
author: Home Assistant
|
||||||
|
input:
|
||||||
|
motion_entity:
|
||||||
|
name: Motion Sensor
|
||||||
|
selector:
|
||||||
|
entity:
|
||||||
|
filter:
|
||||||
|
- device_class:
|
||||||
|
- occupancy
|
||||||
|
domain:
|
||||||
|
- binary_sensor
|
||||||
|
- device_class:
|
||||||
|
- motion
|
||||||
|
domain:
|
||||||
|
- binary_sensor
|
||||||
|
multiple: false
|
||||||
|
reorder: false
|
||||||
|
light_target:
|
||||||
|
name: Light
|
||||||
|
selector:
|
||||||
|
target:
|
||||||
|
entity:
|
||||||
|
- domain:
|
||||||
|
- light
|
||||||
|
no_motion_wait:
|
||||||
|
name: Wait time
|
||||||
|
description: Time to leave the light on after last motion is detected.
|
||||||
|
default: 120
|
||||||
|
selector:
|
||||||
|
number:
|
||||||
|
min: 0.0
|
||||||
|
max: 3600.0
|
||||||
|
unit_of_measurement: seconds
|
||||||
|
step: 1.0
|
||||||
|
mode: slider
|
||||||
|
mode: restart
|
||||||
|
max_exceeded: silent
|
||||||
|
triggers:
|
||||||
|
trigger: state
|
||||||
|
entity_id: !input motion_entity
|
||||||
|
from: 'off'
|
||||||
|
to: 'on'
|
||||||
|
actions:
|
||||||
|
- alias: Turn on the light
|
||||||
|
action: light.turn_on
|
||||||
|
target: !input light_target
|
||||||
|
- alias: Wait until there is no motion from device
|
||||||
|
wait_for_trigger:
|
||||||
|
trigger: state
|
||||||
|
entity_id: !input motion_entity
|
||||||
|
from: 'on'
|
||||||
|
to: 'off'
|
||||||
|
- alias: Wait the number of seconds that has been set
|
||||||
|
delay: !input no_motion_wait
|
||||||
|
- alias: Turn off the light
|
||||||
|
action: light.turn_off
|
||||||
|
target: !input light_target
|
||||||
7969
smart-light.yaml
Normal file
7969
smart-light.yaml
Normal file
File diff suppressed because it is too large
Load Diff
75
test.yaml
Normal file
75
test.yaml
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
blueprint:
|
||||||
|
name: Sonoff TRVZB + External Temp AUTO
|
||||||
|
description: Auto sync external temperature for all Sonoff TRVZB devices
|
||||||
|
domain: automation
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
|
||||||
|
- platform: time_pattern
|
||||||
|
minutes: "/2"
|
||||||
|
|
||||||
|
- platform: homeassistant
|
||||||
|
event: start
|
||||||
|
|
||||||
|
|
||||||
|
variables:
|
||||||
|
|
||||||
|
sensors: >
|
||||||
|
{{ states.sensor
|
||||||
|
| map(attribute='entity_id')
|
||||||
|
| select('match','sensor\\..*_temperature.*')
|
||||||
|
| list }}
|
||||||
|
|
||||||
|
|
||||||
|
action:
|
||||||
|
|
||||||
|
- repeat:
|
||||||
|
|
||||||
|
for_each: "{{ sensors }}"
|
||||||
|
|
||||||
|
sequence:
|
||||||
|
|
||||||
|
- variables:
|
||||||
|
|
||||||
|
sensor_entity: "{{ repeat.item }}"
|
||||||
|
|
||||||
|
prefix: >
|
||||||
|
{{ sensor_entity.split('.')[1]
|
||||||
|
| regex_replace('_temperature.*','') }}
|
||||||
|
|
||||||
|
number_entity: "number.{{ prefix }}_temperature_input"
|
||||||
|
|
||||||
|
select_entity: "select.{{ prefix }}_temperature_sensor_select"
|
||||||
|
|
||||||
|
|
||||||
|
# sprawdź czy encje istnieją
|
||||||
|
- condition: template
|
||||||
|
value_template: >
|
||||||
|
{{ number_entity in states
|
||||||
|
and select_entity in states
|
||||||
|
and states(sensor_entity) not in ['unknown','unavailable'] }}
|
||||||
|
|
||||||
|
|
||||||
|
# ustaw external tylko gdy potrzeba
|
||||||
|
- if:
|
||||||
|
- condition: template
|
||||||
|
value_template: "{{ states(select_entity) != 'external' }}"
|
||||||
|
then:
|
||||||
|
- service: select.select_option
|
||||||
|
target:
|
||||||
|
entity_id: "{{ select_entity }}"
|
||||||
|
data:
|
||||||
|
option: external
|
||||||
|
|
||||||
|
|
||||||
|
- delay: "00:00:05"
|
||||||
|
|
||||||
|
|
||||||
|
- service: number.set_value
|
||||||
|
target:
|
||||||
|
entity_id: "{{ number_entity }}"
|
||||||
|
data:
|
||||||
|
value: "{{ states(sensor_entity) | float }}"
|
||||||
|
|
||||||
|
|
||||||
|
mode: single
|
||||||
Reference in New Issue
Block a user