Neues Modul: CO2-Sensor co2mini

Begonnen von henryk, 03 Oktober 2015, 22:38:33

Vorheriges Thema - Nächstes Thema

henryk

Moin,

zur Raumluftüberwachung hab' ich was ganz feines gefunden (naja, ein Freund hat mich drauf hingewiesen): Ein CO2-Sensor der nicht nur grobe "gut"-"schlecht"-"schlechter"-Auskunft gibt (wie etwa der Homematic-Raumluftsensor), sondern ein numerisches Messergebnis in ppm (parts per million). Und noch schöner: Anders als in der Bedienungsanleitung behauptet, ist die USB-Schnittstelle nicht nur zur Stromversorgung da, sondern gibt ein HID-Gerät über das man die Daten empfangen kann.

Es scheint diese Geräte von vielen verschiedenen Herstellern mit unterschiedlichen Aufdrucken zu geben, wobei das Gehäuse sonst immer gleich ist. Um der Namensverwirrung zu entgehen heisst das bei mir jetzt einfach co2mini (ich glaub' den Namen hab' ich aus der Software oder so). Das reverse engineering hab' ich hier beschrieben: https://hackaday.io/project/5301-reverse-engineering-a-low-cost-usb-co-monitor

Jetzt hab' ich ein FHEM-Modul was Daten von dem Gerät empfangen kann gebaut. Installation mit
update all https://raw.githubusercontent.com/henryk/fhem-co2mini/master/controls_co2mini.txt

Das funktioniert nur mit Linux (wer den nötigen HID-Code für andere Betriebssysteme beisteuern will ist herzlich eingeladen). Um FHEM Zugriff zum Device zu geben, und einen eindeutigen Namen zu haben, sollte man in eine Datei 90-co2mini.rules in /etc/udev/rules.d anlegen mit folgendem Inhalt:
ACTION=="remove", GOTO="co2mini_end"
SUBSYSTEMS=="usb", KERNEL=="hidraw*", ATTRS{idVendor}=="04d9", ATTRS{idProduct}=="a052", GROUP="plugdev", MODE="0660", SYMLINK+="co2mini%n", GOTO="co2mini_end"
LABEL="co2mini_end"

wobei man statt plugdev ggbf. eine andere Gruppe einträgt in der fhem läuft, oder statt 0660 als mode 0666 (für alle zugreifbar) angibt. Dann ist das Gerät immer unter /dev/co2mini0 (bzw. mit aufsteigender Nummer, wenn es mehrere Geräte gibt) zu finden.

In FHEM kann man das Modul dann ganz einfach benutzen:
define co2 co2mini
(benutzt per default /dev/co2mini0, wenn man ein anderes Device möchte, muss man das als zusätzlichen Parameter angeben)

Als readings bekommt man dann co2 (in ppm) und temperature (in °C). Es gibt auch noch Dekodier-Support für humidity (in %), da es verwandte Geräte mit gleichem Protokoll gibt die einen Sensor dafür haben. Ausserdem kann man das showraw-Attribut auf 1 setzt und bekommt dann alle Datenpunkte die vom Gerät gesendet werden, wobei mir für wenige klar ist, was sie bedeuten.

--
Henryk Plötz
Grüße aus Berlin

cjung

Ich habe mir das Teil mal bestellt, und werde es testen.
Dauert noch 3 Wochen bis es kommt.

Gruß
Christoph
Raspberry Pi 2 B
Funk: HM_CFG_USB2, HM-CFG-LAN 8*HM_CC_RT_DN, 3*HM-SEC-SD, 3*HM_TC_IT_WM_W_EU, 1*HM-LC-Dim1TPBU-FM,5*HM-SEC-SC-2, 1*HM-SEC-SCo
Wired: HMW: CFG-LAN, 8*LC_Bl1_DR, LC_Dim1L_DR

peterk_de

Klasse, gerade in der Freakshow die Folge zu dem Teil nachgehört, bestellt und geguckt ... na klar, es gibt natürlich schon ein FHEM-Modul :) Danke dafür!! Ich teste es, wenn es da ist :-)
FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

mando667

Läuft das ganze auch auf einem Raspberry Pi?

Danke & Grüße
Julian


Gesendet von iPad mit Tapatalk

vbs

Sieht sehr interessant aus, ich glaub ich bestellt auch mal eins! Ist es möglich, das Ganze auch ohne FHEM zu betreiben? Also nur ein Linux-Prozess der zyklisch den Wert abfragt und dann zB per telnet bei FHEM einliefert? So betreibe ich drei Velux-Luftmesser auf PIs ohne darauf ein ganzes FHEM laufen lassen zu müssen.

