airpi

AirPi

Im Rahmen der aktuellen Berichterstattung wird nun auch in Deutschland das Raspberry Pi Projekt AirPi von Tom Hartley aus England beworben.

Dank direktem Kontakt zu Tom seit Anfang 2013 ist bei uns schon seit Anfang diesen Jahres eine AirPi-Wetterstation auf Raspberry Pi Basis im Einsatz und liefert aktuelle Daten zu Temperatur, Luftfeuchtigkeit, Druck, Helligkeit und Gehalt an Kohlenmonoxid und Stickstoffdioxid.

Wir haben dazu den von Tom bereit gestellten Python-Code weiter entwickelt, sodass man nicht auf die Ausgabe der Messdaten als reinen Text bzw. die auf die Veröffentlichung der Daten bei Xively angewiesen ist, sondern diese in eine lokale Datenbank speichern kann.
Man hat die Möglichkeit, entweder in einem herkömmlichen Datenbankformat wie MySQL zu speichern oder, weil für diese Art von Daten von Vorteil, in eine RoundRobin-Datenbank. Wir präferieren hierfür die rrdtools von Tobias Oetiker, die zusätzlich auch die Möglichkeit des grafischen Exports der Daten bieten.

airpi-press-month

Den dazu nötigen Code stellen wir über unser GIT zur Verfügung:

https://git.cccmz.de/julric/airpi/

Des Weiteren haben wir den Code so modifiziert, dass das Script nicht mehr kontinuierlich laufen muss (und sekündlich Werte liefert), sondern einen Aufruf durch CRON implementiert, der passend zum Zeitintervall in der RRD Messwerte liefert.

Die Shell-Scripte zum Generieren der Graphen sind separat in unserem GIT-Wiki hinterlegt, sodass diese nach Belieben eingesetzt werden können. Eine variable Umsetzung zur Generation aller Graphen mit einem Script und passenden Parametern wäre denkbar.

Wer Fragen zu dem Projekt hat oder weiter dazu beitragen möchte, kann hier einen Kommentar hinterlassen oder unter kontakt@cccmz.de nachfragen.

 

