Eigene Blaupause mit Templates

Hallo

Ich habe meine erste eigene Blaupause erstellt und brauch eure Hilfe. Ich habe eine bestehende Automation in eine Blaupause umgewandelt und war erstaunt, wie einfach dies ging.

Nun stehe ich aber bei folgendem Problem an:

Wie kann ich eine Entität, welche ich als Inputfeld in der Automation erfasse, in einem Template der Blaupause ansprechen. !Input geht nicht.

Ich denke mal, dass die Inputfelder in einem Template mit einer anderen Syntax angesprochen werden als im YAML.Trotz stundenlangem durchstöbern diverser Foren bin ich auf keine Lösung gestossen.

Hier noch ein paar Details zu meiner Blaupause (falls meine Frage zu wenig klar rüberkommt).

So sehen die Inputfelder meiner Automation aus:

alias: Fenstersteuerung Test 07
description: ""
use_blueprint:
  path: stefan59/fenstersteuerung.yaml
  input:
    fenstergruppe_input: binary_sensor.gruppe_fenster_og2_buero
    fenster1_input: binary_sensor.ftk_256_og2_buero_df
    fenstertext1_input: Das Dachfenster ist seit seit
    fenster2_input: binary_sensor.ftk_255_og2_buero_sf
    fenstertext2_input: Das Seitenfenster ist seit 
    fenstertext3_input: Das Dach- und das Seitenfenster sind seit
    meldedauer_input: 20
    raum_input: Test Fenster im Büro
    thermostat_input: sensor.wts_271_og2_buero_temperatur

Solange ich die Inputfelder direkt im YAML-Code anspreche, funktioniert es perfekt.

Beispiel:

            - conditions:
                - condition: state
                  entity_id: !input fenster2_input
                  state: "on"

Mache ich dasselbe in einem Template, dann funktioniert dies nicht.

Beispiel, welches läuft:

                    temperatur: >-
                      Temperaturdifferenz {{ (float (float
                      (states.sensor.wts_271_og2_buero_temperatur.state)) - (float
                      (states.sensor.innen_draussen_temperatur.state))) | round (1)}}°, aussen
                      {{states.sensor.innen_draussen_temperatur.state}}°, innen
                      {{states.sensor.wts_271_og2_buero_temperatur.state}}°  

Beispiel, welche nicht läuft

                    temperatur: >-
                      Temperaturdifferenz {{ (float (float
                      (states.!input raum_input.state)) - (float
                      (states.sensor.innen_draussen_temperatur.state))) | round (1)}}°, aussen
                      {{states.sensor.innen_draussen_temperatur.state}}°, innen
                      {{states.!input raum_input.state}}°  

Wenn ich also die Entitäts-ID (hier sensor.wts_271_og2_buero_temperatur) durch das Inputfeld (hier !input raum_input) ersetze, läuft die Automation nicht. Folgende Fehlermeldung wird beim Speichern der Automation angezeigt:

Message mailformed: template value should be a string for dictionary value @data[‘action’][0]’repeat’][‘sequence’][‘]’choose’[1][‘sequence’][0][‘data’]

Hier noch der gesamte YAML Code der Blaupause.

blueprint:
  name: Fenstersteuerung
  description: Steuerung der offenen Fenster
  domain: automation
  author: stefan59
  input:
    raum_input:
      name: Raumtext
      description: Titel der Pushover Meldung
      selector:
        text:
    fenstergruppe_input:
      name: Fenstergruppe
      selector:
        entity:
          domain:
            - binary_sensor
    fenster1_input:
      name: Fenster1
      description: Entität des 1. Fensters
      selector:
        entity:
          domain:
            - binary_sensor
          device_class: window
    fenstertext1_input:
      name: Fenstertext1
      description: Meldetext wenn nur das 1. Fenster offen ist
      selector:
        text:
    fenster2_input:
      name: Fenster2
      description: Entität des 2. Fensters
      selector:
        entity:
          domain:
            - binary_sensor
          device_class: window
    fenstertext2_input:
      name: Fenstertext2
      description: Meldetext wenn nur das 2. Fenster offen ist
      selector:
        text:
    fenstertext3_input:
      name: Fenstertext3
      description: Meldetext wenn beide Fenster offen sind
      selector:
        text:
    thermostat_input:
      name: Thermostat
      description: Entität des Innenthermostates
      selector:
        entity:
          domain:
            - sensor
    meldedauer_input:
      name: Meldedauer
      description: Intervall der Meldungen
      selector:
        number:
          min: 10
          max: 60
          unit_of_measurement: seconds