henryk

Moin,

Zitat von: vbs am 10 Januar 2016, 20:52:13
Sieht sehr interessant aus, ich glaub ich bestellt auch mal eins! Ist es möglich, das Ganze auch ohne FHEM zu betreiben? Also nur ein Linux-Prozess der zyklisch den Wert abfragt und dann zB per telnet bei FHEM einliefert? So betreibe ich drei Velux-Luftmesser auf PIs ohne darauf ein ganzes FHEM laufen lassen zu müssen.

Japp, siehe auch die Modul-Doku: https://github.com/henryk/fhem-co2mini/blob/e9d2d40474d582130b7aaa31f74488c7a8f6c765/FHEM/38_co2mini.pm#L276. Es gibt einen dedizierten Server den man separat (zum Beispiel auf einem Pi, läuft bei mir genau so zu Hause) laufen lassen kann und das FHEM-Modul verbindet sich dann dorthin und verhält sich im weiteren so als wäre es ein direkt angeschlossenes Gerät.

--
Henryk Plötz
Grüße aus Berlin

vbs

Super, danke dir! Klasse, wieder was zum Spielen :)

cjung

Die Installation hat sofort perfekt geklappt ! (Und ich musst sofort das Fenster aufreißen und Lüften: 1265 ppm )
Evtl. könnte man beim Define gleich noch ein FileLog mit anlegen.

Vielen Dank für das Modul !!

Raspberry Pi 2 B
Funk: HM_CFG_USB2, HM-CFG-LAN 8*HM_CC_RT_DN, 3*HM-SEC-SD, 3*HM_TC_IT_WM_W_EU, 1*HM-LC-Dim1TPBU-FM,5*HM-SEC-SC-2, 1*HM-SEC-SCo
Wired: HMW: CFG-LAN, 8*LC_Bl1_DR, LC_Dim1L_DR

vbs

So, hab das Modul heute in Betrieb genommen. Erstmal vielen Dank! Klappte (fast) alles wie am Schnürchen! :) Ich habe jetzt das FHEM-Modul am Laufen und auf dem Raspi den Remote-Server.

Ein paar Sachen, die mir aufgefallen sind:
- Wenn ich den Raspi neu starte, dann verliert ja das Modul die Verbindung. Es stellt dann aber die Verbindung nicht automatisch wieder her. Ich denke, dass bei meinem Raspi-Reboot der co2mini_server hart abgeschossen wird. Das Modul braucht auch recht lange, um auf "disconnect" zu wechseln (wohl Timeout). Der Server scheint die TCP-Verbindung nicht mehr sauber zu beenden beim Runterfahren (wird evtl. einfach gekillt). Wenn ich den co2mini_server sauber per SIGTERM beende, dann wechselt das Modul sofort auf "disconnect". Aber auch hier wird dann die Verbindung nicht automatisch wieder aufgebaut.

- Das FHEM-Modul setzt von sich aus das disable-Attribut (und löscht es wohl auch wieder). Das führt dazu, dass sich dadurch immer wieder die FHEM-Config ändert und FHEM das rote Fragezeichen anzeigt zum Speichern der Config

- Ich hab auf Raspi-Seite das Problem, dass die udev-Regel beim Booten (noch?) nicht greift. Also wenn der Raspi mit dem co2mini dran bootet, dann werden die Rechte nicht vergeben und auch der Symlink /dev/co2mini0 nicht angelegt. Wenn ich den co2mini dann abziehe vom USB und wieder dran stecke, dann klappt alles. Das ist aber vermutlich eher ein Problem meiner Konstellation und hat wohl nix mit dem Modul zu tun. Hat evtl. trotzdem jemand eine Idee, was man da machen kann? Ich vermute, dass udev scheinbar noch nicht arbeitet während das Gerät schon eingebunden wird während der Bootphase. Ich nutze ein Raspi2 mit TinyCore Linux.

joshi04

Vielen Dank für das Modul! Genau, was ich eigentlich schon immer gesucht habe. Modul läuft out-of-the-box! Endlich ein CO2-Sensor ohne Umwege, echt Klasse!
Jetzt kann ich endlich die Netatmos für die Fenstersteuerung rausschmeißen.

