Hilfe bei einem Template-Sensor (Text Sensor Zeit zu Prozent)

Hallo,

danke, dass du vorbeischaust! Ich brauche Hilfe mit einem Template-Sensor. Ich habe eine ESP32 Box3 S3 mit einer Custom Firmware von BigBobbas. Damit erhält man einen Sensor, der die verbleibende Zeit eines Timers anzeigt, den man mit dem Sprachassistenten erstellt hat. Da ich gerne einen visuellen Timer mit WLED umsetzen möchte, brauche ich einen Template-Sensor, der die Zeit in Prozent umrechnet.

Der Sensor zeigt standardmäßig immer 0:00:00 an. Sobald man einen Timer per Sprache setzt, ändert sich der Wert auf den gewünschten Countdown. Zum Beispiel wird ein 12-Minuten-Timer als 0:12:00 angezeigt und läuft dann herunter.

Ich habe versucht, die Version für Alexa-Timer zu modifizieren, aber dieser hat keine Statusattribute. Daher habe ich aktuell Schwierigkeiten. Vielleicht kann mir ja jemand helfen!

Bonusfrage: Ist es möglich, die verbleibende Zeit auch auf einer Awtrix-LED-Matrix-Uhr anzuzeigen? Dieses Gerät wird gerade nicht genutzt und wäre eine großartige Ergänzung.

Vielen Dank und beste Grüße!

Spontan dachte ich, das ist ein Kurzer über einen Template Sensor (wandelst die Zeiten in Sekunden und setzt sie ins Verhältnis) aber Details machen wieder den Unterschied :slight_smile: Konkret, Template Sensor wird minütlich aktualisiert aber woher weiß er denn den Ausgangswert?

Folgenden Konstrukt könnte ich mir vorstellen.

Eine Automatisation speichert bei Timerstart die Dauer als Sekunden in einen Basis Helfer. Auf diese Basis bezieht sich dann die Berechnung im Template Helfer.

  • Anlegen eines input_number.duration_timer_sec
  • Dann Automatisation zum Setzen des Helfer bei Start/Stop des Timers
alias: 1 forum timer
description: ""
triggers:
  - trigger: template
    value_template: >-
      {# Die Abfrage des Timers sollte Format 'hh:mm:mm' zurückgeben #}
      {% set time_string = states('timer.my_timer') | string %}
      {{ true if time_string.count('0') < 6 else false }}
    id: TimerGestartet
  - trigger: template
    value_template: >-
      {# Die Abfrage des Timers sollte Format 'hh:mm:mm' zurückgeben #}
      {% set time_string = states('timer.my_timer') | string %}
      {{ true if time_string.count('0') == 6 else false }}
    id: TimerBeendet
conditions: []
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - TimerGestartet
        sequence:
          - action: input_number.set_value
            data:
              value: >-
                {# Die Abfrage des Timers muß das Format 'hh:mm:mm' zurückgeben
                oder es wird 1 gespeichert #} 
                {% set time_string = states('timer.my_timer') | string %}
                {% set seconds = 1 %}
                {% set parts = time_string.split(':') %}
                {% if parts | length == 3 %}
                  {% set seconds = (parts[0] | int * 3600) + (parts[1] | int * 60) + (parts[2] | int) %}
                {% endif %}
                {{ seconds }}
            target:
              entity_id: input_number.duration_timer_sec
  - choose:
      - conditions:
          - condition: trigger
            id:
              - TimerBeendet
        sequence:
          - action: input_number.set_value
            data:
              value: 0
            target:
              entity_id: input_number.duration_timer_sec
mode: single
  • Am Ende eines Template Sensor über UI und diesen Code verwenden
{% set output = 0 %}
{# Prüfung on Timer läuft bzw. Fehler vorliegt (0 = stopp, 1= Formatfehler), wird über Automatisation gesetzt #}
{% if states('input_number.duration_timer_sec') | float > 1 %}
  {# Die Abfrage des Timers muß wirklich die Zeit zurückgeben im Format 'hh:mm:mm'#}
  {% set time_string = states('timer.my_timer') | string %}
  {% set seconds = 1 %}
  {% set parts = time_string.split(':') %}
  {% if parts | length == 3 %}
    {% set seconds = (parts[0] | int * 3600) + (parts[1] | int * 60) + (parts[2] | int) %}
  {% endif %}
  {% set output = (seconds / states('input_number.duration_timer_sec') | float * 100) | int %}
{% endif %}
{{output ~ ' %'}}

Gutes Gelingen!

1 „Gefällt mir“