Voltcraft CO-20 unter IPS Raspberry PI einbinden?

Hi kann mir jemand helfen den Voltcraft CO-20 unter IPS auf Raspberry PI 2 in IPS zum laufen zu bekommen ?

Das er auf dem RP läuft habe ich mit dieser Anleitung hinbekommen :

https://code.google.com/p/usb-sensors-linux/wiki/Install_AirSensor_Linux

aber wie könnte ich z.B. diesen Linux Befehl „./airsensor -o“ mit ips ausgeben und dann die Antwort:

„2013-04-28 15:08:55, VOC: 450, RESULT: OK“ in eine Variable in IPS schreiben ?

Oder würde es noch eine bessere Lösung dafür geben ?


 echo system("/voller/pfad/zur/datei/airsensor -o");

Sollte klappen :slight_smile:

paresy

@parsey Vielen Dank für deinen Tip hat super geklappt

Hier mein Script :

<?

$luftqid=46243 /*[Verbrauchsmessungen\Co2 Messung Wohnzimmer\Luftquallität]*/ ;
$zeitid=30372 /*[Verbrauchsmessungen\Co2 Messung Wohnzimmer\Die letzte Messung war um ]*/ ;
$luftid=56692 /*[Verbrauchsmessungen\Co2 Messung Wohnzimmer\Die Luft ist]*/ ;
$pushid=26356 /*[ihome]*/;

$wert=  system("/airsensor/airsensor -o");
$wert1=explode(' ', $wert);
$wert2=$wert1[3];
$wert3=explode(',', $wert2);
$wert4=$wert3[0];

Setvalue($luftqid, "$wert4 pph");

//Uhrzeit in Variable schreiben !

$time = date("H:i:s");

SetValue($zeitid  ,$time );

//Auswertung

$co2wert=getvalue($luftqid );

if ($co2wert >= 2000)
{
SetValue($luftid , "eklig, bitte lueften!" );

WFC_PushNotification($pushid , "ihome", "Die Luft im Wohnzimmer ist eklig, bitte lueften!", "Speaker", 0);
}


if ($co2wert >= 1500)
{
SetValue($luftid , "sehr schlecht!" );
WFC_PushNotification($pushid , "ihome", "Die Luft im Wohnzimmer ist schlecht!", "Speaker", 0);
}

if ($co2wert >= 1000)
{
SetValue($luftid , "geht so!" );
}

if ($co2wert <= 1000)
{

SetValue($luftid , "Gut!" );
}

?>

Es sind alles String Variablen !

Ich lasse das Script alle 5min laufen :slight_smile:

Wie sind denn so die ersten Erfahrungen mit dem Teil?
Hab auch noch ein Blackberry im haustechnikraum… dort wäre unsere lüftungsanlage… den Sensor ins ansaugrohr und schon hätte ich was gegen unsere landluft :joy:

Naja die Wertet sollte man nicht so ernst nehmen, ist aber ein netter Richtwert wenn man zum Beispiel einen Holzofen hat.
Warum hast du ein Blackberry im Haustechnik Raum?

Sorry aurokorrektur von meinem China fon… Sollte raspberry heißen… [emoji106]
mit freundlichen grüssen über setzt die auto Korrektur z.b in " mit freundlichen Russen "[emoji1]

Moin,

ich habe den Vorgänger von iAQ-core C / Air Quality Sensors / Chemical Sensors / Products / Home - ams AG
,die alte „IAQ Engine“ seit Jahren im Einsatz. Läuft wirklich sehr gut.
Habe das Teil aber an der Wand hängen (Schalterblende) mit einem Umsetzer I2C aud LCN I-Port.
Da in dem Voltcraft CO-20 das gleiche Sensorelemt sitzt,sollte der gute Werte liefern.
Kommt halt auf den Standort an.
Ich muss auch noch ein Muster bauen, der in einen Ansagkanal einer Lüftung passt, ein Freund hatte die Hütte voll, von Landluft :smiley:

