Fhem: Revisit SDS011 Feinstaubsensor

Das Thema Feinstaub ist nach wie vor noch aktuell. Ein paar Straßen wurden gesperrt und es wurde viel über das Thema gesprochen, aber nicht viel gemacht. Ich fahre immer noch meinen Euro 5 Kia Diesel, und bin gerade ohne Mängel durch den TÜV gekommen. Will heißen, das ich diesen noch ein paar Jahre fahren werde, sofern es meine Gesundheit noch erlaubt. Meine Vermutung ist, das sich in Sachen Fahrverbote auch in den nächsten Jahren nichts großes verändern wird.

Das kennt man ja schon von anderen Projekten wie BER, Internet-Ausbau, Straßen-Renovierung oder Technologie im Allgemeinen – es passiert nichts. Aber das soll nicht das Thema dieses Blog-Beitrages sein. Viel wichtiger ist es doch zu wissen, wie es mit dem Feinstaub vor meiner Haustür bestellt ist.
Dazu hatte ich vor 2 Jahren schon mal über den günstigen Feinstaubsensor SDS011 berichtet, der auch mittlerweile weltweit von Hobbyisten oder Makern verwendet wird. Hier nochmal die Blogbeiträge von mir:
SDS011 Feinstaubsensor für Fhem
Fhem: LCD-Display 1602 für Feinstaubsensor SDS011

Das Modul der Firma Nova-Fitness ist immer noch aktuell und liefert bei mir schon seit 2 Jahren gute Dienste.


Um nun mit Fhem Daten aus dem Modul zu entlocken, hat die Community schon 2017 ein Plugin geschrieben, das man so aufruft:

defmod luftdatenaussen LuftdatenInfo local 192.168.178.53
attr luftdatenaussen alias Feinstaubsensor Balkon
attr luftdatenaussen group Luftqualitätssensoren
attr luftdatenaussen icon time_eco_mode
attr luftdatenaussen interval 300
attr luftdatenaussen room W_Balkon,20_Balkon,90_Devices
attr luftdatenaussen stateFormat pm25 Feinstaubliteral_PM10 : pm10 Feinstaubliteral_PM25

Ich habe jetzt noch mit dem DOIF Abzweig die kryptischen Zahlen abgeschafft, sodass als Reading jetzt „sehr gut, gut“ usw. die Luftqualität anzeigt.

defmod LuftdatenAussen_PM10_DOIF DOIF ([luftdatenaussen:state] eq "error") (setreading luftdatenaussen Feinstaubliteral_PM10 N/A)(setreading luftdatenaussen FeinstaubNoPM10 0)(setreading luftdatenaussen PM10 0)\
DOELSEIF (([luftdatenaussen:PM10] > 1) && [luftdatenaussen:PM10] < 54.9) (setreading luftdatenaussen Feinstaubliteral_PM10 gut)(setreading luftdatenaussen FeinstaubNoPM10 1) DOELSEIF (([luftdatenaussen:PM10] > 54.9) && ([luftdatenaussen:PM10] )< 154.9 )(setreading luftdatenaussen Feinstaubliteral_PM10 moderat)(setreading luftdatenaussen FeinstaubNoPM10 2) DOELSEIF (([luftdatenaussen:PM10] > 154.9) && ([luftdatenaussen:PM10] )< 254.9 )(setreading luftdatenaussen Feinstaubliteral_PM10 ungesund für sens. Gruppen)(setreading luftdatenaussen FeinstaubNoPM10 3) DOELSEIF (([luftdatenaussen:PM10] > 254.9) && ([luftdatenaussen:PM10] )< 354.9 )(setreading luftdatenaussen Feinstaubliteral_PM10 ungesund)(setreading luftdatenaussen FeinstaubNoPM10 4) DOELSEIF (([luftdatenaussen:PM10] > 354.9) && ([luftdatenaussen:PM10] )< 424.9 )(setreading luftdatenaussen Feinstaubliteral_PM10 sehr ungesund)(setreading luftdatenaussen FeinstaubNoPM10 5) DOELSEIF ([luftdatenaussen:PM10] > 424.9) (setreading luftdatenaussen Feinstaubliteral_PM10 gefährlich)(setreading luftdatenaussen FeinstaubNoPM10 6)
attr LuftdatenAussen_PM10_DOIF room Logik

