IKEA VINDRIKTNING Raumluftsensor

Begonnen von juppzupp, 16 August 2021, 11:26:07

Vorheriges Thema - Nächstes Thema

juppzupp

FYI
ESP8266 "parasitär" an den raumluftsensor, daten dann über mqtt in fhem.
https://github.com/Hypfer/esp8266-vindriktning-particle-sensor

Pfriemler

#1
Hatte auch schon erwogen das zu berichten - läuft bei mir seit ein paar Tagen im gleichen Raum wie ein CO2-Sensor. Das Verhalten korreliert nur wenig mit der Raumluftbelastung. Ab morgen teste ich in der Hobbywerkstatt.

Ich werde das Averaging im Sketch noch etwas erweitern und mein fliegender Aufbau wird mit einem generischen ESP8266 mit 3,3V-Linearregler und Pegel-Spannungsteiler einziehen.
Noch geiler fände ich es, wenn Theo Arends Universalwaffe sich den Sensor einverleibt. Leider bin ich für einen entsprechenden Beitrag zu doof.

Ich habe den Sensor mit MQTT (nicht MQTT2) und mit expJSON eingebunden.

defmod IKEA_VIN1 MQTT_DEVICE
attr IKEA_VIN1 IODev myBroker
attr IKEA_VIN1 event-on-change-reading pm25,state
attr IKEA_VIN1 room Klima,Spielwiese
attr IKEA_VIN1 stateFormat Partikel 2,5 µm: [$name:pm25] µg/m³ ([$name:pm25:t])
attr IKEA_VIN1 subscribeReading_state esp8266-vindriktning-particle-sensor/VINDRIKTNING-499A3A/state


Edit: Für alle die doch nicht basteln wollen: Es kursiert das Gerücht, dass IKEA den Sensor in Bälde in einer neuen Version mit Tradfri-Kopplung anbietet. Natürlich wird der dann teurer sein als ein unsmarter mit angeflanschtem ESP...

"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

juppzupp

Kommt halt darauf an, wie man Raumluftbelastung definiert.
Das Ding misst optisch Partikel.
Bei mir tut es das gut. Ich kann kochen, saugen, etc ablesen.
Der Lüfter ist mir zu laut. Auf GitHub hat der Ersteller diesen ja permanent auf 3.3V gelegt, ich habe einen 92 Ohm Widerstand in die Masse Leitung eingebracht.

Pfriemler

#3
Zitat von: juppzupp am 17 August 2021, 23:42:07
Kommt halt darauf an, wie man Raumluftbelastung definiert.
Das Ding misst optisch Partikel. Bei mir tut es das gut. Ich kann kochen, saugen, etc ablesen.
Dass er mich als Mensch atmend im Raum nicht erkennt, ist ja klar. Laufe ich durch den Raum oder bewege viel Papier, sieht man das schon. Aber er macht auch "Welle" (also anfallartig erhöhte Werte), wo es bei geschlossener Tür und Fenster und ohne Personen im Raum eigentlich nichts passieren dürfte. Oder aber ich habe doch Untermieter oder eine Fliege hat bei ihren nächtlichen Kunstflügen irgendwas aufgewirbelt.
edit: kurz nach fünf war definitiv keiner im Raum. Möglicherweise handelt es sich bei so etwas aber wirklich nur um einen einmaligen Sensor(auslese)ausrutscher(fehler), der natürlich auch durch das im Sketch durchgeführte Averaging schlägt. Ich habe schon einige solcher seltsamen Spikes gesehen.
Viele dieser Ausrutscher dürften gar nicht zu sehen sein, weil der Sensor weit häufiger als 10x in der Minute ausgelesen wird, aber nur der Mittelwert aus den letzten 5 Messungen alle 30 (!) Sekunden gesendet wird.
Ein Spike von 50 wie kurz nach fünf Uhr bei sonst 13 im Schnitt könnte ja durch einen einmaligen Sensor-Wert von knapp 200 erreicht sein.

Bin versucht, den Mittelwert mal über 20 Werte zu nehmen (Types.h Z5 und SerialCom.h Z37 und Z42, wenn ich es richtig gesehen habe). Vielleicht noch Ausrutscher auf einen bestimmten Wert begrenzen (z.B. das 2fache des letzten Sensorwertes) - das dämpft einzelne Ausrutscher gut, lässt aber dauerhafte Änderungen dennoch gut schnell durchkommen.