Super danke für die Info.
Mir geht’s dabei nur um Tendenzen. Lüften ja / Nein / evtl.
Gerade was die landluft angeht, möchte ich die Anlage ausschalten sobald der Landwirt sein … auf die Felder rausfährt.
Und das halt auch, wenn niemand zuhause ist… ansonsten mieft s im ganzen Haus dank lüftungsanlage😊
Jetzt brauch ich nur noch ein opentherm gateway für die vitovent Anlage.

endlich mal zeit gefunden dein Skript mit meinem Velux / Applied Sensor Luftgütesensor zu testen.

Vielen Dank… dafür…
Kleine Anpassung und Erweiterung und schon passts… :

Ich musste den Pfad ($wert) unter Linux noch anpassen
Und da die Werte als String geschrieben werden, habe ich mir noch eine Hilfsvariable eingebaut.
Ist eigentlich recht easy.

In jeder Schleife lasse ich die passende INT Variable schreiben.
1 (Luft sehr gut)
2 (Luft Gut)
3 (Luft schlecht)
4 (Luft sehr schlecht)

Diese Hilfsvariable lässt sich dann mit einem Variablenprofil farbig im Webfront anzeigen und mit einem Individuellen Text versehen.

<?
$luftqid=47556 /*[Haus\Haus\Luftguetesensor USB\Luftqualität]*/;
$zeitid=18435 /*[Haus\Haus\Luftguetesensor USB\Letzte Abfrage erfolgt am]*/;
$luftid=17465 /*[Haus\Haus\Luftguetesensor USB\Bemerkung]*/;
$hilfsvariable=23951 /*[Haus\Haus\Luftguetesensor USB\Hilfsklassifizierung]*/;

$wert=  system("/home/pi/airsensor/airsensor -o");
$wert1=explode(' ', $wert);
$wert2=$wert1[3];
$wert3=explode(',', $wert2);
$wert4=$wert3[0];

Setvalue($luftqid, "$wert4 ppm");
//Uhrzeit in Variable schreiben !
$time = date("H:i:s");
SetValue($zeitid  ,$time );
//Auswertung
$co2wert=getvalue($luftqid );
if ($co2wert >= 2000)
{
SetValue($luftid , "Bitte lueften!" );
SetValue($hilfsvariable,4);
}
if ($co2wert >= 1500)
{
SetValue($luftid , "Luft schlecht!" );
SetValue($hilfsvariable,3);
}
if ($co2wert >= 1000)
{
SetValue($luftid , "Luft o.k!" );
SetValue($hilfsvariable,2);
}
if ($co2wert <= 1000)
{
SetValue($luftid , "Luft Sehr Gut!" );
SetValue($hilfsvariable,1);
}
?>

Hallo zusammen,
ich habe mir auch mal drei dieser Sensoren (USB-Stick) als neue Spielzeuge gekauft. Ich möchte diese in mehreren Räumen mit je einem Raspberry betreiben und die Messwerte dann per TCP an den IPS-Server schicken. Ich habe dazu den Quellcode des airsensors um einen kleinen TCP-Client erweitert. Der „neue“ Airsensor" wird auf den Raspberries installiert und liefert dann in wählbaren Intervallen die Messwerte an den IPS-Server. Grob muss folgendes gemacht werden:

  1. Im Symcon-Baum ein neues IO-Device als ServerSocket anlegen und z.B. „Airsensor Server Socket“ nennen. Als Port z.B. 6000 wählen. Dieser Port muss dann später auf der Clientseite ebenfalls konfiguriert werden.

  2. Unterhalb des neuen Server Sockets legt Ihr dann eine Registervariable an.

  3. Unterhalb des neuen Server Sockets legt Ihr außerdem ein neues Script „getLuftguete“ an. Dieses Skript bekommt von der Registervariablen die Messwerte aller Sensoren und verteilt diese anhand des mit übertragenen Sensornamens auf die einzelnen Variablen, die dann den Messwert je eines Sensors repräsentieren.


