Skip to content

Instantly share code, notes, and snippets.

@piitaya
Last active July 11, 2023 15:59
Show Gist options
  • Save piitaya/3ef9de56183dcdcfd4fb38c51c8a4f04 to your computer and use it in GitHub Desktop.
Save piitaya/3ef9de56183dcdcfd4fb38c51c8a4f04 to your computer and use it in GitHub Desktop.
Sun Protection for Shutter
blueprint:
name: Protection du soleil
author: Piitaya
description: Règle le volet en fonction de la position du soleil.
source_url: https://gist.github.com/piitaya/3ef9de56183dcdcfd4fb38c51c8a4f04
domain: automation
input:
shutter:
name: Volet
description: Volet à contrôler
selector:
entity:
domain: cover
multiple: false
azimuth:
name: Azimuth
description: Entité représentant l'azimuth du soleil. Une entrée numérique peut être utilisée à des fins de tests.
selector:
entity:
filter:
- domain: sensor
integration: sun
- domain: input_number
multiple: false
opening_sensor:
name: Capteur d'ouverture
description: Le volet utilisera la position non-exposée si la fenêtre est ouverte.
default: ""
selector:
entity:
filter:
domain: binary_sensor
device_class:
- opening
- window
- door
- garage_door
position_exposed:
name: Ouverture du volet au soleil
description: L'ouverture du volet sera réglée à cette valeur si le volet est exposé au soleil.
default: 15
selector:
number:
min: 5
max: 100
mode: slider
step: 5
unit_of_measurement: "%"
position_unexposed:
name: Ouverture du volet à l'ombre
description: L'ouverture du volet sera réglée à cette valeur si le volet n'est pas exposé au soleil.
default: 100
selector:
number:
min: 5
max: 100
mode: slider
step: 5
unit_of_measurement: "%"
position_tolerance:
name: Tolérance d'ouverture
description: L'ouverture du volet ne bougera pas si elle est proche de la position souhaitée plus ou moins cette tolérance.
default: 10
selector:
number:
min: 0
max: 100
mode: slider
step: 5
unit_of_measurement: "%"
shutter_orientation:
name: Orientation du volet
description: Orientation du volet par rapport au nord. 0° correspond à une orientation plein nord.
selector:
number:
min: 0
max: 355
mode: slider
step: 5
unit_of_measurement: "°"
shutter_max_sun_angle:
name: Angle d'incidence maximal du soleil par rapport au volet
description: Le volet sera consideré comme exposé si l'angle entre le volet et le soleil est inférieur à cette valeur.
default: 90
selector:
number:
min: 0
max: 180
mode: slider
step: 5
unit_of_measurement: "°"
minimal_sun_elevation:
name: Élevation minimale du soleil
description: Le volet ne sera pas controlé si l'élévation soleil est en dessous de cette valeur.
default: 15
selector:
number:
min: 0
max: 180
mode: slider
step: 5
unit_of_measurement: "°"
custom_actions:
name: "Actions personnalisées"
description: "Ces actions seront éxecutées avant l'ouverture ou la fermeture des volets. Elles peuvent être utilisées pour ajouter une condition personalisée."
default: []
selector:
action:
mode: parallel
max: 100
trigger_variables:
opening_sensor_entity: !input opening_sensor
variables:
position_tolerance: !input position_tolerance
position_exposed: !input position_exposed
position_unexposed: !input position_unexposed
shutter_orientation: !input shutter_orientation
shutter_entity: !input shutter
azimuth_entity: !input azimuth
opening_sensor_entity: !input opening_sensor
shutter_max_sun_angle: !input shutter_max_sun_angle
trigger:
- platform: state
alias: Quand la position du soleil change
entity_id: !input azimuth
to: null
- platform: template
alias: Quand le capteur d'ouverture passe à l'état ouvert
value_template: "{{ is_state(opening_sensor_entity, 'on') }}"
- platform: template
alias: Quand le capteur d'ouverture passe à l'état fermé
value_template: "{{ is_state(opening_sensor_entity, 'off') }}"
condition:
- condition: state
alias: Si le volet est ouvert
entity_id: !input shutter
state: open
action:
- choose: []
alias: "Execute les actions personnalisées"
default: !input custom_actions
- if:
- condition: not
alias: "Si la fenêtre n'est pas ouverte"
conditions:
- condition: template
value_template: "{{ is_state(opening_sensor_entity, 'on') }}"
- condition: template
alias: "Si la fenêtre est exposée"
value_template: >-
{% set sun_azimuth = states(azimuth_entity) | int %}
{{ (sun_azimuth - shutter_orientation) | abs < shutter_max_sun_angle }}
- condition: numeric_state
alias: "Si le soleil est assez haut"
entity_id: sensor.sun_solar_elevation
above: !input minimal_sun_elevation
then:
- condition: template
value_template: >-
{% set shutter_position = state_attr(shutter_entity, 'current_position') | int %}
{{ (shutter_position - position_exposed) | abs > position_tolerance }}
- service: cover.set_cover_position
data:
position: "{{ position_exposed }}"
target:
entity_id: !input shutter
else:
- condition: template
value_template: >-
{% set shutter_position = state_attr(shutter_entity, 'current_position') | int %}
{{ (shutter_position - position_unexposed) | abs > position_tolerance }}
- service: cover.set_cover_position
data:
position: "{{ position_unexposed }}"
target:
entity_id: !input shutter
enabled: true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment