Binary Sensor mit Value Template Thema ist als GELÖST markiert

Bereich rings rum zum Thema Yaml und seine Tücken.


Antworten
Benutzeravatar
Friedi
Beiträge: 428
Registriert: Do 22. Jul 2021, 16:57
2
Has thanked: 34 times
Been thanked: 21 times

Binary Sensor mit Value Template

Beitrag von Friedi »

Ich habe das Problem bei einem binary_sensor, dass dieser auf einen Kalendereintrag einen Tag in der Zukunft aufbaut. Dazu habe ich mal folgendes gebaut:

Code: Alles auswählen

    urlaub_marco_tomorrow:
      friendly_name: "Urlaub Marco (morgen)"
      value_template: >-
        {% if now().timestamp() >= as_timestamp(state_attr('calendar.gemeinsam_urlaub_marco', 'start_time')) - 3600*24 and 
          now().timestamp() <= as_timestamp(state_attr('calendar.gemeinsam_urlaub_marco', 'end_time')) - 3600*24 %}
          on
        {% else %}
          off
        {% endif %}
        
Solange am nächsten Tag tatsächlich ein Termin in calendar.gemeinsam_urlaub_marco vorhanden ist, ist das alles kein Problem. Wenn aber nun kein Termin da ist, wird der Sensor unverfügbar.
Eigentlich hoffte ich, dass ich das eben mit der else-Bedingung abfangen kann. Dem ist aber wohl nicht so.

Hat irgendwer ne Idee, wie man so was abfängt? Oder wie man anders auf einen CalDAV-Termin in der Zukunft aufbauen kann (auch wenn dann ggf. kein Termin vorhanden ist)?
Benutzeravatar
Friedi
Beiträge: 428
Registriert: Do 22. Jul 2021, 16:57
2
Has thanked: 34 times
Been thanked: 21 times

Re: Binary Sensor mit Value Template

Beitrag von Friedi »

Falls das noch jemand mal benötigen sollte, hier meine Lösung. Ich weiß nicht, ob es bessere Lösungen gibt, aber die hier funktioniert:

Code: Alles auswählen

    urlaub_marco_tomorrow:
      friendly_name: "Urlaub Marco (morgen)"
      value_template: >-
        {{ now().timestamp() >= as_timestamp(state_attr('calendar.gemeinsam_urlaub_marco', 'start_time'), now().timestamp() + 3600*24) - 3600*24 and
          now().timestamp() <= as_timestamp(state_attr('calendar.gemeinsam_urlaub_marco', 'end_time'), now().timestamp() + 3600*24) - 3600*24 }}
Antworten