Erreur dans mon blueprint d'automatisation de volets

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 :grinning_face_with_smiling_eyes:

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…

:disappointed_relieved:

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
:slightly_smiling_face:

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 :grinning_face_with_smiling_eyes:

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
  • si pas de capteur de dormeur configuré

    • 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
  • si pas de capteur de dormeur et pas de capteur d’ouverture configurés

  • 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 »