22 Gedanken zu „AirPi

  1. cmos

    Hi!
    Der AirPi gefällt mir gut und euere Anpassungen klingen interessant- Mich würde interessieren ob ihr mir sagen könnt in wie weit der AirPi in seiner heutigen Konfiguration (AirKit 1.4?) kompartibel ist zu den Plänen des ursprünglichen Sensorumfangs. Ich hätte gerne den UV-Sensor mit drin, der nun nicht mehr zum KIT umfang zu gehören scheint. Kann man den auf der jetzigen Platine ergänzen?

    Danke und Gruß
    cmos

  2. cccmz Artikelautor

    Hallo cmos,

    ein UV-Sensor liefert normalerweise ein analoges Signal in Form eines Spannung, die relativ zum gemessenen UV-Wert ist (z.B. ML8511). So wäre ein einfacher Tausch des Helligkeitssensors oder des Lautstärkesensors (Mikrofon) problemlos möglich, beide sind analoge Sensoren gleicher Funktionsweise (auch die NO2- und CO-Sensoren, aber die will man ja behalten) – man muss nur im Zweifel die Werte anpassen, als die Umrechnung, sofern Du einen Absolutwert haben willst (und nicht die Spannung).
    Eine andere Möglichkeit ist, die weiteren Ausgänge des MCP3008 zu nutzen. Dieser Analog-Digital-Wandlerchip hat 8 Eingänge, wovon bereits 5 durch andere Sensoren belegt sind (NO2, CO, Helligkeit, Lautstärke und theoretisch Luftreinheit [TGS2600]). Einfach einen weiteren Eingang nutzen, den UV-Sensor nach Datenblatt bzw. nach airpi.es (ganz unten) anschließen. In der Software reicht eine Einrichtung des Sensors in der sensor.cfg entsprechend den Einträgen der anderen analogen Sensoren. Wichtig ist eigentlich nur die Anpassung des Eingangs des MCP3008: bspw: adcPin=5 für den 6. Eingang am Wandlerchip.

    Viel Erfolg beim Umsetzen!

    Ergänzung:
    Wenn Du ein AirPi-PCB verwendest, sind dort die noch freien Ports des ADC-Chips sogar auf eine Stiftleiste herausgeführt, sodass man ohne großen Lötaufwand direkt weitere Sensoren anschließen kann:

  3. Thomas Oeding

    Vielen Dank für die Anpassungen/Erweiterungen der Software!

    Ich würde meinen AirPi im freien aufstellen, allerdings stellt sich mir die Frage eines geeigneten Gehäuses.
    Habt ihr da ein Tipp?

  4. cccmz Artikelautor

    Hallo Thomas,

    wir arbeiten auch gerade an der Entwicklung eines Outdoor-Gehäuses. Die Problematik besteht darin, einerseits den Raspberry Pi wasser- und luftdicht zu verpacken, andererseits die AirPi-Platine mit ihren Sensoren in einen (trockenen) Außenluftstrom zu hängen. Eine Idee wäre eine große Feuchtraumabzweigdose (z.B. http://www.reichelt.de?ARTICLE=123529 ) mit einem Zwischenboden zu versehen, sodass oben ein dichter, trockener Bereich für den Raspberry Pi entsteht und unten ein luftdurchströmter Teil für die AirPi-Platine mit den Sensoren Platz findet. Außen würde man mit Abstandsschrauben Bleche Befestigen, um sowohl eine Kühlung des Innenraumes als auch einen Schutz vor direkter Sonneneinstrahlung auf das Gehäuse zu bieten (ähnlich einer Markise über einem Wintergarten). Die Bleche würden dann auch bei starkem Regen das Wasser von den Lufteintrittsöffnungen des unteren Teils abhalten.
    Leider ist das Gehäuse aus Zeitgründen nicht über den Planungs- und Teilebeschaffungsstatus hinaus gekommen, sodass wir noch keine Bilder präsentieren können. Diese folgen aber hoffentlich bald!

  5. Peter

    Vielen dank! Specially adding the rrdtool is a great step forward.
    I noted that the instructions for adding the RRD says you need to install python-rrdtool, but does not tell you to install rrdtool itself. Maybe add: sudo apt-get install rrdtool

    I now seem to have rrdtool running, but I receive an error message

    Traceback (most recent call last):
    File „airpi_cron.py“, line 201, in
    working = working and i.outputData(data)
    File „/root/airpi/outputs/rrd.py“, line 64, in outputData
    ret = rrd_update(self.rrd_file, rrd_value);
    rrdtool.error: rrd/data_airpi.rrd: found extra data on update argument: 20305

    I do not understand the problem, I use the standard configuration files as suggested…

    Again keep up the good work!!

    (sorry I read German, but I cannot write it very well).

  6. cccmz Artikelautor

    Hallo Peter,

    danke für den Hinweis, ich habe sudo apt-get install rrdtool der Anleitung im Wiki hinzu gefügt.

    Die Fehlermeldung, die Du bekommst, hat einen ganz einfachen Grund:
    Die aktuellen Scripte gehen von der Nutzung aller Sensoren, darunter auch dem TGS2600 aus. Dieser wird auch bei Dir mit ausgelesen, jedoch ist die im GIT als Beispiel vorhandene rrd/data_airpi.rrd noch ohne das entsprechende Feld für den TGS2600, sodass mehr Daten in die RRD geschrieben werden sollen, als diese Spalten hat. Entweder erstellst Du Dir eine neue RRD (siehe hier), wobei man folgende Ergänzung machen muss:

    [...]
    DS:vol:GAUGE:180:U:U \
    DS:smoke:GAUGE:180:U:U \
    RRA:AVERAGE:0.5:1:3200 \
    [...]

    Oder Du nimmst das RRD-Script in https://git.cccmz.de/julric/airpi/tree/master/rrd_scripts und erweiterst Deine RRD um ein Feld:
    https://git.cccmz.de/julric/airpi/wikis/rrd-scripts

    Ich hoffe, das hilft Dir, den Fehler zu beseitigen!

  7. Pingback: BitBastelei #122 – AirPi: Luftmessung mit dem Raspberry Pi | Adlerweb

  8. Christian

    Hi,
    ich habe mal ne Frage: kann ich weitere ADC Wandler hinzufügen, wenn ich noch mehr Sensoren brauche (also mehr als 3 zusätzliche). Windsensor, Radioaktivität, Schneehöhe, Regenmesser und Bodenfeuchtigkeit wären leider schön 5. Wirkt das AirPi wie ein Shield und kann gestapelt werden, wenn ich z.B. noch weitere Shields installieren möchte?

    Viele Grüße
    Christian

  9. cccmz Artikelautor

    Hallo Christian,

    es sollte möglich sein, an Deinen PI mehrere ADC-Wandler anzuschließen, da der hier verwendete MCP3008 über SPI mit dem PI verbunden ist. Wie das grob funktionieren sollte, steht in http://www.brianhensley.net/2012/07/getting-spi-working-on-raspberry-pi.html
    Zusätzlich ist wichtig zu wissen, welche GPIOs durch die AirPi-Platine verwendet werden. In der Version 1.2 verwendet der AirPi folgende GPIOs:

    BMP805 (i2c) – 2,3
    DHT22 – 4
    Red LED – 10
    Green LED – 22
    MCP3008 – 18, 23, 24, 25
    LDR – ADC0
    TGS2600 – ADC1
    MiCS2710 – ADC2
    MiCS5525 – ADC3
    MIC – ADC4

    Damit bleiben nicht nur 3 ADC-Ports, sondern auch folgende GPIOs:
    7, 8, 9, 11, 14, 15, 17, 27
    (gilt für RasPi A und B)

    Es lassen sich so problemlos weitere Platinen, die nur die freien GPIOs nutzen, anschließen. Ausgenommen sind dabei natürlich die Interfaces (I2C und SPI), die auch mehrere Devices vertragen.

    Mit chaotischem Gruß
    julric

  10. Dominic

    Hallo,

    Ich habe heute meinen AirPi zum Laufen gebracht und ohne Probleme mit dem von Tom bereit gestellten Python-Code arbeiten können. Nun wollte ich euren Code ausprobieren und bekomme folgenden Fehler.
    Ich weiss nicht so recht, wo das Problem ist. Ich hoffe ihr könnt mi helfen.

    Danke und viele Grüsse

    pi@raspberrypi ~/airpi $ sudo python airpi.py
    Success: Loaded sensor plugin BMP085-temp
    Success: Loaded sensor plugin BMP085-pres
    Success: Loaded sensor plugin MCP3008
    Error: could not import sensor module dht22
    Error: Did not import sensor plugin DHT22-humidity
    Traceback (most recent call last):
    File „airpi.py“, line 88, in
    raise e
    File „/home/pi/airpi/sensors/dht22.py“, line 18
    ini_file.read(dhtreader.tempfile)
    IndentationError: unindent does not match any outer indentation level

  11. Urs

    Hallo

    Ich habe die Software installiert und es läuft eigentlich ganz gut – bis auf die DHT22-Sensoren (als output wurde nur print aktiviert).

    Sobald ich die beiden DHT22 Sensoren aktiviere erhalte ich folgende Fehlermeldung:

    pi@raspberrypi ~/AirPi_Julric $ sudo python airpi.py
    Success: Loaded sensor plugin BMP085-temp
    Success: Loaded sensor plugin BMP085-pres
    Success: Loaded sensor plugin MCP3008
    Error: could not import sensor module dht22
    Error: Did not import sensor plugin DHT22-humidity
    Traceback (most recent call last):
    File „airpi.py“, line 88, in
    raise e
    File „/home/pi/AirPi_Julric/sensors/dht22.py“, line 19
    ini_file.read(dhtreader.tempfile)
    ^
    IndentationError: unindent does not match any outer indentation level

    Die DHT22 werden sowohl mit der ursprünglichen AirPi Software als auch mit derjenigen von Hayden erkannt.

    Wo da wohl der Fehler liegt?

  12. Dominic

    Hallo,

    Kann mir jemand beim Code helfen um ihn so zu ändern, dass alle Werte in interpretierte Form ausgegeben werden?
    Ich kenne zwar diese Seite https://pi.gate.ac.uk/posts/2014/02/25/airpisensors/, aber ich habe keine Ahnung wo im Code die Werte umgewandelt werden müssten.

    Es geht mir um Light-level in Lux, die NO2 und CO Werte in ppm und Methan, Butan, Ethanol und Wasserstoff vom TGS2600. Ausserdem habe ich das Mikrofon mit einem UV-Sensor getauscht.
    (ich habe AirPi 1.4).

    Ich hoffe mir kann jemand helfen. Danke!

    Viele Grüsse

    Dominic

  13. cccmz Artikelautor

    Hallo Dominic,

    Du kannst eine Umrechnung der Messwerte sowohl direkt beim Auslesen der Sensoren in den entsprechenden Dateien unterhalb von sensors/ vornehmen (einfach die entsprechende Formel nach dem Auslesen des Wertes einfügen, z.B. temp = temp * 1.8 + 32 für die Umrechnung Celsius in Fahrenheit), als auch später beim Generieren der Grafiken, sozusagen just-in-time: http://oss.oetiker.ch/rrdtool/doc/rrdgraph_rpn.en.html

    Viel Erfolg!

  14. Urs

    Hallo

    Ich hab mich nochmal versucht und alles neu per git installiert. Leider habe ich immer noch einen diesmal ein wenig anderen DHT22-Fehler:

    Success: Loaded sensor plugin BMP085-temp
    Success: Loaded sensor plugin BMP085-pres
    Success: Loaded sensor plugin MCP3008
    Error: could not import sensor module dht22
    Error: Did not import sensor plugin DHT22-humidity
    Traceback (most recent call last):
    File „airpi.py“, line 88, in
    raise e
    File „/home/pi/AirPi/sensors/dht22.py“, line 62
    t, h = dhtreader.lastData
    ^
    IndentationError: unindent does not match any outer indentation level

    Hab ich was falsch gemacht??

  15. Jan

    Hallo,
    wenn ich euren Code aus dem GitLab mit
    sudo git clone -b non-modular https://git.cccmz.de/julric/airpi.git
    laden möchte, komme ich den Fehler:

    Cloning into ‚airpi’…
    fatal: unable to access ‚https://git.cccmz.de/julric/airpi.git/‘: server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

    Wodran liegt das?
    Ich habe alles hier nach gemacht http://airpi.es/step3.php und dann nur eure Git Adresse eingetragen

    Ich bin über jeden Tip dankbar.

    Gruß
    Jan

  16. amenthes

    Hallo Jan,

    ich kann den Fehler nicht nachstellen, ich bekomme einen anderen Fehler, wenn ich mit -b non-modular klonen möchte. Wenn ich -b non-modular ganz weg lasse, funktioniert es bei mir direkt.

    Liebe Grüße
    amenthes

  17. Jan

    Guten Morgen amenthes,
    danke für deine Antwort.

    Das mit dem git hat jetzt geklappt.
    Eine Zeit hat der Pi auch seine Messwerte in mySQL geschrieben. Allerdings ohne den DHT22. Wenn ich den aktiviere habe ich den gleichen Fehler wie Urs.
    Ich bin überhaupt kein Python Profi aber ich habe mir den letzten commit mal angesehen, macht es wirklich so viel aus, wenn man nur den Code einrückt??

    Dann habe ich im Moment noch einen anderen Fehler :-)
    bcm2835_init: Unable to open /dev/mem: Permission denied
    Segmentation fault

    Keine Ahnung wo der auf einmal her kommt ^^

    Gruß
    Jan

  18. amenthes

    Ja, in Python ist Einrückung tatsächlich extrem wichtig! Einrückung wird dort behandelt wie in anderen Sprachen z.B. geschweifte Klammern, also als markierung wo ein Block anfängt und endet.

  19. Walter

    Ich versuche mich gerade am AirPi aber ich bekomme die gleiche Fehlermeldung wie Urs.
    Leider habe ich keine Ahnung, wie das lösen soll.
    Ich bin für Tipps dankbar.
    Walter

  20. spookey

    Du meinst diesen Fehler?

    IndentationError: unindent does not match any outer indentation level

    Bitte nutze einen ordentlichen Texteditor – es geht hier um den Whitespace – das ist das was man normalerweise nicht sieht.
    Ein ordentlicher Texteditor hat meist eine Funktion diese trotzdem sichtbar zu machen.

    Konvertiere den Whitespace in der entsprechenden Datei bitte einheitlich auf vier Leerzeichen anstatt Tabs, so wie es unter Python konvention ist.

  21. Christian

    Hallo zusammen,

    habe mir meinen AirPi aktuell selber zusammengesetzt. DHT22, BMP180 und TSG2600 Sensoren.
    Laufen auch aktuell über den Print-Output.
    Soweit so gut.
    Gibt es aktuell noch die beiden anderen Sensoren zu kaufen? (MICS-2710 und 5514) finde diese aktuell nicht wirklich.
    Habt ihr auch schonmal die MQ Sensoren in Betrieb genommen? Habe durch Zufall en MQ2 und MQ135 hier rumfliegen. Das könnte man ja auch einbinden, oder?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *