[PATCH] 52_I2C_K30: Perl Modul für CO2 Sensor K-30 über I2C

Begonnen von yoda_gh, 26 März 2016, 15:56:51

Vorheriges Thema - Nächstes Thema

yoda_gh

Hallo zusammen!

Ich habe die letzten Tage ein kleines FHEM-Modul für die Ansteuerung eines K-30 CO2-Sensors über I2C geschrieben. Getestet habe ich es auf dem Raspberry mit dem aktuellen FHEM (nach Eingabe von "update"). Da ich bei FHEM neu und bei Perl ziemlich außer Übung bin, wollte ich erstmal, dass jemand über den Code drüberschaut, bevor ich eine SVN-Berechtigung beantrage.

Patch hängt an. [update 2016-03-28: Aktualisiert nach Review-Kommentaren von Klaus.]

Ich habe den Code großteils von 52_I2C_SHT21.pm geklaut, super wäre es, wenn Klaus Lust/Zeit hätte, mal drüber zu schauen, aber natürlich bin ich über jeden Hinweis dankbar!

--
Gernot

klausw

Moin,

klar kann ich mal drüber schauen, allerdings müsstest du mir erklären, wie ich aus dem diff File unter Windows was lesbares bekommen.
Ich bin entweder unfähig die entsprechenden Tools zu bedienen oder ich habe das Passende noch nicht gefunden.
Am besten wäre es, wenn du einfach das Modul anhängst.
Wenn keine Fehler im Log auftauchen und nichts hängen bleibt, dann bist du auf alle Fälle auf einem guten Weg.
Das Modul ist ja nicht gerade ein Schnäppchen  8)
In die physikalischen Module (RPII2C, etc.) kann ich es ja schon mal eintragen
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

yoda_gh

#2
Hallo, frohe Ostern!

Super, danke für Deine Bereitschaft! Natürlich kann ich Dir gerne das Modul anhängen, siehe unten!

Tools für Windows kann ich jetzt nicht wirklich empfehlen, das ist jetzt nicht so meine Umgebung. :)

Und bezüglich Schnäppchen: ich komme eher aus der Embedded-Welt, daher schreckt mich jetzt I2C nicht wirklich ab - eher meine sehr eingerosteten Perl-Kenntnisse. :)

Das Modul läuft mit RPII2C auf einem Raspi 2 seit einigen Tagen wunderbar mit. Es gibt zwar sporadische I2C-Fehler und das Setup lief erst stabil, nachdem ich die I2C-Frequenz von 100kHz auf 90kHz reduziert habe, aber das hat nix mit FHEM und dem Modul zu tun, das Problem hatte ich auch vorher schon mit einem kleinen Python-Testprogramm. Das Datenblatt warnt auch vor sporadischen Fehlern, wenn der uC auf dem Sensor grad mit CO2-Messungen beschäftigt ist. Aber gut, dass Du es angesprochen hast, ich habe das gleich noch als Kommentar in die Doku aufgenommen.

Lg,

Gernot

klausw

Zitat von: yoda_gh am 28 März 2016, 15:16:34
Hallo, frohe Ostern!
Ebenso  :)

Zitat von: yoda_gh am 28 März 2016, 15:16:34
Und bezüglich Schnäppchen: ich komme eher aus der Embedded-Welt, daher schreckt mich jetzt I2C nicht wirklich ab - eher meine sehr eingerosteten Perl-Kenntnisse. :)
Schnäppchen bezog sich eher auf den Preis. Knapp 100€ ist schon ne Ansage.

Zitat von: yoda_gh am 28 März 2016, 15:16:34
Das Modul läuft mit RPII2C auf einem Raspi 2 seit einigen Tagen wunderbar mit. Es gibt zwar sporadische I2C-Fehler und das Setup lief erst stabil, nachdem ich die I2C-Frequenz von 100kHz auf 90kHz reduziert habe, aber das hat nix mit FHEM und dem Modul zu tun, das Problem hatte ich auch vorher schon mit einem kleinen Python-Testprogramm. Das Datenblatt warnt auch vor sporadischen Fehlern, wenn der uC auf dem Sensor grad mit CO2-Messungen beschäftigt ist. Aber gut, dass Du es angesprochen hast, ich habe das gleich noch als Kommentar in die Doku aufgenommen.
Na Super und das bei dem Preis. Gibt es da noch ein Update?

Ein paar Dinge würde ich noch vorschlagen (einige muss ich selbst noch umsetzten):

K30_I2C_ADDRESS könntest du gleich als Zahlenwert definieren (also ohne Hochkommas). Dann musst du es nicht wieder mit hex() wandeln.

