Luftdaten.info-Daten lokal auslesen

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:

Feinstaub-Sensor

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
( 490 Followers )
X

Follow Home Assistant

E-mail : *
* Ich stimme der Datenschutzerklรคrung zu!

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:

  1. Datenerhebung auf meinem persรถnlichen Sensor
  2. รœbermittlung der Daten an Sensor.Community
  3. Ermitteln der Daten durch Home Assistant von Sensor.Community
  4. 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!

Dieser Beitrag ist Teil einer kleinen Beitrags-Serie rund um den hass.io Home Assistant.

14 Gedanken zu „Luftdaten.info-Daten lokal auslesen“

  1. 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

    • 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 ;)).

  2. 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).

  3. 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!

  4. 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

  5. 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.

  6. 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.

Kommentare sind geschlossen.