Vermute leider, dass das es mit einem günstigen Kombisensor (CO2, Temp, Hum) nichts wird.  :(
Link
Liegt vermutlich an der Größe des Displays. Anders lässt sich mM der Mehrpreis nicht erklären.

Die beiden Taster an der Rückseite, die in der Anleitung beschrieben sind, existieren bei meinem Gerät übrigens auch, wenn man die Rückwand öffnet. Probiert habe ich sie noch nicht. Darüber lässt sich ggf. eine Höhenanpassung und die Kalibriermethode anpassen.
co2meter.com
NUC: 2xJeeLink, PCA301/TX35DTH; HueBridge, LivingColors; vair-monitor (CO2); HMLan, Winmatic, HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HM-ES-TX-WM, HM-WDS10-TH-O, HM-ES-PMSw1-Pl, HM-SEC-SC-2, HM-SEC-SCo; AVM DECT 200; panStamp; smartVISU

vbs

Mir ist noch aufgefallen, dass ich recht häufig Fehlermeldungen im Log bekomme. Das Geräte scheint aber trotzdem sinnvolle Werte zu liefern. Das sieht ständig so aus:
2016.01.19 06:42:42 3: co2mini wrong data format received or checksum error
2016.01.19 06:47:34 3: co2mini wrong data format received or checksum error
2016.01.19 06:47:34 3: co2mini wrong data format received or checksum error
2016.01.19 06:48:35 3: co2mini wrong data format received or checksum error
2016.01.19 06:48:35 3: co2mini wrong data format received or checksum error
2016.01.19 06:49:45 3: co2mini wrong data format received or checksum error
2016.01.19 06:49:45 3: co2mini wrong data format received or checksum error
2016.01.19 06:51:05 3: co2mini wrong data format received or checksum error
2016.01.19 06:51:05 3: co2mini wrong data format received or checksum error
2016.01.19 06:53:00 3: co2mini wrong data format received or checksum error
2016.01.19 06:53:00 3: co2mini wrong data format received or checksum error
2016.01.19 06:53:05 3: co2mini wrong data format received or checksum error
2016.01.19 06:53:05 3: co2mini wrong data format received or checksum error
2016.01.19 06:53:10 3: co2mini wrong data format received or checksum error
2016.01.19 06:53:10 3: co2mini wrong data format received or checksum error
2016.01.19 06:53:15 3: co2mini wrong data format received or checksum error
2016.01.19 06:53:15 3: co2mini wrong data format received or checksum error
2016.01.19 06:53:20 3: co2mini wrong data format received or checksum error
2016.01.19 06:53:20 3: co2mini wrong data format received or checksum error
2016.01.19 06:53:25 3: co2mini wrong data format received or checksum error
2016.01.19 06:53:25 3: co2mini wrong data format received or checksum error
2016.01.19 06:53:56 3: co2mini wrong data format received or checksum error
2016.01.19 06:53:56 3: co2mini wrong data format received or checksum error
2016.01.19 06:54:50 3: co2mini wrong data format received or checksum error
2016.01.19 06:54:50 3: co2mini wrong data format received or checksum error
2016.01.19 06:54:55 3: co2mini wrong data format received or checksum error
2016.01.19 06:54:55 3: co2mini wrong data format received or checksum error
2016.01.19 06:55:30 3: co2mini wrong data format received or checksum error
2016.01.19 06:55:30 3: co2mini wrong data format received or checksum error
2016.01.19 06:55:35 3: co2mini wrong data format received or checksum error
2016.01.19 06:55:35 3: co2mini wrong data format received or checksum error
2016.01.19 06:56:05 3: getLedColorByWatchMode. Event: wz_lightLedStripe - 5
2016.01.19 06:58:48 3: getLedColorByWatchMode. Event: wz_lightLedStripe - 5
2016.01.19 07:01:17 3: getLedColorByWatchMode. Event: wz_lightLedStripe - 5
2016.01.19 07:02:59 3: co2mini wrong data format received or checksum error
2016.01.19 07:02:59 3: co2mini wrong data format received or checksum error
2016.01.19 07:03:09 3: co2mini wrong data format received or checksum error
2016.01.19 07:03:09 3: co2mini wrong data format received or checksum error
2016.01.19 07:03:31 3: getLedColorByWatchMode. Event: wz_lightLedStripe - 5
2016.01.19 07:06:35 3: getLedColorByWatchMode. Event: wz_lightLedStripe - 5
2016.01.19 07:06:40 3: co2mini wrong data format received or checksum error
2016.01.19 07:06:40 3: co2mini wrong data format received or checksum error
2016.01.19 07:09:30 3: co2mini wrong data format received or checksum error
2016.01.19 07:09:30 3: co2mini wrong data format received or checksum error
2016.01.19 07:09:40 3: co2mini wrong data format received or checksum error
2016.01.19 07:09:40 3: co2mini wrong data format received or checksum error
2016.01.19 07:10:31 3: co2mini wrong data format received or checksum error
2016.01.19 07:10:31 3: co2mini wrong data format received or checksum error
2016.01.19 07:10:51 3: co2mini wrong data format received or checksum error
2016.01.19 07:10:51 3: co2mini wrong data format received or checksum error
2016.01.19 07:12:15 3: co2mini wrong data format received or checksum error
2016.01.19 07:12:15 3: co2mini wrong data format received or checksum error
2016.01.19 07:12:20 3: co2mini wrong data format received or checksum error
2016.01.19 07:12:20 3: co2mini wrong data format received or checksum error
2016.01.19 07:13:21 3: co2mini wrong data format received or checksum error
2016.01.19 07:13:21 3: co2mini wrong data format received or checksum error
2016.01.19 07:14:21 3: getLedColorByWatchMode. Event: wz_lightLedStripe - 5
2016.01.19 07:14:22 3: co2mini wrong data format received or checksum error


So ists definiert:
Internals:
   CHANGED
   DEF        192.168.2.23:2020
   DEVICE     192.168.2.23:2020
   FD         19
   NAME       wz_co2mini
   NR         518
   NTFY_ORDER 50-wz_co2mini
   STATE      713 ppm
   TYPE       co2mini
   Helper:
     Dblog:
       Co2:
         Bendblog:
           TIME       1453187984.42798
           VALUE      728
   Readings:
     2016-01-19 08:21:14   co2             713
     2016-01-19 08:21:12   temperature     16.85
   Helper:
     buf
     mode       net
Attributes:
   alias      CO2 Sensor
   event-min-interval co2:120
   event-on-update-reading co2
   group      Klima
   room       Wohnzimmer
   stateFormat co2 ppm

vbs

Ich hab das Modul für mich mal etwas umgebaut, um die o.g. Punkte zu verbessern. Folgende Änderungen sind da bisher drin:

  • Nutzung der standardisierten DevIo-Funktionen für den Aufbau (und automatischen Neuaufbau) von Remote-Verbindungen
  • STATE wird nicht mehr überschrieben, so dass das Attribut stateFormat genutzt werden kann
  • Bug beim Parsen der Nachrichten per TCP behoben
  • Gerät wird nicht mehr automatisch disablet bei Verbindungsproblemen

Ich konnte jedoch nur die Variante mit Remote-Server testen, da ich das Gerät nicht physikalisch zu meiner FHEM-VM durchschleifen konnte. Kann also gut sein, dass da was nicht funktioniert wenn man den CO2mini direkt per USB verbindet. Rückmeldungen wären toll, dann fix ich das.

Zu finden ist der Quellcode hier:
https://github.com/verybadsoldier/fhem-co2mini/tree/vbs

Bzw. hier zum direkten Einbinden in FHEM:
https://raw.githubusercontent.com/verybadsoldier/fhem-co2mini/vbs/controls_co2mini.txt

peterk_de

Hallo zusammen,

ich habe an 2 mehr oder weniger identischen Raspberrys jeweils einen co2mini mit dem Modul hier in Betrieb. Seit kurzem funktioniert nun einer nach einem Reboot nicht mehr, der andere noch prima.

Ich konnte den Fehler daher schon soweit eingrenzen, dass es nichts mit dem Modul zu tun hat. Denn wenn ich jeweils auf der shell mit cat gucke, was das Device so liefert, kommen bei dem funktionierenden einige unleserliche Steuerzeichen, bei dem kaputten - kommt jedoch gar nichts.

Das Gerät wird aber per lsusb bzw. dmesg vom OS identisch wie bei dem funktionierenden erkannt. Udev-regeln spielen an dieser ja noch keine Rolle, sind aber korrekt gesetzt, hatte ja vorher auch geklappt. Diverse Neustarts halfen leider nicht. LCD und LED des Co2mini zeigen derweil korrekte Werte am.

Bevor ich den Hardwaretot diagnostiziere und mir einen neuen bestelle, wollte ich einmal in die Runde fragen, ob jemand ne Idee hat?
FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

joshi04

Hast Du einen aktiven Hub dazwischen? Wenn nicht wäre mein erster Verdacht die Stromversorgung vom RPi. RPi ist bekannt dafür.
Vielleicht hast Du noch andere Hardware, an der Du die CO2minis testen könntest.


Gesendet von iPhone mit Tapatalk
NUC: 2xJeeLink, PCA301/TX35DTH; HueBridge, LivingColors; vair-monitor (CO2); HMLan, Winmatic, HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HM-ES-TX-WM, HM-WDS10-TH-O, HM-ES-PMSw1-Pl, HM-SEC-SC-2, HM-SEC-SCo; AVM DECT 200; panStamp; smartVISU

Ellert