Im I2C_K30_Init macht return keinen Sinn, da dies nicht zurückgeliefert wird.
Ein Log3 mit Level 1 oder so macht da mehr Sinn.

Sonst ist mir nix aufgefallen. Hast nur meine Fehler mit eingebaut ;).
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

yoda_gh

#4
Zitat von: klausw am 28 März 2016, 19:04:44
Schnäppchen bezog sich eher auf den Preis. Knapp 100€ ist schon ne Ansage.

Ja, leider wahr. :( Aber ich habe einige Zeit investiert, was günstigeres zu finden, aber bisher ohne Erfolg.  Zum Preis kommt noch, dass das Ding in DE nicht ganz einfach zu beschaffen ist, von den beiden deutschen Lieferanten mag der eine gar keine Privatkunden und Driesen+Kern liefern zwar an privat, aber zu gesalzenen Versandkosten. Letztlich kommt man praktisch auf denselben Preis, wie wenn man es von co2meter.com aus den USA schicken lässt, obwohl der Hersteller in Schweden sitzt. :(

Die beiden chemischen Sensoren hier habe ich noch gefunden:

Beide reagieren aber auf eine Reihe von Gasen, der Messwert hängt auch stark von Temperatur etc. ab. Beide müssen geheizt werden, das heißt, sie werden recht warm und brauchen mit 100 bzw. 160 mA fast schon so viel wie mein ganzer Raspi (K-30: 40 mA im Schnitt). Mit dem MQ135 kann man wohl wirklich einen tauglichen CO2-Sensor basteln (http://davidegironi.blogspot.de/2014/01/cheap-co2-meter-using-mq135-sensor-with.html), habe es aber selbst noch nicht getestet. Der MD62 hat einen Messbereich von 0-100 Vol%, dürfte also in der relevanten Messregion (400 bis 1000 ppm) viel zu ungenau sein. Wenn ich tot bin, merke ich das selbst, dann brauche ich keinen Sensor mehr. :)

Zitat von: klausw am 28 März 2016, 19:04:44
Na Super und das bei dem Preis. Gibt es da noch ein Update?

CO2-Messung ist wohl nicht trivial und die 5% Lesefehler tun ja nicht wirkich weh (Begründung im Datenblatt: die CO2-Messung hat immer Priorität und I2C muss im Zweifel hintanstehen). Und ansonsten ist das Modul schön dokumentiert und gut zu handhaben - und nett ist so ein CO2-Sensor schon: man sieht an den Kurven, wie viel Leute in der Wohnung sind, ob wir gerade schlafen etc. und sieht eindringlich, dass man viel zu selten lüftet... Ich steuere unsere Wohnraumläuftung (Vallox KWL 090 SC) jetzt mit dem K-30 und dem PID20 von FHEM und bin aktuell sehr zufrieden. (Davor habe ich das schon mit einem Arduino gemacht, aber das war ziemlich mühsam).

Zitat von: klausw am 28 März 2016, 19:04:44
Ein paar Dinge würde ich noch vorschlagen (einige muss ich selbst noch umsetzten):

K30_I2C_ADDRESS könntest du gleich als Zahlenwert definieren (also ohne Hochkommas). Dann musst du es nicht wieder mit hex() wandeln.

Im I2C_K30_Init macht return keinen Sinn, da dies nicht zurückgeliefert wird.
Ein Log3 mit Level 1 oder so macht da mehr Sinn.

Sonst ist mir nix aufgefallen. Hast nur meine Fehler mit eingebaut ;).

Wunderbar, habe die Änderungen gemacht, außerdem die Whitespaces noch gefixt und das Attachment oben aktualisiert. Dann beantrage ich mal die SVN-Rechte. :)

yoda_gh

Habe das Modul jetzt eingecheckt. Danke nochmal für's Review!

Klaus, kannst Du es in die physikalischen Module als Client eintragen? Danke!

Sollte ich wohl nochmal eine separate Ankündigung ins Forum setzen?

klausw

Zitat von: yoda_gh am 31 März 2016, 07:02:36
Habe das Modul jetzt eingecheckt. Danke nochmal für's Review!

Klaus, kannst Du es in die physikalischen Module als Client eintragen? Danke!

Sollte ich wohl nochmal eine separate Ankündigung ins Forum setzen?

ups, habe ich ganz vergessen
wird heute nachgeholt
Kannst ja einen neuen Thread [neues Modul] oder so machen.
Allerdings wird es sicher trotzdem Wildwuchs geben, da nicht jeder so genau im Forum sucht  8)
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280