In einem รคlteren Beitrag hatte ich ja bereits รผber das Betreiben eines Luftdaten.info-Sensors geschrieben. Da ich immer versucht bin mein Smarthome so lokal wie mรถglich zu betreiben (also mรถglichst alle Abhรคngigkeiten von nicht in meinem lokalen Netzwerk liegenden Daten zu eleminieren), musste auch noch mein Feinstaub-Sensor „anders“ eingebunden werden.
Aber der Reihe nach… ๐
Luftdaten.info heiรt mittlerweile Sensor.community (offizieller Link) und bietet jedem die Mรถglichkeit zu Hause einen Feinstaubsensor zu betreiben und diese Daten „mit allen“ zu teilen. Wichtig ist hierbei, dass beim Teilen dieser Daten kein Rรผckschluss auf persรถnliche Daten mรถglich ist – deine Daten sind also „live“ sichtbar, aber eben nur anonym.
Fรผr wenige Euros kann man die benรถtigte Hardware kaufen und einen solchen Sensor einrichten. Die Kombination der unzรคhligen Feinstaubsensoren, welche auf diese Weise bereits Daten รถffentlich teilen, kann dann in etwa so aussehen fรผr eine Gegend:
Fรผr Home Assistant gibt es dann eine Integration, รผber welche man die Daten eines beliebigen solchen Feinstaub-Sensors anzeigen lassen kann (Home Assistant Luftdaten Integration).
Du magst Home Assistant? Dann abonniere kostenlos meine Beitrรคge mit Tipps, Tricks und Anleitungen rund um Home Assistant:
Follow Home Assistant
Garantiert kein Spam, keine Werbung und immer mit Abmelde-Link, solltest du es dir anders รผberlegen!
Genau diese Integration mรถchte ich nun jedoch „loswerden, da meine eigenen Feinstaub-Daten bei Nutzung dieser Integration folgenden Weg zurรผcklegen:
- Datenerhebung auf meinem persรถnlichen Sensor
- รbermittlung der Daten an Sensor.Community
- Ermitteln der Daten durch Home Assistant von Sensor.Community
- Anzeige der Daten in Home Assistant
Die Schritte 2 und 3 sind also eigentlich รผberflรผssig, da meine lokal vorhandenen Daten zuerst „nach drauรen“ gegeben werden, um sie dann wieder „zurรผckzuholen“.
Feinstaub-Daten lokal auslesen
Zuerst musst du die IP-Adresse deines lokalen Feinstaub-Sensors ermitteln. Hierfรผr schaust du am besten in deinem Router (oder รคhnlich) nach. Ergรคnz dann diese lokale IP-Adresse um folgendes Ziel „/data.json“
Rufst du diese Adresse (also http://IP-Adresse/data.json“ in deinem Browser auf, erhรคltst du die aktuellen Messwerte als JSON-Daten (optisch aufbereitet zur besseren Lesbarkeit hier):
{
"software_version":"NRZ-2020-133",
"age":"28",
"sensordatavalues":[
{
"value_type":"SDS_P1",
"value":"8.25"
},
{
"value_type":"SDS_P2",
"value":"3.03"
},
{
"value_type":"samples",
"value":"5051440"
},
{
"value_type":"min_micro",
"value":"28"
},
{
"value_type":"max_micro",
"value":"20098"
},
{
"value_type":"interval",
"value":"145000"
},
{
"value_type":"signal",
"value":"-73"
}
]
}
Alles, was man nun noch tun muss, ist in Home Assistant mittels Command-Line Sensor, diese JSON-Daten einzulesen. Dies kann wie folgt aussehen:
sensor:
- platform: command_line
name: "Luftdata PM10"
command: 'curl http://IP-Adresse/data.json'
value_template: "{{ value_json.sensordatavalues[0].value | round(2) }}"
unit_of_measurement: "ยตg/mยณ"
- platform: command_line
name: "Luftdata PM2.5"
command: 'curl http://IP-Adresse/data.json'
value_template: "{{ value_json.sensordatavalues[1].value | round(2) }}"
unit_of_measurement: "ยตg/mยณ"
- platform: statistics
name: pm10 stats
state_characteristic: mean
entity_id: sensor.luftdata_pm10
max_age:
minutes: 60
- platform: statistics
name: pm25 stats
state_characteristic: mean
entity_id: sensor.luftdata_pm2_5
max_age:
minutes: 60
Sobald diese Command-Line Sensoren aktiv sind, sollte dir Home Assistant zwei neue nutzbare Sensoren bereitstellen:
- sensor.luftdata_pm10
- sensor.luftdata_pm2_5
Diese Sensoren kannst du dann in Lovelace anzeigen/nutzen!
ACHTUNG: Mit 2023.8 gab es รnderungen in Home Assistant, wie Sensoren die die Command-Line nutzen deklariert werden mรผssen! Aus diesem Grund ist das Code-Beispiel von weiter oben nicht mehr funktional und es muss nun wie folgt aussehen:
command_line: - sensor: name: "Luftdata PM10" command: "curl http://IP-Adresse/data.json" value_template: "{{ value_json.sensordatavalues[0].value | round(2) }}" unit_of_measurement: "ยตg/mยณ" scan_interval: 120 command_timeout: 15 - sensor: name: "Luftdata PM2.5" command: "curl http://IP-Adresse/data.json" value_template: "{{ value_json.sensordatavalues[1].value | round(2) }}" unit_of_measurement: "ยตg/mยณ" scan_interval: 120 command_timeout: 15
Auch mit diesem Code erhรคltst du die zwei Sensoren sensor.luftdata_pm10 und sensor.luftdata_pm2_5, die du beliebig nutzen kannst!
Produktempfehlungen
Danke,
habe mit der Hacs Integration Erfolg gehabt. Aber ich werde das nun auch mit deinem neuen skript versuche, Aber auch mit der HACS integration war ohne einen Neustart keine Entitรคt zu finden. Ich habe noch zusรคtzliche Sensoren (BME 280) eingebunden.
– platform: local_luftdaten
host: 192.168…………
scan_interval: 300
name: feinstaubsensor
monitored_conditions:
– SDS_P1
– SDS_P2
– BME280_temperature
– BME280_pressure
– BME280_humidity
– signal
Hallo,
bei mir werden keine neuen Entitรคten erstellt, Text habe ich kopiert, keine Fehlermeldung beim speichern der neuen config Datei.
??
VG
Hi und sorry fรผr die spรคte Antwort!
Eigentlich dรผrfte der ursprรผngliche Code aus diesem Beitrag gar nicht mehr funktionieren, da seit 2023.8 Sensoren, die die Command-Line nutzen anders deklariert werden mรผssen. Sorry fรผr das in die Irre leiten!!!
Ich habe den Beitrag entsprechend aktualisiert und den nun zu nutzenden Code ergรคnzt. Diese ist so (bis natรผrlich auf die IP-Adresse) bei mir im Einsatz und ich nutze die beiden Sensoren. Ggf. kann ein Neustart von Home Assistant helfen die Ermittlung der Sensoren zu beschleunigen!
VG
Olli
Hallo, mit deinem neuen text funktioniert es auch bei mir. Vielleicht ist fรผr einige auch interessant, dass weitere sensoren eingebunden werden kรถnnen.
Wenn man die http://IP-Adresse/data.jsonโ im Browser aufrufst , erhรคlt man ja diese/ oder eine รคhnliche Antwort.
ensordatavalues
0
value_type „SDS_P1“
value „2.83“
1
value_type „SDS_P2“
value „2.63“
2
value_type „BME280_temperature“
value „8.79“
3
value_type „BME280_pressure“
value „95213.03“
4
value_type „BME280_humidity“
value „89.28“
5
value_type „samples“
value „8425197“
6
value_type „min_micro“
value „28“
7
value_type „max_micro“
value „20562“
8
value_type „interval“
value „240000“
9
value_type „signal“
value „-53“
Wenn man dann die Nummer hinter … sensordatavalues รคndert z.B 1 auf 2 erhรคlt man einen neuen sensor , bei mir die Temperatur. Man muss dann natรผrlich auch noch unit _of_measurement anpassen
– sensor:
name: „Luftdata PM2.5“
command: „curl http://IP-Adresse/data.json“
value_template: „{{ value_json.sensordatavalues[1].value | round(2) }}“
unit_of_measurement: „ยตg/mยณ“
scan_interval: 120
VG
command_timeout: 15
Danke fรผr das Teilen!
Welche Sensoren es noch so gibt, hรคngt natรผrlich von der verbauten Hardware ab! Aber bei dir sind es ja durchaus noch ein paar weitere Sensoren (wobei das WLAN-Signal mich z. B. gar nicht interessieren wรผrde in Home Assistant ;)).
Vermutlich ein Anfรคngerfehler, aber ich bekomme nach dem Einfรผgen in die configuration.yaml die Fehlermeldung „Diese Entitรคt („sensor.luftdaten_pm2_5″) hat keine eindeutige ID,…“. Die aktuellen Werte werden angezeigt, aber die Statistik ist nicht verfรผgbar.
Die Meldung dรผrfte aber wie folgt weitergehen vermutlich „…, daher kรถnnen die Einstellungen nicht รผber die UI verwaltet werden. Schaue in der Dokumentation nach fรผr mehr Details.“
Das bedeutet eigentlich lediglich, dass du die Entitรคt eben nicht รผber das Frontend verรคndern kannst, sondern nur in YAML. Auswirkungen auf Historienwerte sollte das nicht haben.
Du kannst eine eindeutige ID selber vergeben in dem YAML-Code (siehe in der Fehlermeldung verlinkte Dokumentation auf deutsch).
Der Hinweis auf HACS ist Gold wert. Ich war schon kurz vorm Verzweifeln, weil es mir immer wieder die Verknรผpfung zu „Luftdaten“ unterbrochen hat, also keine Werte mehr angezeigt wurden. Die lokale Lรถsung ist spitze!
Guten Morgen,
etwas genauer: Ich meine die Logfiles unter: Einstellungen/Einstellungen/Logs.
Dort steht bei mir folgendes (ohne der รnderung):
Protokolldetails (WARNUNG)
Logger: homeassistant.components.statistics.sensor
Source: components/statistics/sensor.py:207
Integration: statistics (documentation, issues)
First occurred: 06:50:38 (2 occurrences)
Last logged: 06:50:38
The configuration parameter ’state_characteristic‘ will become mandatory in a future release of the statistics integration. Please add ’state_characteristic: mean‘ to the configuration of sensor „pm10 stats“ to keep the current behavior. Read the documentation for further details: https://www.home-assistant.io/integrations/statistics/
The configuration parameter ’state_characteristic‘ will become mandatory in a future release of the statistics integration. Please add ’state_characteristic: mean‘ to the configuration of sensor „pm25 stats“ to keep the current behavior. Read the documentation for further details: https://www.home-assistant.io/integrations/statistics/
Es handelt sich jetzt um die Version HA 2021.12.10
Vielen Dank fรผr die Info! Dann ergรคnze ich das Mal in meinem Code-Beispiel!
Da sieht man Mal wieder, wie wichtig ein regelmรครiger Blick in die Logs ist!
In meinem Logfile kam noch ein Hinweis, den man mit der Ergรคnzung „state_characteristic: mean“ wegbekommt. Der entsprechende Teil des Scripts sieht dann so aus:
– platform: statistics
name: pm10 stats
entity_id: sensor.luftdata_pm10
state_characteristic: mean
max_age:
minutes: 60
– platform: statistics
name: pm25 stats
entity_id: sensor.luftdata_pm2_5
state_characteristic: mean
max_age:
minutes: 60
Und wenn der Feinstaubsensor keine feste IP hat, geht es auch mit dem entsprechenden Namen: command: ‚curl http://feinstaubsensor-XXXXXX.fritz.box/data.json‘
Interessant! Was fรผr eine Fehlermeldung gab es bei dir denn im Log? Ich habe in meines gerade einen Blick geworfen und konnte keinen Hinweis auf Probleme mit den Luftdaten-Sensoren finden.
Bei mir war der „Umweg“ รผber sensor.community irgendwann unzuverlรคssig, daher lese ich meinen Sensor wie du mittlerweile auch lokal aus. Ich nutze dafรผr HACS und https://github.com/lichtteil/local_luftdaten โฆ was im Prinzip genau das gleiche macht.
Noch eine Frage: Alternativ kรถnnte man statt Command Line-Sensor hier auch einen REST-Sensor verwenden, oder?
Diese HACS-Integration macht letztlich das Gleiche, wie mein beispielhafter Code oder der von dir erwรคhnte REST-Sensor (also ja, das sollte auch gehen! ;)) – ich bevorzuge nur mittlerweile ein schlankeres Setup. Also mehr lokal und weniger notwendige Integrationen oder Add-ons. Leider habe ich zu oft erlebt, das „fremder“ Code nicht verlรคsslich war oder irgendwann nicht mehr aktualisiert wurde.