ZitatDer Lüfter ist mir zu laut.
Laut ist er eigentlich nicht, macht halt nur nervige Töne. 3 Meter weg im Büro und das dauerlaufende NAS im Hintergrund höre ich natürlich nichts mehr. Im Schlafzimmer könnte ich den nicht haben, aber da wäre ein Dauerlauf besser als das ständige Gejaule beim An- und Ausgehen. Über Mods diesbezüglich habe ich auch schon nachgedacht, aber mir ist vom Wirkprinzip her nicht klar, ob der Sensor den Durchzug während der Messungen braucht oder ob es tatsächlich nur um einen regelmäßigen Luftaustausch in der Messkammer geht (nach Würdigung aller Umstände gehe ich stark von letzterem aus, das Datenblatt sagt absolut nichts dazu und IKEA hat den Lüfter selbst angeflanscht). Schlecht wäre außerdem, wenn der reduzierte Luftstrom zu dauerhaften Ablagerungen führen würde.

"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

juppzupp

Kurz nach 12 den Raum verlassen, kurz vor 8 wieder im Wohnzimmer. Ohne Spitzen über Nacht.

ReviloEgros

Zitat von: juppzupp am 16 August 2021, 11:26:07ESP8266 "parasitär" an den raumluftsensor, daten dann über mqtt

Könntest du dein Device als RAW definition posten? Bei mir wirds automatisch anders angelegt, und ich bekomme kein Reading zur Luftqualität :(

juppzupp

Ich hab's nicht angelegt, hat mqtt2 für mich gemacht.


defmod MQTT2_VINDRIKTNING_D29EED MQTT2_DEVICE VINDRIKTNING_D29EED
attr MQTT2_VINDRIKTNING_D29EED DbLogExclude wifi_ip,wifi_rssi,wifi_ssid
attr MQTT2_VINDRIKTNING_D29EED comment Green to Yellow and Yellow to Red in the Ikea firmware are at around 30 and 100μg/m³.
attr MQTT2_VINDRIKTNING_D29EED event-min-interval .*:300
attr MQTT2_VINDRIKTNING_D29EED event-on-change-reading .*
attr MQTT2_VINDRIKTNING_D29EED readingList VINDRIKTNING_D29EED:esp8266-vindriktning-particle-sensor/VINDRIKTNING-D29EED/status:.* status\
VINDRIKTNING_D29EED:homeassistant/sensor/esp8266-vindriktning-particle-sensor/VINDRIKTNING-D29EED_wifi/config:.* { json2nameValue($EVENT) }\
VINDRIKTNING_D29EED:homeassistant/sensor/esp8266-vindriktning-particle-sensor/VINDRIKTNING-D29EED_pm25/config:.* { json2nameValue($EVENT) }\
VINDRIKTNING_D29EED:esp8266-vindriktning-particle-sensor/VINDRIKTNING-D29EED/state:.* { json2nameValue($EVENT) }
attr MQTT2_VINDRIKTNING_D29EED room MQTT2_DEVICE
attr MQTT2_VINDRIKTNING_D29EED stateFormat pm25

setstate MQTT2_VINDRIKTNING_D29EED 0
setstate MQTT2_VINDRIKTNING_D29EED 2021-08-15 16:32:06 IODev mqtt_server
setstate MQTT2_VINDRIKTNING_D29EED 2021-08-18 17:57:50 availability_topic esp8266-vindriktning-particle-sensor/VINDRIKTNING-D29EED/status
setstate MQTT2_VINDRIKTNING_D29EED 2021-08-18 17:57:50 device_identifiers_1 VINDRIKTNING-D29EED
setstate MQTT2_VINDRIKTNING_D29EED 2021-08-18 17:57:50 device_manufacturer Ikea
setstate MQTT2_VINDRIKTNING_D29EED 2021-08-18 17:57:50 device_model VINDRIKTNING
setstate MQTT2_VINDRIKTNING_D29EED 2021-08-18 17:57:50 device_name VINDRIKTNING-D29EED
setstate MQTT2_VINDRIKTNING_D29EED 2021-08-18 17:57:50 device_sw_version 2021.08.0
setstate MQTT2_VINDRIKTNING_D29EED 2021-08-18 17:57:50 icon mdi:air-filter
setstate MQTT2_VINDRIKTNING_D29EED 2021-08-18 17:57:50 json_attributes_template {"ssid": "{{value_json.wifi.ssid}}", "ip": "{{value_json.wifi.ip}}"}
setstate MQTT2_VINDRIKTNING_D29EED 2021-08-18 17:57:50 json_attributes_topic esp8266-vindriktning-particle-sensor/VINDRIKTNING-D29EED/state
setstate MQTT2_VINDRIKTNING_D29EED 2021-08-18 17:57:50 name VINDRIKTNING-D29EED PM 2.5
setstate MQTT2_VINDRIKTNING_D29EED 2021-08-18 20:41:17 pm25 0
setstate MQTT2_VINDRIKTNING_D29EED 2021-08-18 17:57:50 state_topic esp8266-vindriktning-particle-sensor/VINDRIKTNING-D29EED/state
setstate MQTT2_VINDRIKTNING_D29EED 2021-08-18 17:57:50 status online
setstate MQTT2_VINDRIKTNING_D29EED 2021-08-18 17:57:50 unique_id VINDRIKTNING-D29EED_pm25
setstate MQTT2_VINDRIKTNING_D29EED 2021-08-18 17:57:50 unit_of_measurement μg/m³
setstate MQTT2_VINDRIKTNING_D29EED 2021-08-18 17:57:50 value_template {{value_json.pm25}}
setstate MQTT2_VINDRIKTNING_D29EED 2021-08-18 20:41:17 wifi_ip 192.168.0.129
setstate MQTT2_VINDRIKTNING_D29EED 2021-08-18 20:41:17 wifi_rssi -57
setstate MQTT2_VINDRIKTNING_D29EED 2021-08-18 20:41:17 wifi_ssid fhem




ReviloEgros

Komisch. weder mit dem durch MQTT2 bei mir erstelltem Device, noch mit deiner Definition bekomme ich readings zu pm25 oder wifi. Habe auch deine .bin probiert als auch selbst kompiliert. Irgend eine Idee?

ReviloEgros

So wird es bei mir automatisch angelegt:

defmod MQTT2_VINDRIKTNING_DC3C2A MQTT2_DEVICE VINDRIKTNING_DC3C2A
attr MQTT2_VINDRIKTNING_DC3C2A readingList VINDRIKTNING_DC3C2A:esp8266-vindriktning-particle-sensor/VINDRIKTNING-DC3C2A/status:.* status\
VINDRIKTNING_DC3C2A:homeassistant/sensor/esp8266-vindriktning-particle-sensor/VINDRIKTNING-DC3C2A_wifi/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
VINDRIKTNING_DC3C2A:homeassistant/sensor/esp8266-vindriktning-particle-sensor/VINDRIKTNING-DC3C2A_pm25/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }
attr MQTT2_VINDRIKTNING_DC3C2A room MQTT2_DEVICE

