Im Post Pixelclock: Custom App Collection wurde bereits eine Custom App zur Anzeige des Bitcoin Kurses auf der Ulanzi Pixelclock vorgestellt. Diese nutzt die Bitcoin Integration und stellt den aktuellen Kurs auf dem Display dar:
Vorhaben
Ziel dieses Beitrags ist Home Assistants mächtige Funktion der Automation Templates näherzubringen und diese zu nutzen, um die bestehende Custom App zu optimieren. Dazu wird die Automation erweitert und die Trigger Data verwendet, um den dargestellten Text des Bitcoin Kurse einzufärben. Steigt der Kurs, gegenüber dem zuletzt gelieferten Ausgangswert, wird der Text grün dargestellt. Fällt der Kurs, wird er in roter Textfarbe ausgegeben. Ist der Wert gleichbleibend erfolgt eine Ausgabe in Gelb:
Zur Einfärbung des Texts muss die State Trigger Data herangezogen werden, die zwei Variablen namens trigger.from_state und trigger.to_state bereitstellt:
Automation anpassen
Die Farbausgabe auf dem Display wird über den Payload Key color definiert. Zuvor muss jedoch ermittelt werden, ob der letzte gelieferte Wert des Sensors sensor.exchange_rate_1_btc größer oder kleiner ist als der aktuelle Wert:
alias: notify_pixelclock_bitcoin
trigger:
- trigger: state
entity_id: sensor.exchange_rate_1_btc
action:
- action: mqtt.publish
data:
qos: 2
retain: true
topic: pixelclock/custom/bitcoin
payload: >-
{
"text": "{{ states('sensor.exchange_rate_1_btc') | round(0) }}",
"icon": "bitcoin",
"color": {% if is_number(trigger.from_state.state) and (float(trigger.to_state.state,default=0) > float(trigger.from_state.state,default=0)) %}
"#006400"
{% elif is_number(trigger.from_state.state) and (float(trigger.to_state.state,default=0) < float(trigger.from_state.state,default=0)) %}
"#FF0000"
{% else %}
"#FFCC00"
{% endif %}
}Handelt es sich beim aktuellen Sensorwert um einen numerischen Wert (is_number()) und ist dieser größer als der vorherige Wert wird der Text nun in Grün ausgegeben:
Fällt der aktuelle Kurs, wird der Text Rot ausgegeben:
Im Falle eines gleichbleibenden Werts, wird der Text in gelber Farbe ausgegeben.