Bonjour à tous,
Je tente de factoriser mes automatisations en utilisant l’action « choose » dans des Blueprints pour éviter l’explosion de mon automations.yaml
Forcément étant totalement newbie, ça coince.
Le Blueprint suivant doit permettre :
- de fermer un volet au crépuscule,
- d’ouvrir un volet à l’aube si la chambre n’est pas occupée
- de fermer un volet avant l’aube si la chambre est occupée
Tout ceci en prenant en compte l’état d’un capteur d’ouverture de fenêtre, si l’automatisation est activée (dans le Lovelace avec un input_boolean), en fonction de l’élévation du soleil considérée comme le crépuscule par l’utilisateur (dans le Lovelace avec un input_number)
Je n’ai pas d’erreur quand je fais un contrôle serveur, mais pour autant le template en comporte une selon le journal du core.
Merci par avance pour votre aide!
blueprint:
name: Ouverture et fermeture crépusculaire des volets
description: Ouvre et ferme les volets au crépuscule
domain: automation
input:
cover_target:
name: Volet
description: Le volet à fermer
selector:
entity:
domain: cover
sun_elevation:
name: Elévation soleil
description: Elévation du soleil d'ouverture et de fermeture du volet (input_number dans le Lovelace)
selector:
entity:
domain: input_number
activated_automation:
name: Actionneur activation règle
description: Activation / désactivaion de l'automatisme crépusculaire (input_boolean dans le Lovelace)
selector:
entity:
domain: input_boolean
opening_sensor:
name: Capteur ouverture de fenêtre / porte-fenêtre
description: Ouverture et fermeture du volet si la fenêtre associée est fermée (entité facultative)
default: {}
selector:
entity:
domain: binary_sensor
room_occupancy:
name: Occupation chambre
description: Ouverture du volet le matin si la pièce est inoccupée / Fermeture du volet avant l'aube si la pièce est occupée (entité facultative)
default: {}
selector:
entity:
domain: input_boolean
mode: single
trigger:
platform: numeric_state
entity_id: sun.sun
attribute: elevation
variables:
sun_elevation_var: !input sun_elevation
activated_automation_var: !input activated_automation
opening_sensor_var: !input opening_sensor
room_occupancy_var: !input room_occupancy
action:
choose:
- alias: "Fermeture volet crépuscule"
conditions:
- condition: template
value_template: >
{{ trigger.below | int sun_elevation_var and is_state(activated_automation_var,'on') and is_state(opening_sensor_var,'off') }}
sequence:
- service: cover.close_cover
target:
entity_id: !input cover_target
- alias: "Ouverture volet aube"
conditions:
- condition: template
value_template: >
{{ trigger.above | int sun_elevation_var and is_state(activated_automation_var,'on') and is_state(opening_sensor_var,'off') and is_state(room_occupancy_var,'off')}}
sequence:
- service: cover.open_cover
target:
entity_id: !input cover_target
- alias: "Fermeture volet aube si chambre occupée"
conditions:
- condition: template
value_template: >
{{ trigger.above | int sun_elevation_var -6 and is_state(activated_automation_var,'on') and is_state(room_occupancy_var,'on')}}
sequence:
- service: cover.open_cover
target:
entity_id: !input cover_target
Salut,
Sans doute que les erreurs du journal seraient un plus pour aider à diagnostiquer. Là comme ça c’est pas si facile
Bonjour Pulpy,
Bien sûr
2021-08-07 17:36:50 ERROR (MainThread) [homeassistant.components.automation] Blueprint Ouverture et fermeture crépusculaire des volets generated invalid automation with inputs OrderedDict([('sun_elevation', 'input_number.closing_cover_sun_elevation'), ('activated_automation', 'input_boolean.day_opening'), ('room_occupancy', 'input_boolean.occupation_bureau'), ('cover_target', 'cover.node_14'), ('opening_sensor', 'binary_sensor.capteur_d_ouverture_fenetre_bureau')]): invalid template (TemplateSyntaxError: expected token 'end of print statement', got 'sun_elevation_var') for dictionary value @ data['action'][0]['choose'][0]['conditions'][0]['value_template']. Got None
La syntaxe n’est pas correcte
Bonjour Clemalex,
Merci d’avoir déplacé mon message au bon endroit. Oui, je me doute bien que je n’ai pas utilisé la bonne syntaxe, mais je tourne en rond depuis un bout de temps sans succès…
Bonjour,
J’ai approfondi la rédaction de mon blueprint d’automatisation de volets.
Je n’ai plus d’erreur dans le journal et les actions de mon blueprint non conditionnées par des templates fonctionnent bien (ouverture / fermeture du volet à l’ouverture/fermeture de la fenêtre).
Je viens de tester ce soir la fermeture au crépuscule mais ça n’a rien déclenché.
Vous auriez une petite idée de ce qui cloche dans mon code?
Merci
blueprint:
name: Ouverture et fermeture crépusculaire des volets
description: Ouvre et ferme les volets au crépuscule
domain: automation
input:
cover_target:
name: Volet
description: Le volet à fermer
selector:
entity:
domain: cover
sun_elevation:
name: Elévation soleil
description: Elévation du soleil d'ouverture et de fermeture du volet (input_number dans le Lovelace)
selector:
entity:
domain: input_number
activated_automation:
name: Actionneur activation règle
description: Activation / désactivation de l'automatisme crépusculaire (input_boolean dans le Lovelace)
selector:
entity:
domain: input_boolean
opening_sensor:
name: Capteur ouverture de fenêtre / porte-fenêtre
description: Ouverture et fermeture du volet si la fenêtre associée est fermée (entité facultative)
default: {}
selector:
entity:
domain: binary_sensor
room_occupancy:
name: Occupation chambre
description: Ouverture du volet le matin si la pièce est inoccupée / Fermeture du volet avant l'aube si la pièce est occupée (entité facultative)
default: {}
selector:
entity:
domain: input_boolean
mode: single
variables:
var_opening_sensor: !input opening_sensor
var_room_occupancy: !input room_occupancy
var_activated_automation: !input activated_automation
trigger:
- platform: numeric_state
entity_id: sun.sun
attribute: elevation
above: !input sun_elevation
id: "aurore"
- platform: numeric_state
entity_id: sun.sun
attribute: elevation
below: !input sun_elevation
id: "crépuscule"
- platform: state
entity_id: !input opening_sensor
to: "on"
id: "fenêtre ouverte"
- platform: state
entity_id: !input opening_sensor
to: "off"
id: "fenêtre fermée"
action:
choose:
- alias: "Fermeture volet crépuscule"
conditions:
- condition: template
value_template: >
{{ trigger.id == 'crépuscule' and var_activated_automation == 'on' and (var_opening_sensor == none or (var_opening_sensor != none and is_state(var_opening_sensor,'off'))) }}
sequence:
- service: cover.close_cover
target:
entity_id: !input cover_target
- alias: "Ouverture volet aube si chambre innoccupée"
conditions:
- condition: template
value_template: >
{{ trigger.id == 'aurore' and var_activated_automation == 'on' and (var_opening_sensor == none or (var_opening_sensor != none and is_state(var_opening_sensor,'off'))) and (var_room_occupancy == none or (var_room_occupancy != none and is_state(var_room_occupancy,'off'))) }}
sequence:
- service: cover.open_cover
target:
entity_id: !input cover_target
- alias: "Fermeture volet aube si chambre occupée"
conditions:
- condition: template
value_template: >
{{ trigger.id == 'aurore' and var_activated_automation == 'on' and var_room_occupancy != none and is_state(var_room_occupancy,'on') }}
sequence:
- service: cover.close_cover
target:
entity_id: !input cover_target
- alias: "Ouverture volet si fenêtre ouverte"
conditions:
- condition: trigger
id: "fenêtre ouverte"
- condition: state
entity_id: !input activated_automation
state: "on"
sequence:
- service: cover.open_cover
target:
entity_id: !input cover_target
- alias: "Fermeture volet si fenêtre fermée"
conditions:
- condition: trigger
id: "fenêtre fermée"
- condition: state
entity_id: !input activated_automation
state: "on"
- condition: numeric_state
entity_id: sun.sun
attribute: elevation
below: !input sun_elevation
sequence:
- service: cover.close_cover
target:
entity_id: !input cover_target
Je me réponds à moi-même
J’ai fini par trouver une stratégie de contournement à mes problèmes de templates qui testent des entités non définies.
Du coup mon blueprint fonctionne et mon automation.yaml vient subitement de dégonfler. Il permet de gérer les volets en fonction des évènements aube / crépuscule. Le comportement est adaptable, en fonction de la configuration facultative, d’un capteur d’ouverture de fenêtre et d’un capteur de présence d’un dormeur.
Au final les actions possibles sont:
- si capteur d’ouverture de fenêtre configuré:
- Ouverture du volet à l’ouverture de la fenêtre
- Fermeture du volet à la fermeture du volet si nuit
*si capteurs de présence et dormeur configurés:
- fermeture du volet au crépuscule si la fenêtre est fermée
- ouverture du volet à l’aube si la fenêtre est fermée et qu’il n’y a pas de dormeur
- fermeture du volet à l’aube si présence de dormeur
- ouverture du volet après l’aube s’il n’y a plus de dormeur
- ouverture du volet à l’aube
- fermeture du volet au crépuscule
Je suis preneur d’idées pour améliorer le comportement des volets en fonction d’autres critères.
Je vais pousser un peu plus loin l’automatisation en ajoutant dans le blueprint la gestion des écrans solaires en fonction de l’azimut.
Le code pour ceux que ça intéresserait:
blueprint:
name: Automatismes crépusculaires de volets
description: Automatismes de volets en fonction de la position du soleil
domain: automation
input:
cover_target:
name: Volet
description: Volet à commander (obligatoire)
selector:
entity:
domain: cover
sun_elevation:
name: Elévation crépusculaire du soleil
description: Elévation du soleil déclenchant les automatismes du volet à partir de Lovelace (obligatoire)
selector:
entity:
domain: input_number
activated_automation:
name: Actionneur d'activation des automatismes créspuculaires
description: Activation / désactivation du blueprint à partir de Lovelace (obligatoire)
selector:
entity:
domain: input_boolean
opening_sensor:
name: Capteur ouverture de fenêtre / porte-fenêtre associé au volet
description: Amélioration des automatismes crépusculaires en fonction du capteur d'ouverture de fenêtre associé au volet (entité facultative)
default: {}
selector:
entity:
domain: binary_sensor
sleep_sensor:
name: Présence dormeur
description: Amélioration des automatismes crépusculaires en fonction de la présence de dormeurs dans la pièce (entité facultative)
default: {}
selector:
entity:
domain: input_boolean
mode: single
trigger:
- platform: numeric_state
entity_id: sun.sun
attribute: elevation
above: !input sun_elevation
id: "aurore"
- platform: numeric_state
entity_id: sun.sun
attribute: elevation
below: !input sun_elevation
id: "crépuscule"
- platform: state
entity_id: !input opening_sensor
to: "on"
id: "fenêtre ouverte"
- platform: state
entity_id: !input opening_sensor
to: "off"
id: "fenêtre fermée"
- platform: state
entity_id: !input sleep_sensor
to: "off"
id: "woke up"
variables:
var_opening_sensor: !input opening_sensor
var_sleep_sensor: !input sleep_sensor
var_activated_automation: !input activated_automation
action:
choose:
- alias: "Fermeture volet crépuscule si fenêtre fermée"
conditions:
- condition: template
value_template: >
{{ trigger.id == 'crépuscule' and is_state(var_activated_automation,'on') and is_state(var_opening_sensor,'off') }}
sequence:
- service: cover.close_cover
target:
entity_id: !input cover_target
- alias: "Dummy service : volet crépuscule si fenêtre ouverte"
conditions:
- condition: template
value_template: >
{{ trigger.id == 'crépuscule' and is_state(var_activated_automation,'on') and is_state(var_opening_sensor,'on') }}
sequence:
delay:
milliseconds: 1
- alias: "Fermeture volet crépuscule (absence de capteur d'ouverture de fenêtre)"
conditions:
- condition: template
value_template: >
{{ trigger.id == 'crépuscule' and is_state(var_activated_automation,'on') }}
sequence:
- service: cover.close_cover
target:
entity_id: !input cover_target
- alias: "Ouverture volet aube si absence dormeur et fenêtre fermée"
conditions:
- condition: template
value_template: >
{{ trigger.id == 'aurore' and is_state(var_activated_automation,'on') and is_state(var_opening_sensor,'off') and is_state(var_sleep_sensor,'off') }}
sequence:
- service: cover.open_cover
target:
entity_id: !input cover_target
- alias: "Fermeture volet aube si présence dormeur"
conditions:
- condition: template
value_template: >
{{ trigger.id == 'aurore' and is_state(var_activated_automation,'on') and is_state(var_sleep_sensor,'on') }}
sequence:
- service: cover.close_cover
target:
entity_id: !input cover_target
- alias: "Ouverture volet aube si fenêtre fermée (absence de capteur de dormeur)"
conditions:
- condition: template
value_template: >
{{ trigger.id == 'aurore' and is_state(var_activated_automation,'on') and is_state(var_opening_sensor,'off') }}
sequence:
- service: cover.open_cover
target:
entity_id: !input cover_target
- alias: "Dummy service : volet aube si fenêtre ouverte (absence de capteur de dormeur)"
conditions:
- condition: template
value_template: >
{{ trigger.id == 'aurore' and is_state(var_activated_automation,'on') and is_state(var_opening_sensor,'on') }}
sequence:
delay:
milliseconds: 1
- alias: "Ouverture volet aube (absence de capteur de dormeur et absence de capteur d'ouverture fenêtre)"
conditions:
- condition: template
value_template: >
{{ trigger.id == 'aurore' and is_state(var_activated_automation,'on') }}
sequence:
- service: cover.open_cover
target:
entity_id: !input cover_target
- alias: "Ouverture volet à l'ouverture fenêtre"
conditions:
- condition: trigger
id: "fenêtre ouverte"
- condition: state
entity_id: !input activated_automation
state: "on"
sequence:
- service: cover.open_cover
target:
entity_id: !input cover_target
- alias: "Fermeture volet à la fermeture fenêtre si nuit"
conditions:
- condition: trigger
id: "fenêtre fermée"
- condition: state
entity_id: !input activated_automation
state: "on"
- condition: numeric_state
entity_id: sun.sun
attribute: elevation
below: !input sun_elevation
sequence:
- service: cover.close_cover
target:
entity_id: !input cover_target
- alias: "Ouverture volet si plus de dormeurs"
conditions:
- condition: trigger
id: "woke up"
- condition: state
entity_id: !input sleep_sensor
state: "off"
- condition: numeric_state
entity_id: sun.sun
attribute: elevation
above: !input sun_elevation
sequence:
- service: cover.open_cover
target:
entity_id: !input cover_target
1 « J'aime »