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.
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 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 ~ ' %'}}