„AirPi v1.4“ ist eine mit Umwelt-Sensoren bestückte Zusatzplatine, für den Raspberry Pi, der so zu einer Wetterstation erweitert wird, oder zur Raumklima-Überwachung verwendet werden kann. AirPi wurde von Alyssa Dayan und Tom Hartley aus England im Rahmen eines Projektes an der Westminster School entwickelt. Die offizielle Projekt-Webseite ist: http://airpi.es/
Der Beitrag beschreibt den Zusammebau des AirPi-Bausatzes und die Einrichtung eines Raspberry Pi als unabhängige Wetterstation, die Anbindung an Xively.com zur Messdaten Dokumentation und die Auswertung und grafische Darstellung der Messwerte im Web.
Technische Daten des AirPi v1.4
- AirPi Platine, mit voraufgelötetem Sensor für CO und NO2
- Verstärker (MCP6283) zur Verstärkung des Mikrofons
- Analog-Digitalwandler (MCP3008)
- rote und grüne LED
- Anschluss für weitere eigene Sensoren
- Anschluss für Raspberry Pi (weitere Platine kann auf AirPi aufgesteckt werden)
- Größe: 85,60 mm × 56 mm × ca 18 mm
- Preis: ca 80,- USD (Bestellbar über Tindie.com)
AirPi v1.4 wird mit folgenden Umwelt-Sensoren geliefert:
- Luftdruck- & Temperatur-Sensor (BMP085)
- Feuchtigkeits- & Temperatur-Sensor (DHT22)
- Helligkeits-Sensor (LDR)
- Gas-Sensor (MICS-4514) fasst folgende Sensoren zusammen
- Stickstoffdioxid (NO2) – Sensor (MiCS-2710)
- Kohlenstoffmonoxid (CO) – Sensor (MiCS-5525)
Optional können bei Version 1.4 folgende Sensoren separat erworben und eingelötet werden:
- Luftqualitäts-Sensor für Methan, Iso-Butan, Ethanol, Wasserstoff (TGS2600) (ca 19,- EUR bei Conrad)
- GPS Emfänger (Adafruit Ultimate GPS) (ca 50,- EUR bei Amazon)
Leider ist es bei AirPi v1.4 kein UV-Sensor (UVI-01) mehr direkt vorgesehen, dieser wurde durch den wesentlich günstigeren LDR ersetzt. Außerdem scheint es derzeit keine aktualisierte Dokumentation zu v1.4 zu gebenl. Da Schema einer älteren Version ist hier zu funden.
Benötige Komponenten
- Raspberry Pi: bevorzugt „Model B“ (zB: Raspberry Pi B+ bei Amazon)
- USB WLAN Stick: „Edimax“ (Eximax-USB-Stick bei Amazon)
- Netzteil mit USB Adapter: Output 5V mit 2A (500 mA sind zu gering!)
- AirPi Kit: Bausatz v1.4 kann bei Tindi.com online um 90,- USD bestellt werden. (Stand: 05/2014)
- Display (optional): zB: RPi 2.8“ Display von wetterott electronics
AirPi Bausatz
- AirPi v1.4 Platine
- Widerstände: 82, 130, 330, 10k, 22k, 360k, 390k Ohm
- Kondensatoren: 0.1uF, 470 uF
- Sensoren: BMP085, DHT22, MICS-4514, MICS-2710, LDR
- LEDs (1 grün, 1 rot)
- Chip-Halterungen, Stecker 26 Pins, 8 Pins
- Chips: MCP6283, MCP3008
GPIO Anschlüsse von AirPi
Raspberry Pi | AirPi | Funktion | Anmerkungen |
3.3V | Pin 1 | ||
3.3V | Pin 2 | ||
GPIO 4 | DHT22 | Feuchtigkeitssensor/Temperatur | |
GPIO 11 | LED rot | (optional, deaktivierbar in settings.cfg) | |
GPIO 18 | Pin 4 | MCP3008 SPI/CLK | |
GPIO 22 | LED grün | (optional, deaktivierbar in settings.cfg) | |
GPIO 23 | Pin 6 | MCP3008 SPI/MOSI | |
GPIO 24 | Pin 5 | MCP3008 SPI/MISO | |
GPIO 25 | Pin 7 | MCP3008 SPI / CS | |
Ground | Pin 8 |
AirPi Software Installation
Treiber für die Sensoren
Installation von Git, python-dev, pip, python-pip, python-smbus:
sudo apt-get install git-core python-dev python-pip sudo apt-get install python-smbus libxml2-dev libxslt1-dev python-lxml
Installation von RPi.GPIO:
sudo pip install rpi.gpio requests
Installation von python-eeml:
cd ~/git git clone https://github.com/petervizi/python-eeml.git cd python-eeml sudo python setup.py install
Installation der i2c-Tools:
sudo apt-get install i2c-tools
Zur Verwendung von i2c muss der aktuelle Benutzer (zB: „pi“) in die Gruppe „i2c“ hinzugefügt werden:
sudo adduser pi i2c
Danach müssen die i2c Module zur Raspberry Pi Konfiguration hinzugefügt werden:
sudo nano /etc/modules
Die folgenden beiden Zeilen müssen in /etc/modules eingetragen bzw. nicht auskommentiert sein:
i2c-bcm2708 i2c-dev
Zuletzt muss i2c von der Raspberry Pi Blacklist Konfiguration entfernt werden:
sudo nano /etc/modprobe.d/raspi-blacklist.conf
Vor der Angabe „backlist i2c-bcm2708“ muss ein „#“ eingefügt werden:
#blacklist i2c-bcm2708
Abschließend muss der Raspberry Pi neu gestartet werden:
sudo reboot
Funktion ist dann testbar mit einem der folgendem Befehl für Raspberry Pi (Model A):
i2cdetect -y 0
Für Raspberry Pi (Model B). Der Output bei erfolgreicher Abfrage mit i2cdetect sollte etwa so aussehen (wichtig: „77“).
i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- UU -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- 77
AirPi Software
Tomas Hartley stellt das ursprüngliche Hauptprogramm für AirPi über folgendes Git-Repository zur Verfügung:
https://github.com/tomhartley/AirPi.gitDie AirPi-Tools lassen sich mit folgenden Befehlen installieren:
cd ~ git clone -b non-modular https://github.com/tomhartley/AirPi.git cd AirPi
Die Konfiguration der Sensoren erfolgt in sensors.cfg:
cd AirPi sudo nano sensors.cfg
Bei Verwendung des Raspberry Pi Version 2 (Model B) muss in sensors.cfg immer i2cbus = 1 und bei Model A immer i2cbus = 0 konfiguriert werden!
Die aktuellen Daten der AirPi Sensoren lassen sich danach mit folgendem Befehl abfragen:
sudo python airpi.py
Das Script liefert dann etwa folgenden Output:
Success: Loaded sensor plugin BMP085-temp Success: Loaded sensor plugin BMP085-pres Success: Loaded sensor plugin MCP3008 Success: Loaded sensor plugin DHT22 Success: Loaded sensor plugin LDR Success: Loaded sensor plugin MiCS-2710 Success: Loaded sensor plugin MiCS-5525 Success: Loaded sensor plugin Mic Success: Loaded output plugin Print Time: 2014-06-06 22:50:55.612431 Temperature: 37.2 C Pressure: 965.98 hPa Relative_Humidity: 25.8999996185 % Light_Level: 1047.5161987 Ohms Nitrogen_Dioxide: 12142.8571429 Ohms Carbon_Monoxide: 117659.574468 Ohms Volume: 861.290322581 mV
Von Julric gibt es mittlerweile eine weiterentwickelte Version der AirPi-Software die folgende Funktionen erweitert wurde:
- Cron-Job Aufruf (statt Daemon -> bessere Stabilität!)
- MySQL Unterstützung
- RRD Daten-Logging
- Adafruit Raspberry Pi LCD Displays (Nr: 1109, 1110 and 1115)
Es ist empfehlenswert, die neuere Version von Julric (https://git.cccmz.de/julric/airpi) zu verwenden!
Datenabfrage & Datenupload
Die AirPi-Tools bieten die Möglichkeit die Sensordaten zu Xively.com zu laden. Xively dienst als Platform, um Messwerte aus unterschiedlichen Quellen zusammenzuführen, historisch zu dokumentieren, graphisch darzustellen und sie an andere Schnittstellen/APIs weiterzuleiten.
Zuerst muss bei Xively.com ein neuer Account angelegt werden und unter Development ein neues Device hinzugefügt werden. Dazu auf „Device“ klicken, einen Namen und eine kurze Beschreibung mit zB einer Ortsangabe eingeben.
Die von Xively generiert daraufhin eine eindeutige „Feed-ID“ sowie einen „API-Key“, die in die outputs.cfg eingetragen werden müssen
nano outputs.cfg
FeedID = Y0CYXfCurlnXTBxevUJoB.............. APIKey = 1234......
Anschließend muss bei Xively.com über „Add Channel“ für jede Messgröße ein Kanal angelegt werden. Für den AirPi müssen die Channels folgende Namen (Symbol) haben, damit diese korrekt zugeordnet werden:
Temperature (°C)
Relative_Humidity (%)
Pressure (hPa)
Nitrogen_Dioxide (Ohm)
Carbon_Monoxide (Ohm)
Volume (mV)
Light_Level (Ohm)
Auch wenn die eingerichteten Channels sofort verfügbar sind, sollten diese über einen HTTP-Request direkt vom Raspberry Pi aus mit folgendem Aufruf aktiviert werden.
curl https://api.xively.com/v2/devices/ACTIVATION_CODE/activate
In der settings.cfg kann der Interval für den Upload der Daten zu Xively kofiguriert werden. Ein sinnvoller Wert dürfte 30 sec, 60 oder besser länger sein. Für Tests sind 10 sec gut geeignet.
uploadDelay = 30
Danach können mit folgendem Befehl die Daten von AirPi abgefragt und zu Xively übertragen werden. (airpi.py muss als root laufen!)
sudo python airpi.py
Der Output von airpi.py bei erfolgreichem Upload:
Success: Loaded sensor plugin BMP085-temp Success: Loaded sensor plugin BMP085-pres Success: Loaded sensor plugin MCP3008 Success: Loaded sensor plugin DHT22 Success: Loaded sensor plugin LDR Success: Loaded sensor plugin MiCS-2710 Success: Loaded sensor plugin MiCS-5525 Success: Loaded sensor plugin Mic Success: Loaded output plugin Print Success: Loaded output plugin Xively Time: 2014-06-06 22:26:12.037186 Temperature: 36.4 C Pressure: 965.89 hPa Relative_Humidity: 25.5 % Light_Level: 1083.42361863 Ohms Nitrogen_Dioxide: 11905.7815846 Ohms Carbon_Monoxide: 118123.667377 Ohms Volume: 729.032258065 mV Uploaded successfully
Bei jedem erfolgreichem Auslesen und Upload der Daten, leuchtet die grüne LED kurz auf. Bei einem Upload-Fehler blinkt die rote LED auf.
Eine praktische Möglichkeit diesen Prozess am Raspberry Pi ungestört laufen zu lassen ist, airpi.py in einer screen-Session laufen zu lassen. Dazu muss zuerst „screen“ installiert werden:
sudo apt-get install screen
Der AirPi-Prozess lässt sich danach mit folgenden Befehlen in einer screen-Session starten:
screen sudo python airpi.py
Mit Ctrl-d und Ctrl-d lässt sich die screen-Session schließen (nicht beenden) und mit folgendem Befehl wieder aufrufen:
screen -r screen -r <screen-name>
sudo apt-get install python-rrdtool
Aktuelle Messwerte
Die aktuellen und historischen Messwerte können bei Xively in der Feed-Übersicht angesehen werden:
https://xively.com/feeds/115042809
Die Daten können auch über eine Visualizer Webseite unter Angabe der APIKeys und eines od. mehrerer FeedIDs betrachtet werden: http://xively.github.io/channel-viz/
Mit Hilfe der Xively-API können aber auch PNG-Grafiken generiert und einfach in der eigenen Webseite eingebunden werden:
<img src="https://api.xively.com/v2/feeds/115042809/datastreams/Temperature.png?w=600&h=300&s=1&b=true&g=true&timezone=Vienna&c=ff0000&t=Temperatur%20%28%C2%B0C%29" />
Über die Parameter w (width), h (height), c (color), t (title) und l (legend) läßt sich das Aussehen der Diagramme beeinflussen.
Upload der Daten zu WeatherUnderground
Die aktuellen Wetterdaten lassen sich über eine sehr einfache HTTP-Schnittstelle zu WeatherUnderground.com weiterleiten – einem Community-basierenden Netzwerk von weltweiten Wetterstationen. Über Web-, iPhone- oder iPad-App lässt sich das aktuelle Wetter sowie eine Vorschau für die kommenden Tage abrufen.
Die Parameter müssen dabei URI-Kodiert werden und in die geforderte Einheit umgerechnet werden:
http://weatherstation.wunderground.com/weatherstation/updateweatherstation.php ?action=updateraw &ID=DEMOID (Registrierung bei weatherunderground.com) &PASSWORD=XXX (Registrierung bei weatherunderground.com) &dateutc=TS (Zeitpunkt in UTC, YYYY-MM-DD HH:MM:SS) &softwaretype=AirPi &tempf=TF (in °F, TF = TC * 1.8 + 32) &humidity=F (in %) &baromin=PIN (in Inch Hg, PIN = PhPa * 0.0295299830714) &solarradiation=L (in W/m^2, LW = LLX / (0.7 * 0.25 * 420)) &AqCO=CO (in ppm, siehe: Auswertung der Gas-Sensoren) &AqNO2=NO2 (in ppm, siehe: Auswertung der Gas-Sensoren)
Beispiel:
curl -c http://rtupdate.wunderground.com/weatherstation/updateweatherstation.php?ID=DEMOID&PASSWORD=XXXXXX&action=updateraw&dateutc=2014-12-01+10%3A32%3A35&softwaretype=AirPi&tempf=70&humidity=40&baromin=29.1&solarradiation=10&AqCO=0.123&AqNO2=0.23
Protokoll-Beschreibung: http://wiki.wunderground.com/index.php/PWS_-_Upload_Protocol
Weiterführende Artikel:
- Auswertung der AirPi Gas-Sensoren
- AirPi Wetterdaten Salzburg (über Xively als PNG)
- AirPi Wetterwerte Salzburg Stadt (mit Hilfe von Highcharts)
Quellenangaben
- Alyssa Dayan, Tom Hartley: AirPi Projekt Homepage, http://airpi.es/
- Tom Hartley: AirPi Kit, https://www.tindie.com/products/tmhrtly/airpi-kit/
- CCCMZ, https://www.cccmz.de/projekt-airpi/
- Julric: AirPi Git Repository, https://git.cccmz.de/julric/airpi
- Xively Homepage, https://xively.com
- Wikipedia: Raspberry Pi, http://en.wikipedia.org/wiki/Raspberry_pi
- Alyssa Dayan, Tom Hartley: AirPi Git Repository, https://github.com/tomhartley/AirPi
- SK Pang Electronics Ltd: I2C Installation for Raspberry Pi, http://www.skpang.co.uk/blog/archives/575
- Adafruit: Raspberry Pi Pyhton Code Git Repository, https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code
- Peter Vizi: Python EEML, https://github.com/petervizi/python-eeml
- Upload Sensor Data to Xively, http://www.tinkerforge.com/de/doc/Kits/ServerRoomMonitoring/UploadSensorDataToXively.html
- AirPi Sensors, http://pi.gate.ac.uk/posts/2014/02/25/airpisensors/