mode: single
trigger:
  - platform: state
    entity_id: !input fenstergruppe_input
    from: "off"
    to: "on"
    for:
      hours: 0
      minutes: 0
      seconds: !input meldedauer_input
condition:
  - condition: state
    entity_id: input_select.steuerung_fensterkontrolle
    state: Winter
action:
  - repeat:
      sequence:
        - choose:
            - conditions:
                - condition: and
                  conditions:
                    - condition: state
                      entity_id: !input fenster2_input
                      state: "on"
                    - condition: state
                      entity_id: !input fenster1_input
                      state: "on"
              sequence:
                - service: script.ftk_pushover_meldungen
                  metadata: {}
                  data:
                    betreff: !input raum_input
                    fenstertext: !input fenstertext3_input 
                    offenseit: >-
                      {{ (as_timestamp(now()) -        
                      as_timestamp(states.binary_sensor.gruppe_fenster_og2_buero.last_changed))    
                      |     timestamp_custom('%M',false) }} Minuten offen
                - delay:
                    hours: 0
                    minutes: 0
                    seconds: !input meldedauer_input
                    milliseconds: 0
            - conditions:
                - condition: state
                  entity_id: !input fenster2_input
                  state: "on"
              sequence:
                - service: script.ftk_pushover_meldungen
                  metadata: {}
                  data:
                    betreff: !input raum_input
                    fenstertext: !input fenstertext2_input
                    offenseit: >-
                      {{ (as_timestamp(now()) -        
                      as_timestamp(states.binary_sensor.gruppe_fenster_og2_buero.last_changed))    
                      |     timestamp_custom('%M',false) }} Minuten offen
                    temperatur: >-
                      Temperaturdifferenz {{ (float (float
                      (states.!input raum_input.state)) - (float
                      (states.sensor.innen_draussen_temperatur.state))) | round (1)}}°, aussen
                      {{states.sensor.innen_draussen_temperatur.state}}°, innen
                      {{states.!input raum_input.state}}°  
                - delay:
                    hours: 0
                    minutes: 0
                    seconds: !input meldedauer_input
                    milliseconds: 0
            - conditions:
                - condition: state
                  entity_id: !input fenster1_input
                  state: "on"
              sequence:
                - service: script.ftk_pushover_meldungen
                  metadata: {}
                  data:
                    betreff: !input raum_input
                    fenstertext: !input fenstertext1_input
                    offenseit: >
                      {{ (as_timestamp(now()) -        
                      as_timestamp(states.binary_sensor.gruppe_fenster_og2_buero.last_changed))    
                      |     timestamp_custom('%M',false) }} Minuten offen
                - delay:
                    hours: 0
                    minutes: 0
                    seconds: !input meldedauer_input
                    milliseconds: 0
      until:
        - condition: state
          entity_id: !input fenstergruppe_input
          state: "off"

Besten Dank für eure Hilfe

Stefan

Ich selbst verwende keine Blueprint die einen state benötigt aber eine kurze Recherche liefert mit das:
Vor den Triggern das hier einfügen

variables:
  input_sensor: !input fenstergruppe_input

Dort wo der state gebraucht wird dann

states[input_sensor].state

Angaben ohne Gewähr und ungetestet.

1 „Gefällt mir“

Besten Dank, so funktioniert es. Wieder etwas dazugelernt.