7 Minuten
Pixelclock: Custom App Collection

Grundsätzliches
Bei Custom Apps ist es, je nach Anwendungsfall, sinnvoll das MQTT-Flag retain: true
zu setzen. Nur so ist gewährleistet, dass eine Custom App den Neustart der Pixelclock übersteht und persistent angezeigt wird. Custom Apps leben ansonsten nur im RAM des ESP32 und werden bei einem Neustart gelöscht. Das Retain-Flag bewirkt, dass der MQTT-Broker bei einer Neuverbindung der Pixelclock erneut, die zuletzt gesendete Message an diese übermittelt.
Wann macht es Sinn das Retain-Flag zu nutzen:
Wenn Sensor Daten sich nicht häufig aktualisieren und somit der Trigger in Homeassistant nicht häufig auslöst. Startet man in diesem Fall die Pixelclock neu, kann es unter Umständen sehr lange dauern, bis ein neuer Wert gesendet wird. Die Custom App wäre bis zu diesem Zeitpunkt nicht aktiv.
Wann macht es keinen Sinn das Retain-Flag zu setzen:
Wenn Custom Apps automatisch bei einem Trigger X entfernt werden, siehe Beispiel der Spotify App. Es macht keinen Sinn die letzten Wiedergabeinformationen eines Songs am Broker vorzuhalten, da diese Info flüchtig ist und sich häufig ändert und der Song ggf. gar nicht mehr abgespielt wird, wenn die Pixelclock neugestartet wird.
Custom Apps
Folgend eine List an Custom App, die im Zusammenspiel mit Homeassistant an die Pixelclock gesendet werden können. Alle Daten werden direkt aus Homeassistant generiert und benötigen keinerlei externe Add-Ons, wie bspw. Node Red.
Zu jeder Custom App ist ein Logo von der LaMetric Developer Webseite verlinkt. Der nachfolgende Dateiname entspricht der Benennung im Filesystem der Pixelclock.
Spotify
Dargestellt wird der aktuell abgespielte Künstler und Songname, sowie ein Fortschrittsanzeige (Progressbar) für den aktuell abgespielten Song. Die Progressbar wird aus zwei Attributen des Media-Players errechnet. Der Name des Media-Players muss entsprechend an den Namen der eigenen Entity in Homeassistant angepasst werden.
Die App wird automatisch entfernt, wenn der State des Media-Player auf idle
oder paused
wechselt und keine Wiedergabe mehr erfolgt.

LaMetric Icon | 18207 / spotify.jpg |
Integration | Spotify |
Sensor | media_player.spotify |
Automation:
- alias: notify_pixelclock_spotify
trigger:
- platform: state
entity_id: media_player.spotify
action:
- choose:
- conditions:
- condition: state
entity_id: media_player.spotify
state: 'playing'
sequence:
- service: mqtt.publish
data:
qos: 2
retain: false
payload: >-
{
"text": "{{ state_attr('media_player.spotify', 'media_artist') }} - {{ state_attr('media_player.spotify', 'media_title') }}",
"icon": "spotify",
"rainbow": false,
"duration": 10,
"pushIcon": 0,
"textCase": 2,
"progress": {{ ( states.media_player.spotify.attributes.media_position / states.media_player.spotify.attributes.media_duration * 100 ) | round() }},
"progressC": "18B04C"
}
topic: pixelclock/custom/spotify
- conditions:
- condition: template
value_template: "{{ not states.media_player.spotify.state == 'playing' }}"
sequence:
- service: mqtt.publish
data:
qos: 2
retain: false
topic: pixelclock/custom/spotify
pr0gramm
Zeigt den Benis eines beliebigen Accounts auf einem großen deutschen Imageboard, über das niemand spricht. Der Username, beispielhaft horst
, muss entsprechend im API-Call angepasst werden.

LaMetric Icon | 26807 / pr0.jpg |
Integration | RESTful Sensor |
Sensor | sensor.pr0 |
Sensor:
- platform: rest
scan_interval: 3600
name: "Pr0 Benis"
unit_of_measurement: ''
value_template: '{{ value_json["user"]["score"] | int }}'
resource: 'https://pr0gramm.com/api/profile/info?name=horst'
Automation:
- alias: notify_pixelclock_pr0
trigger:
- platform: state
entity_id: sensor.pr0
action:
- service: mqtt.publish
data:
qos: 2
retain: true
payload: >-
{
"text": "{{ states.sensor.pr0.state }}",
"icon": "pr0"
}
topic: pixelclock/custom/pr0
Wetter
Für diese Custom App sind divere Icons erforderlich. Das exakte Vorgehen wurde bereits im vorhergehenden Post Ulanzi Smart Pixel Clock TC001 im Detail erläutert. Die Temperatur wird ganzzahlig gerundet dargestellt.