setstate MQTT2_VINDRIKTNING_DC3C2A 2021-08-18 21:08:59 IODev mqtt2_server
setstate MQTT2_VINDRIKTNING_DC3C2A 2021-08-18 21:08:59 config_availability_topic esp8266-vindriktning-particle-sensor/VINDRIKTNING-DC3C2A/status
setstate MQTT2_VINDRIKTNING_DC3C2A 2021-08-18 21:08:59 config_device_identifiers_1 VINDRIKTNING-DC3C2A
setstate MQTT2_VINDRIKTNING_DC3C2A 2021-08-18 21:08:59 config_device_manufacturer Ikea
setstate MQTT2_VINDRIKTNING_DC3C2A 2021-08-18 21:08:59 config_device_model VINDRIKTNING
setstate MQTT2_VINDRIKTNING_DC3C2A 2021-08-18 21:08:59 config_device_name VINDRIKTNING-DC3C2A
setstate MQTT2_VINDRIKTNING_DC3C2A 2021-08-18 21:08:59 config_device_sw_version 2021.08.0
setstate MQTT2_VINDRIKTNING_DC3C2A 2021-08-18 21:08:59 config_icon mdi:air-filter
setstate MQTT2_VINDRIKTNING_DC3C2A 2021-08-18 21:08:59 config_json_attributes_template {"ssid": "{{value_json.wifi.ssid}}", "ip": "{{value_json.wifi.ip}}"}
setstate MQTT2_VINDRIKTNING_DC3C2A 2021-08-18 21:08:59 config_json_attributes_topic esp8266-vindriktning-particle-sensor/VINDRIKTNING-DC3C2A/state
setstate MQTT2_VINDRIKTNING_DC3C2A 2021-08-18 21:08:59 config_name VINDRIKTNING-DC3C2A PM 2.5
setstate MQTT2_VINDRIKTNING_DC3C2A 2021-08-18 21:08:59 config_state_topic esp8266-vindriktning-particle-sensor/VINDRIKTNING-DC3C2A/state
setstate MQTT2_VINDRIKTNING_DC3C2A 2021-08-18 21:08:59 config_unique_id VINDRIKTNING-DC3C2A_pm25
setstate MQTT2_VINDRIKTNING_DC3C2A 2021-08-18 21:08:59 config_unit_of_measurement μg/m³
setstate MQTT2_VINDRIKTNING_DC3C2A 2021-08-18 21:08:59 config_value_template {{value_json.pm25}}
setstate MQTT2_VINDRIKTNING_DC3C2A 2021-08-18 21:08:59 status online


juppzupp