sowie für pm25

defmod LuftdatenAussen_PM25_DOIF DOIF ([luftdatenaussen:state] eq "error") (setreading luftdatenaussen Feinstaubliteral_PM25 N/A)(setreading luftdatenaussen FeinstaubNoPM25 0)(setreading luftdatenaussen PM2.5 0) DOELSEIF (([luftdatenaussen:PM2.5] > 1) && [luftdatenaussen:PM2.5] < 12) (setreading luftdatenaussen Feinstaubliteral_PM25 gut)(setreading luftdatenaussen FeinstaubNoPM25 1) DOELSEIF (([luftdatenaussen:PM2.5] > 12) && ([luftdatenaussen:PM2.5] )< 35.4)(setreading luftdatenaussen Feinstaubliteral_PM25 moderat)(setreading luftdatenaussen FeinstaubNoPM25 2) DOELSEIF (([luftdatenaussen:PM2.5] > 35.5) && ([luftdatenaussen:PM2.5] )< 55.4 )(setreading luftdatenaussen Feinstaubliteral_PM25 ungesund für sens. Gruppen)(setreading luftdatenaussen FeinstaubNoPM25 3) DOELSEIF (([luftdatenaussen:PM2.5] > 55.4) && ([luftdatenaussen:PM2.5] )< 150.4)(setreading luftdatenaussen Feinstaubliteral_PM25 ungesund)(setreading luftdatenaussen FeinstaubNoPM25 4) DOELSEIF (([luftdatenaussen:PM2.5] > 150.4) && ([luftdatenaussen:PM2.5] )< 250.4 )(setreading luftdatenaussen Feinstaubliteral_PM25 sehr ungesund)(setreading luftdatenaussen FeinstaubNoPM25 5) DOELSEIF ([luftdatenaussen:PM2.5] > 250.4) (setreading luftdatenaussen Feinstaubliteral_PM25 gefährlich)(setreading luftdatenaussen FeinstaubNoPM25 6)
attr LuftdatenAussen_PM25_DOIF room Logik

Falls vom Sensor keine Daten kommen, gibt eine Telegram-Message …

defmod Luftdaten_Aussen_failed_push DOIF ([luftdatenaussen])(set user1 message Feinstaubsensor Außen ausgefallen)
attr Luftdaten_Aussen_failed_push do resetwait
attr Luftdaten_Aussen_failed_push room Logik
attr Luftdaten_Aussen_failed_push wait 1800

Als Ergebnis erhalten wird folgende Readings, welche wir in TabletUI oder sonstwo einbauen könnnen.

Aktion aus meiner Testumgebung, einfach eine eMail schreiben:
Programmiertes, komplettes Modul mit Gehäuse: 59,95 Euro inkl. Versand

Wer sich mit Luftschadstoffen weiter auseinandersetzen möchte, dem sei auf eine Masterarbeit verwiesen.

Ansonsten, Kommentare in die Kommentare.

Dieser Beitrag wurde unter Fhem-Hausautomation abgelegt und mit , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

2 Antworten zu Fhem: Revisit SDS011 Feinstaubsensor

  1. Michael sagt:

    Moin!
    Kleiner Fehler in Zeile

    attr luftdatenaussen stateFormat pm25 Feinstaubliteral_PM10 : pm10 Feinstaubliteral_PM25

    Das muss heißen

    attr luftdatenaussen stateFormat pm25 Feinstaubliteral_PM25 : pm10 Feinstaubliteral_PM10

    Ansonsten danke für die Mühe!
    Michael

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.