LaMetric Icon | Zu viele |
Integration | Weather |
Sensor | weather.openweathermap |
Automation:
- alias: notify_pixelclock_weather
trigger:
- platform: state
entity_id: weather.openweathermap
- platform: template
value_template: "{{ states.weather.openweathermap.attributes.temperature }}"
action:
- service: mqtt.publish
data:
qos: 2
retain: true
payload: >-
{
"text": "{{ states.weather.openweathermap.attributes.temperature | round(0) }} {{ states.weather.openweathermap.attributes.temperature_unit }}",
"icon": "{{ states('weather.openweathermap') }}",
"rainbow": false
}
topic: pixelclock/custom/weather
Bitcoin
Der aktuelle Kursstand des Bitcoins. Der Name des Sensors muss entsprechend angepasst werden.

LaMetric Icon | 10814 / bitcoin.jpg |
Integration | Bitcoin |
Sensor | sensor.exchange_rate_1_btc |
Automation:
- alias: notify_pixelclock_bitcoin
trigger:
- platform: state
entity_id: sensor.exchange_rate_1_btc
action:
- service: mqtt.publish
data:
qos: 2
retain: true
payload: >-
{
"text": "{{ states.sensor.exchange_rate_1_btc.state | round(0) }}",
"icon": "bitcoin"
}
topic: pixelclock/custom/bitcoin
Hochwasserportal
Als echte Nordblume ist der Pegelstand der Ostsee natürlich essentiell. Diese Custom App nutzt eine Custom Integration namens Hochwasserportal, die über HACS installiert werden kann. Drei variable Icons kommen für die Pegelstände zum Einsatz. Bei Hochwasser wird der Text in rot ausgegeben, bei Niedrigwasser in gelb.

LaMetric Icon | 24114 / water-level-low.gif |
LaMetric Icon | 24117 / water-level-normal.gif |
LaMetric Icon | 24120 / water-level-high.gif |
Custom Integration | Hochwasserportal |
Sensor | sensor.kiel_holtenau_ostsee_level |
- alias: notify_pixelclock_hochwasser
trigger:
- platform: state
entity_id: sensor.kiel_holtenau_ostsee_level
action:
- service: mqtt.publish
data:
qos: 0
retain: false
topic: pixelclock/custom/hochwasser
payload: >-
{
"text": "{{ states.sensor.kiel_holtenau_ostsee_level.state }} cm",
"textCase": 2,
"icon": {% if (states.sensor.kiel_holtenau_ostsee_level.state | int <= 379) %} "water-level-low"
{% elif (states.sensor.kiel_holtenau_ostsee_level.state | int >= 624) %} "water-level-high"
{% else %}"water-level-normal"
{% endif %},
"color": {% if (states.sensor.kiel_holtenau_ostsee_level.state | int <= 379) %} "#FFFF00"
{% elif (states.sensor.kiel_holtenau_ostsee_level.state | int >= 624) %} "#FF0000"
{% else %} "#FFFFFF"
{% endif %}
}
Instagram Follower
Angepasst werden muss der Name des Accounts in dem Parameter ressource
. Verwendet wird eine Custom Component, die das Scrapen von Webseiten ermöglicht und weiteraus mehr Funktionsumfang bietet als die native Scrape Integration von Homeassistant. Die Custom Component kann aus dem HACS Store installiert werden.

LaMetric Icon | 3741 / instagram.jpg |
Custom Integration | ha-multiscrape |
Sensor | sensor.instagram_followers_davidhasselhoff |
Sensor:
multiscrape:
- name: intagram_followers
resource: https://www.picnob.com/profile/davidhasselhoff/
scan_interval: 1800
sensor:
- unique_id: instagram_followers_davidhasselhoff
name: "D.Hasselhoff Instagram Followers"
select: ".item_followers > div:nth-child(2)"
Automation:
- alias: notify_pixelclock_instagram
trigger:
- platform: state
entity_id: sensor.instagram_followers_davidhasselhoff
action:
- service: mqtt.publish
data:
qos: 2
retain: true
payload: >-
{
"text": "{{ states.sensor.instagram_followers_davidhasselhoff.state | int() }}",
"icon": "instagram"
}
topic: pixelclock/custom/thehoff
Octoprint
Die Custom App zeigt den aktuellen Druckfortschritt in Prozent an. Wenn Octoprint während des Druckvorgangs in einen Fehler läuft, wird eine Nachricht dauerhaft auf der Pixelclock angezeigt, die aktiv durch einen Klick auf den mittleren Button entfernt werden muss. Ist der Druckvorgang beendet, wir die Custom App automatisch entfernt.