Kannst du noch an die serielle? Ich würde da schauen was die console ausspuckt. Verkabelung checken. D2 an einem WeMos.

Pfriemler

#10
Zitat von: juppzupp am 18 August 2021, 14:10:54
Kurz nach 12 den Raum verlassen, kurz vor 8 wieder im Wohnzimmer. Ohne Spitzen über Nacht.
Jetzt wird es putzig: Im Vorratskeller sind die Werte deutlich smoother.

Mir fällt noch auf, dass Du Werte um null hast. Bei mir geht unter 12 kaum was. Ich habe schon im Web gelesen, dass die Sensoren teils sehr unterschiedliche Werte liefern.

Heute ist mir ein neues WLAN in meinem Haus aufgefallen. Auf die Bezeichnung "ESP-499A3A" konnte ich mir erst keinen Reim machen. Fing übers Handy fand keine offenen Ports. Die MAC-Adresse taucht nicht in meiner Liste auf. Dienste wie dein-ip-check.de finden zu der Mac keinen Hersteller. Dann habe ich herausbekommen, dass die MAC bis auf die erste Ziffer identisch mit dem WEMOS am PM-Sensor ist. Und tatsächlich: sobald ich den ausstrome, ist das WLAN weg, und nach dem Einstromen sofort wieder da. Reproduzierbar. Dann fand ich heraus, dass die Zahl hinter ESP genau die hinter VINDRIKTNING im MQTT-Topic ist oder bei MQTT2 in der Def ist.
Was macht das Ding da? Einen Repeater?

Das hatte ich noch nie bei einem ESP-Sketch. Jemand ähnliche Erfahrungen gemacht?`juppzupp müsste ein SSID "ESP-D29EED" finden.
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

juppzupp

Mit diesem Sketch nicht, aber nem anderen. Könnte ein "Feature" des WiFi Manager sein.

Pfriemler

#12
Seltsam, seltsam. Der Wifi-Manager war in der Tat etwas zickig beim Einrichten.

edit: https://forum.arduino.cc/t/esp8266-broadcasting-unwanted-open-wifi-network/481543
Sehr bekanntes Problem. Werde die Lösung morgen probieren.

@ReviloEgros:
In der readingList von juppzupp gibt es einen Eintrag mehr:
VINDRIKTNING_D29EED:esp8266-vindriktning-particle-sensor/VINDRIKTNING-D29EED/state:.* { json2nameValue($EVENT) }
D29EED müsstest Du bei Dir durch DC3C2A ersetzen.

Ich weiß nicht, irgendwie war das mit dem alten MQTT einfacher ...
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Pfriemler

#13
nochmal nachgemessen ...
Also gemessen wird in 33-Sekunden-Zyklen ingesamt 7x. Der Lüfter wird gestartet, läuft eine Weile, dann erfolgt eine Sensorabfrage, nach ~1s Abstand die 2., die 3.-7. nach jeweils rund ~2,2s. Nach 12 Sekunden sind die Messungen durch und es folgen 21 Sekunden Pause, in der der Lüfter zwischendurch ausgeht.
Etwas trickreich im Code, wird jeweils ein Mittelwert über 5 Werte gebildet und gesendet. Tatsächlich kommt so in einem 30-Sekunden-Rhythmus eigentlich immer - wenn auch knapp - ein neuer Mittelwert heraus (entweder alle in einer Ausleseperiode oder über eine Lüfterpause). So wie von mir gedacht kann man die Mittelwertbildung nicht beliebig verlängern, oder man arbeitet wirklich mit einem gleitenden Mittelwert, den man nach jedem Sensorwert neu berechnet und dann aber nur stichprobenartig alle 30 Sekunden publishet.
Nach dem Muster wäre es auch denkbar, dem Verhalten des Sensors zu folgen, z.B. kommende Messwerte in einen ausreichend großen Puffer zu lesen und nach dem Ausbleiben von Sensordaten (in der Lüfterpause) nach Timeout die Werte zu mitteln und zu publishen, dabei offensichtliche Ausreißer zu ignorieren. Dann Puffer löschen und auf neue Daten warten.

Mein Sensor lief seit gestern in einem anderen Raum praktisch den gleichen (Grundrausch-)Wert von 12-13, macht aber heute morgen kurz vor sechs (alles schlief, Raum fensterlos und Tür geschlossen) einen Sprung nach unten auf ~4 und bleibt dort weiter konstant. Uhrzeit von FHEM stimmt.
Muss man das verstehen?

"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Christoph Morrison

Ich habe inzwischen auch einen (von dreien) am Start und eine Weile gegen einen PM2.5 von ELV (SPS30 von Sensiron) laufen lassen. Meine Einheit liefert konstant 3 µg mehr, als der SPS30 misst.