Wie kann man den aktuellen Pollenflug in Home Assistant anzeigen? Home Assistant erlaubt es einem ja so ziemlich alles zu integrieren und anzuzeigen, also warum nicht auch den aktuellen Pollenflug in deiner Gegend?
Alles, was man hierfรผr benรถtigt, ist eine API, welche diese aktuellen Daten liefert. Diese API bindet man dann beispielsweise รผber den REST-Sensor ein und schon hat man die aktuellen Daten zum Pollenflug und kann diese in Home Assistant beliebig nutzen. Aber der Reihe nach! ๐
Inhaltsverzeichnis
Pollenflug in Home Assistant anzeigen
Wie eingangs bereits erwรคhnt, macht es Home Assistant einem sehr einfach Daten externer Anbieter einzubinden und zu nutzen. So ist es natรผrlich auch mรถglich sich den aktuellen Pollenflug in Home Assistant anzeigen zu lassen! Konkret werden wir fรผr die Anzeige des aktuellen Pollenflug in Home Assistant die Daten รผber eine REST-Api einbinden, diese dann auslesen um sie dann beliebig anzeigen/nutzen zu kรถnnen.
Was ist eine REST-Api?
Eine REST-Api ist eine Schnittstelle welche fรผr Representational state transfer [Wikipedia: REST] steht. รber eine Schnittstelle werden also Zustรคnde/Daten zum Abruf angeboten.
Solche Schnittstellen sind primรคr fรผr die Maschine-zu-Maschine-Kommunikation gedacht und genau dies wollen wir auch tun!
Anbieter wie Ambee erheben weltweit Daten zum aktuellen Wetter oder eben auch der Luftverschmutzung. Diese Daten stehen fรผr nahezu jeden Ort der Welt, mehr oder weniger genau, zur Verfรผgung. Ambee kann kommerziell genutzt werden und hierfรผr gibt es kostenpflichtige Accounts.
Ebenso bietet Ambee aber auch einen kostenlosen Account an, mit welchem 100 Datenabrufe pro Tag kostenlos mรถglich sind! Einen solchen Account/Plan werden wir nutzen und kรถnnen hierdurch in etwas 4 mal pro Stunde aktuelle Daten abrufen, ohne irgendwelche Kosten zu verursachen (24 Stunden x 4 Aufrufe die Stunde = 96 Aufrufe, was รผber das kostenlose Kontingent mรถglich ist).
Daten zum Pollenflug auslesen
Damit wir den Pollenflug in Home Assistant anzeigen kรถnnen, benรถtigen wir natรผrlich entsprechende Daten! Sobald du einen Account mit Basic-Plan hast, erhรคltst du einen Api Token. Mit diesem Api Token kannst du bereits auf die REST-Api zugreifen und alle von Ambee bereitgestellten Daten abrufen/nutzen.
Hierfรผr legen wir nun einen neuen Sensor in unserer Konfiguration an, dies kรถnnte in etwa wie folgt aussehen:
sensor:
- platform: rest
scan_interval: 1300
resource_template: https://api.ambeedata.com/latest/pollen/by-lat-lng?lat=47.11&lng=0.815
value_template: >-
{{ value_json.message}}
name: "Ambee Pollen"
headers:
content-type: "application/json"
x-api-key: !secret secret_ambee_api
json_attributes_path: data[0]
json_attributes:
- Count
- Risk
- Species
- updatedAt
- time
Ich beschrรคnke mich hierbei auf den Pollenflug durch Bรคume und Grรคser. Und natรผrlich musst du deinen eigenen Api-Token nutzen, sowie in der URL (also bei resource) deine eigenen Daten fรผr lat und lng (also Latitude und Longitude) eintragen.
Mit diesem Code sagen wir nun Home Assistant, dass alle 1200 Sekunden von dieser Api die Daten abgerufen werden sollen. 1200 Sekunden entspricht 20 Minuten und somit bleiben wir unterhalb der etwa 4 mรถglichen Abrufe pro Stunde um nicht aus Versehen Kosten zu verursachen! ๐
Damit uns die รผber den Api-Abruf bereitgestellten Daten nun noch etwas schรถner angezeigt werden, ergรคnzen wir unseren Sensor wie folgt:
#in Kombination mit dem zuvorgenannten Code bitte die folgende Zeile entfernen!
- platform: template
sensors:
ambee_pollen_tree:
icon_template: "mdi:tree-outline"
friendly_name: "Bรคume"
value_template: >-
{% set state = state_attr("sensor.ambee_pollen", "Risk").tree_pollen %}
{% if state == "Low" %}Niedrig
{% elif state == "Moderate"%}Mittel
{% elif state == "High"%}Hoch
{% elif state == "Very High"%}Sehr hoch
{% else %}Unbekannt{% endif %}
- platform: template
sensors:
ambee_pollen_weed:
icon_template: "mdi:nature"
friendly_name: "weed"
value_template: >-
{% set state = state_attr("sensor.ambee_pollen", "Risk").weed_pollen %}
{% if state == "Low" %}Niedrig
{% elif state == "Moderate"%}Mittel
{% elif state == "High"%}Hoch
{% elif state == "Very High"%}Sehr hoch
{% else %}Unbekannt{% endif %}
- platform: template
sensors:
ambee_pollen_grass:
icon_template: "mdi:grass"
friendly_name: "Grรคser"
value_template: >-
{% set state = state_attr("sensor.ambee_pollen", "Risk").grass_pollen %}
{% if state == "Low" %}Niedrig
{% elif state == "Moderate"%}Mittel
{% elif state == "High"%}Hoch
{% elif state == "Very High"%}Sehr hoch
{% else %}Unbekannt{% endif %}
Inspiriert wurde ich hierfรผr definitiv von Michi, welcher nahezu den kompletten ursprรผnglich hier in diesem Post genutzten Code auf GitHub verรถffentlicht hat – vielen Dank dafรผr! Durch รnderungen an der Ambee-API und eure hinweise hierauf, habe ich den Code entsprechend angepasst, so dass die gewรผnschten Daten wieder ausgegeben werden!
Was haben wir also soweit? Wir nutzen eine kostenlose Api, รผber welche wir die Luftdaten alle 20 Minuten abrufen und bereiten diese mittels Templates in den Variablen ambee_pollen_grass und ambee_pollen_tree etwas anschaulicher auf!
Aktuellen Pollenflug anzeigen
Durch den zuvor beschriebenen Code, stehen uns nun zwei neue Entities zu Verfรผgung, welche in Loveloce angezeigt werden kรถnnen. Auch hierfรผr bedarf es nur (sehr) wenige(r) Zeilen Code:
cards:
- type: glance
title: Pollenflug
entities:
- entity: sensor.ambee_pollen_grass
- entity: sensor.ambee_pollen_tree
Das Ergebnis sieht dann wie folgt aus:
Natรผrlich kann man mit den Daten der kostenlosen Api noch viel mehr Dinge anstellen. Wie wรคre es zum Beispiel mit automatischen Benachrichtigungen oder anderen Funktionen?
Produktempfehlungen
ich bekomme seit Tagen keine Werte mehr in der Lovelace Card angezeigt. Was prรผfe ich am besten erstmal ? (nur noch Unbekannt)
Hi Marco,
schau mal in den Logs, ob dir da eine Fehlermeldung gezeigt wird. Ebenso kannst du bei ambee selbst einmal nachschauen, was die sagen. Ggf. ist das kostenlose Limit (durch zu viele Aufrufe in zu kurzer Zeit) aufgebraucht?
VG
Olli
Hallo Olli,
Wenn ich in der Serversteuerung die Konfiguration prรผfe erhalte ich folgende Fehlermeldung.
Invalid config for [sensor.template]: expected dictionary for dictionary value @ data[’sensors‘][‚cards‘]. Got [OrderedDict([(‚type‘, ‚glance‘), (‚title‘, ‚Pollenflug‘), (‚entities‘, [OrderedDict([(‚entity‘, ’sensor.ambee_pollen_grass‘)]), OrderedDict([(‚entity‘, ’sensor.ambee_pollen_tree‘)])])])]. (See ?, line ?).
Hast Du einen Tipp fรผr mich? In der Config.yaml habe ich einen grรผnen Haken.
Hi Andrรฉ,
der Fehler scheint bei der Darstellung in Lovelace aufzukommen („…cards…glance“). Ich habe meinen Lovelace-Code aus dem Beitrag hier gerade 1:1 live getestet und es lรคuft ohne Probleme.
Hast du an der Darstellung Anpassungen vorgenommen? Kannst du deinen Lovelace-relevanten Code hier reinkopieren?
Hallo Olli, bewusst habe ich da nichts gendert. Ich hofe ich kopiere Dir das Richtige rein, wie gesagt bin ich blutiger Anfรคnger was YAML angeht. – platform: template
sensors:
ambee_pollen_tree:
icon_template: „mdi:tree-outline“
friendly_name: „Bรคume“
value_template: >-
{% set state = state_attr(’sensor.ambee_pollen‘, ‚tree_pollen‘) %}
{% if state == „Low“ %}Niedrig
{% elif state == „Moderate“ %}Mittel
{% elif state == „High“ %}Hoch
{% elif state == „Very High“ %}Sehr hoch
{% else %}Unbekannt{% endif %}
– platform: template
sensors:
ambee_pollen_grass:
icon_template: „mdi:grass“
friendly_name: „Grรคser“
value_template: >-
{% set state = state_attr(’sensor.ambee_pollen‘, ‚grass_pollen‘) %}
{% if state == „Low“ %}Niedrig
{% elif state == „Moderate“ %}Mittel
{% elif state == „High“ %}Hoch
{% elif state == „Very High“ %}Sehr hoch
{% else %}Unbekannt{% endif %}
cards:
– type: glance
title: Pollenflug
entities:
– entity: sensor.ambee_pollen_grass
– entity: sensor.ambee_pollen_tree
Okay, der Fehler liegt in der Lovelace-Card. Nutzt du Lovelace รผberhaupt im YAML-Modus? Wirf hier mal einen Blick drauf: https://www.home-assistant.io/lovelace/dashboards-and-views/
Mein Code mit „cards…“ kann nicht einfach so in die configuration.yaml kopiert werden, sondern muss als lovelace-Code platziert werden, also so wie hier https://www.home-assistant.io/lovelace/dashboards-and-views/#example gezeigt!
Moin,
funktioniert die Pollenabfrage bei dir noch mit den Befehlen oben?
Bei mir kommt immer nur „Unbekannt“ als Status.
Wenn ich auf Ambee schaue werden dort Abfragen protokoliert, aber irgendwie kommt es nicht im Dashboard an.
Moin moin! ๐
Tatsรคchlich war der Code fรผr den API-Call in der ursprรผnglichen Form nicht mehr funktional, da Ambee รnderungen an der API vorgenommen hatte. Ich habe im Beitrag den Code entsprechend aktualisiert und gerade an meinem System erfolgreich getestet.
Vielen Dank fรผr den Hinweis und sorry fรผr den „Fehler“!
Hallo Olli,
Ich finde gerade als Neuling in HA deinen Blog echt klasse.
Gerade versuche ich deine Pollenflugfunktion nachzustellen, leider vergeblich.
In YAML bin ich quasi ein Embryo, sicher habe ich nur etwas nicht richtig eingerรผckt oder so.
Kannst Du mich unterstรผtzen?
Gruร Andrรฉ
Hi Andrรฉ,
ich kann es gerne versuchen! ๐
Wo bekommst du denn eine Fehlermeldung?
VG
Olli
Ich habe gerade den Code fรผr den API-Call aktualisiert, da es seitens Ambee รnderungen an der API gegeben hat! ๐
Hallo Olli,
toller Ansatz, den ich gleich versucht habe, nachzubauen. Allerdings wirft Home-Assistant einen InvalidStateError „State max length is 255 characters.“ aus. Funktioniert bei Dir der Sensor aktuell noch? Wie kann ich den Fehler eingrenzen?
Hi!
Wo wird dir die Fehlermeldung angezeigt? Bei mir funktioniert es (aktuell) weiterhin einwandfrei.
Ich habe gerade den Code fรผr den API-Call aktualisiert, da es seitens Ambee รnderungen an der API gegeben hat! ๐