AirPi Wetterstation mit Raspberry Pi

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/

airpi_14

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_20

  • 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

airpi_18 airpi_15 airpi_10

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.git

Die 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)

xively_edit_channel

xively_temperature_graph

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

xively_screenshot

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

WeatherUnderground am iPad
WeatherUnderground am iPad
WeatherUnderground am iPhone
WeatherUnderground am iPhone

Weather Underground PWS ISALZBUR35

Weiterführende Artikel:

Quellenangaben