<?
if ($_IPS['SENDER'] == "RegisterVariable"){
       $msg = explode("|",$_IPS['VALUE']);

		 if($msg[0] == "LuftgueteHeizkeller")
           SetValue(35016 /*[Keller\Heizkeller\LuftgueteHeizkeller]*/,$msg[1]);
       else if($msg[0] == "LuftgueteHAR")
           SetValue(16278 /*[Keller\HARaum\LuftgueteHAS]*/,$msg[1]);

          // hier können mit else if Anweisungen noch andere Sensoren ergänzt werden
}
?>

Je nach Anzahl der Luftgütesensoren solltet Ihr darin entweder nur die if-Anweisung (1 Sensor) oder weitere „else if“ Anweisungen haben. Die IDs (hier 35016,16278) zeigen auf Integer-Variablen, die die gemessenen Luftgüten der einzelnen Sensoren aufnehmen. Diese müsst Ihr also ändern.

  1. Nun müssen Socket, Registervariable und Skript noch miteinander verknüpft werden:
    Dazu tragt Ihr in der Konfiguration der Registervariablen als „Ziel“ das gerade erstellte Skript ein, als übergeordnete Instanz den Namen des erstellten Server Sockets.

  2. Nun zur Client-Seite (Installation für jeden Raspberry, an dem ein Sensor eingesteckt ist:
    falls noch nicht vorhanden, libusb installieren:
    sudo apt-get update
    sudo apt-get install libusb-dev
    airsensor.c (aus dem Anhang) kompilieren bzw. direkt das Executable nehmen:
    gcc -o airsensor airsensor.c -lusb

  3. Das übersetzte Programm nach /usr/local/bin/ kopieren:
    cp airsensor /usr/local/bin/.

  4. Startscript anpassen:
    Im Startscript „airsensor-startscript“ in der Zeile
    „/usr/local/bin/airsensor -h 192.168.1.7 -p 6000 -s LuftgueteHeizkeller -t 60 &“
    die Angaben für IP-Adresse, Port und Sensorname (hier „LuftgueteHeizkeller“) und ggf. das Intervall (60sec) ändern. Die IP-Adresse ist die des Symcon-Servers, der Port entspricht dem im Symcon-ServerSocket konfigurierten Port. Der Sensorname muss genauso lauten wie im Script „getLuftguete“ angegeben.

  5. Startscript nach /etc/init.d/ kopieren:
    cp airsensor-startscript /etc/init.d/airsensor
    chmod 755 /etc/init.d/airsensor
    sudo update-rc.d airsensor defaults

Optional:
9. Test:
/etc/init.d/airsensor start
ps aux|grep airsensor
/etc/init.d/airsensor stop
ps aux|grep airsensor

So wie hier beschrieben, muss der Airsensor auf den Raspberries unter root laufen. Durch Anpassung einer udev-Regel kann man dies ggf. ändern.

Wie schon an anderer Stelle beschrieben, sollte man keine exakten Messungen erwarten.

Momentan sammel ich noch meine Erfahrungen mit den Sensoren. Ganz klar ist mir noch nicht, wie man die Dinger am besten kalibriert. Wenn ich diese draußen kalibriere, bekomme ich anschließend in den Räumen sehr hohe Werte, insbesondere im Keller. Vermutlich liegt dies auch an den tiefen Außentemperaturen. Ich habe mich daher erstmal entschlossen, die Sensoren in einem gut gelüfteten Raum zu kalibrieren. Um auch die höheren Werte erfassen zu können, habe ich den betrachteten Messbereich im Quellcode von 2000 auf 10000 erweitert, soll heißen, es werden Messwerte im Bereich 450-10000 an den IPS-Server geschickt. Sollte der Sensor in Räumen mit sehr schlechter Luft (> 10000) sein, werden diese Werte nicht gemeldet.

Gruß
Peter

airsensor.zip (9.05 KB)