Was findet man im Urwald auf dem Boden? Richtig, Urlaub. Genau so ein Witz landet bei mir jeden Tag automatisch auf dem Dashboard, abgerufen von einer öffentlichen REST API. Klingt nach Spielerei, ist aber das perfekte Übungsprojekt: Wenn du das Muster einmal nachgebaut hast, holst du dir damit jede beliebige Web-API in dein Home Assistant. Im Video zeige ich den kompletten Weg, hier liest du ihn nach.
Eine Kachel, ein Sensor, eine API
Auf meinem Dashboard sitzt eine Kachel namens "Joke of the Day". Dahinter steckt kein Zauber, sondern eine simple Kette: Eine API im Internet liefert auf Anfrage ein JSON-Objekt, ein REST-Sensor in Home Assistant fragt sie regelmäßig ab und speichert die Antwort, und eine Dashboard-Karte zeigt den Sensorwert an.
Die Witz-API ist dabei austauschbar. Wetterdaten, Verkehrsinfos, der Status deines Servers, alles funktioniert nach demselben Prinzip, solange der Dienst eine API anbietet. Ein Tipp vorweg: Schau erst, ob es für deinen Dienst schon eine fertige Integration gibt. Die ist meist komfortabler als der Eigenbau. Für die Lücken dazwischen ist der REST-Sensor da.
Der REST-Sensor hinter der Kachel
Meine Sensoren liegen nicht alle in der configuration.yaml, sondern in ausgelagerten Dateien. Im Video suche ich den Witz-Sensor erst in der sensor.yaml und finde ihn dann in der rest.yaml, ich habe mittlerweile so viele Dateien, dass ich selbst kurz den Überblick verliere. Falls dir das Auslagern noch nichts sagt, hilft der YAML-Guide. Der Sensor selbst:
1- platform: rest
2 resource: "https://icanhazdadjoke.com/"
3 name: Joke of the Day
4 headers:
5 Accept: application/json
6 User-Agent: Home Assistant
7 scan_interval: 43200
8 value_template: "{{ value_json.joke }}"Die resource ist die Quelle, also die API-Adresse. Die headers brauchst du nicht immer, hier aber schon: Accept: application/json sagt der API, dass du JSON willst und keine Webseite, und als User-Agent meldet sich Home Assistant mit Namen. Das scan_interval von 43200 Sekunden bedeutet zwölf Stunden, der Sensor holt sich also zweimal am Tag einen frischen Witz. Im Video verrechne ich mich an der Stelle erst munter, am Ende stimmt es.
Bleibt das value_template. Die API antwortet mit einem Objekt aus drei Keys: einer ID, dem Witz und einem Status. Steht dort 200, war die Anfrage erfolgreich. Uns interessiert nur der Witz, deshalb greift value_json.joke genau dieses Feld ab. Bei deiner API heißen die Felder anders, wirf also einen Blick in deren Dokumentation. Wie du auch verschachtelte Antworten auseinandernimmst, zeige ich im Video zum RESTful Sensor mit Template-Sensoren.
Vom Sensor zur Dashboard-Karte
Nach dem Neuladen der Konfiguration prüfst du in den Entwicklerwerkzeugen unter Zuständen, ob der Sensor lebt. Such nach "joke", und du solltest den aktuellen Witz als Zustand sehen.
Auf dem Dashboard ist es dann Geschmackssache. Ich nutze eine Mushroom Card: Icon, Iconfarbe, als primäre Information der Titel "Joke of the Day" und als sekundäre Information der Sensorwert, also der Witz. Eine ganz normale Entitäten-Karte tut es genauso, die Mushroom Card ist einfach ein bisschen hübscher. Sie kommt über HACS auf dein System, Pflicht ist sie nicht. Wie Dashboards, Karten und Entitäten zusammenhängen, erklärt der Guide Dashboard verstehen.
Aktualisierung zur festen Uhrzeit
Das scan_interval zählt ab dem Start des Sensors. Wann genau die zwölf Stunden um sind, hängt also davon ab, wann du ihn angelegt hast. Schöner ist oft eine feste Uhrzeit, etwa jeden Morgen zum Frühstück:
1automation:
2 - alias: Witz des Tages aktualisieren
3 trigger:
4 - platform: time
5 at: "07:00:00"
6 action:
7 - service: homeassistant.update_entity
8 target:
9 entity_id: sensor.joke_of_the_dayDer Service homeassistant.update_entity stößt die Abfrage manuell an, unabhängig vom Intervall. Diese Erweiterung und die komplette Konfiguration zum Kopieren findest du in meinem Snippet zu REST-Daten im Dashboard.
Und wenn der Sensor erst mal läuft, geht noch mehr: Schick dir den Witz als Push-Nachricht aufs Handy, lass ihn dir morgens von Alexa vorlesen oder kombiniere ihn mit einer Automation. Schreib mir gern in die Kommentare unter dem Video, was du aus dem Muster gebaut hast. Das interessiert mich wirklich.
Häufige Fragen
Warum bekomme ich HTML statt JSON von der API?
Viele APIs liefern je nach Anfrage unterschiedliche Formate aus. Ohne weitere Angaben bekommst du dann die Webseiten-Version statt der Rohdaten. Die Lösung ist der Header Accept: application/json in der Sensor-Konfiguration, damit forderst du explizit JSON an. Manche Dienste verlangen außerdem einen gesetzten User-Agent, sonst lehnen sie die Anfrage ab.
Brauche ich die Mushroom Card für die Anzeige?
Nein. Jede Karte, die Entitäten anzeigen kann, funktioniert, auch die eingebaute Entitäten-Karte ohne Zusatzinstallation. Die Mushroom Card sieht moderner aus und lässt dir mehr Gestaltungsfreiheit bei Icon und Textzeilen, dafür musst du sie über HACS nachinstallieren. Für den Anfang reicht Bordmittel völlig.
Welche Daten kann ich so auf dem Dashboard anzeigen?
Alles, was eine API im JSON-Format hergibt: Wetterdaten, Verkehrsmeldungen, Serverstatus, Statistiken oder eben Witze. Prüfe vorher in der API-Dokumentation, wie die Antwort aufgebaut ist und ob du dich authentifizieren musst. Und schau zuerst nach einer fertigen Integration, der Eigenbau lohnt sich vor allem für Nischen-APIs ohne Home-Assistant-Anbindung.
Was bedeutet der Status 200 in der API-Antwort?
Das ist ein HTTP-Statuscode und heißt schlicht: Anfrage erfolgreich, gültige Antwort erhalten. Codes ab 400 deuten auf Fehler hin, etwa eine falsche Adresse (404) oder fehlende Berechtigung (401). Wenn dein Sensor leer bleibt, lohnt der Blick auf diesen Status, am einfachsten per Aufruf der API-URL im Browser.