LaMetric Icon | 51841 / 3dprinter.jpg |
Integration | Octoprint |
Sensor | sensor.octoprint_current_state |
Sensor | sensor.octoprint_job_percentage |
Sensor | binary_sensor.octoprint_printing_error |
Automation:
- alias: notify_pixelclock_octoprint
initial_state: True
trigger:
- platform: template
value_template: "{{ not state('sensor.octoprint_current_state') == 'Printing' }}"
id: "idle"
- platform: state
entity_id: sensor.octoprint_job_percentage
id: "printing"
- platform: state
entity_id: binary_sensor.octoprint_printing_error
state: 'on'
id: "error"
action:
- choose:
- conditions:
- condition: trigger
id: "printing"
- condition: state
entity_id: sensor.octoprint_current_state
state: "Printing"
sequence:
- service: mqtt.publish
data:
qos: 2
retain: false
payload: >-
{
"text": "{{ (states('sensor.octoprint_job_percentage') | round(1) ) }}{{ state_attr('sensor.octoprint_job_percentage', 'unit_of_measurement') }}",
"icon": "3dprinter",
"duration": 10
}
topic: pixelclock/custom/octoprint
- conditions:
- condition: trigger
id: "idle"
sequence:
- service: mqtt.publish
data:
qos: 2
retain: false
topic: pixelclock/custom/octoprint
- conditions:
- condition: trigger
id: "error"
sequence:
- service: mqtt.publish
data:
qos: 2
retain: false
topic: pixelclock/custom/octoprint
- service: mqtt.publish
data:
qos: 2
retain: false
payload: >-
{
"text": "Error",
"icon": "3dprinter",
"textCase": 2,
"hold": true
}
topic: pixelclock/custom/octoprint
NINA Warnungen
Das Bundesamt für Bevölkerungsschutz und Katastrophenhilfe stellt über die NINA Integration ortsbezogene Warnmeldungen für die Bevöljkerung bereit. Diese Custom App prüft, ob eine Warnung vorliegt und nutzt das Indicator Feature von AWTRIX Light. Liegt eine Warnung vor, leuchtet der Indicator so lange über allen anderen Custom Apps rot, bis die Warnung aufgehoben wird. Bei Aufhebung der Warnung wird die Custom App automatisch entfernt.

LaMetric Icon | 9335 / warning.gif |
Integration | NINA |
Sensor | binary_sensor.warning_kiel_landeshauptstadt_1 |
Automation:
- alias: notify_pixelclock_warning
trigger:
- platform: state
entity_id: binary_sensor.warning_kiel_landeshauptstadt_1
action:
- choose:
- conditions:
- condition: state
entity_id: binary_sensor.warning_kiel_landeshauptstadt_1
state: "on"
sequence:
- service: mqtt.publish
data:
qos: 2
retain: false
payload: >-
{
"text": "{{ state_attr("binary_sensor.warning_kiel_landeshauptstadt_1", "headline") }}",
"icon": "warning",
"pushIcon": 2
}
topic: pixelclock/custom/nina
- service: mqtt.publish
data:
qos: 2
retain: false
payload: >-
{
"color": [255,0,0]
}
topic: pixelclock/indicator1
- conditions:
- condition: state
entity_id: binary_sensor.warning_kiel_landeshauptstadt_1
state: "off"
sequence:
- service: mqtt.publish
data:
qos: 2
retain: false
topic: pixelclock/custom/nina
- service: mqtt.publish
data:
qos: 2
retain: false
topic: pixelclock/indicator1
Homeassistant Timer
Homeassistant hat eine Timer Integration, die auf dem Eventbus feuert, wenn ein Timer abgelaufen ist. Wie bereits im Post ControllerX und Homeassistant beschrieben, nutze ich diese für meine Waschmaschine. Verwendet wird ein Tradfri Shortcut Button. Wenn der Button einfach gedrückt wird startet ein Timer für eine 40° Wäsche, wird er gedrückt gehalten startet ein Timer für die 60° Wäsche.
Ist einer der beiden Timer abgelaufen lauscht eine Automation auf dem Eventbus
Timer Configuration:
Die Werte müssen entsprechend der Waschdauer des eigenen Geräts angepasst werden.
laundry_40:
duration: '01:58:00'
laundry_60:
duration: '02:09:00'
Automation:
- alias: notify_pixelclock_laundy_finished
trigger:
- platform: event
event_type: timer.finished
event_data:
entity_id: timer.laundry_40
- platform: event
event_type: timer.finished
event_data:
entity_id: timer.laundry_60
action:
- service: mqtt.publish
data:
qos: 2
retain: false
payload: >-
{
"text": "Fertig",
"icon": "laundry",
"hold": true
}
topic: pixelclock/notify
LaMetric Icon | 26671 / laundry.gif |
Integration | Timer |
Ressources
hivemq.com | MQTT Retained Messages |
pixelclock spotify awtrix-light esp32
homeautomation media-player microcontroller notify mqtt
1406 Wörter
2023-04-29 11:29