Internet of Things – Was is das?
Die Vision ist klar: Städte sollen vernetzt und intelligent werden. Das passiert nicht von Allein und nicht von heut auf morgen. Irgendwer muss damit anfangen. Nicht nur die großen Player wie IBM und Telekom können Städte vernetzen und ‘intelligent’ machen, auch für Einzelne ist es möglich.
Firmen wie Tinkerforge haben die Mikroelektronik so weit vereinfacht, dass man nicht mehr selbst Kondensatoren und Widerstände auswählen und zusammen löten muss, sondern fertige, funktionierende und Plug-&-Play fähige Anwendungen erstellen kann.
In diesem Beitrag möchte ich zeigen, wie man die Tinkerforge Wetterstation und einen RaspberryPi (in diesem Fall den Model B+) und einen Huawei UMTS Stick zusammen arbeiten lässt und damit auch fernab vom heimischen WLAN, eine IoT (Internet of Things) Anwendung betreiben kann.
Beispielhaft soll die Wetterstation alle 10min die aktuellen Sensor-Daten an ihren Twitter Account @SchrebergarDDen schicken. Die Wetterstation steht dabei im heimischen – wer hätte es gedacht- Schrebergarten. :)
Tinkerforge Wetterstation
Die Tinkerforge Wetterstation ist eine Zusammenstellung einiger Tinkerforge Sensoren + Montageset (Schrauben etc.) + Gehäuse. Die Sensoren ermöglichen das Messen von
- Luftdruck
- Temperatur
- Lichtintensität
- relative Feuchtigkeit
Die Daten werden an den Tinkerforge Master Brick geschickt. Dieser kann wiederum mit einem Rechner (z.B. RaspberryPi) verbunden werden.
Tinkerforge Wetterstation mit RaspberryPi verbinden
Die Verbindung erfolgt über USB. Damit der RaspberryPi nach der frischen Installation von Linux mit den Tinkerforge Sensoren kommunizieren kann, muss noch etwas installiert werden. Der RaspberryPi sollte zur Einrichtung fertig konfiguriert und mit dem heimischen WLAN verbunden sein. Als erstes muss dem RaspberryPi ein ‘pm-utils’ Paket zur Verfügung gestellt werden. Dazu im Terminal auf dem RaspberryPi
sudo apt-get install pm-utils
eintippen. Sollte eine Meldung kommen, dass Abhängigkeiten zu ‘powermgmt-base’ oder anderen Paketen notwendig sind, einfach
sudo apt-get -f install
hinterher schieben, der Pi holt sich dann alles.
Nun muss der BrickDeamon von Tinkerforge geholt werden, welcher über alle I/O zu den Bricks verfügt. Dieser ist im Github Account von Tinkerforge zu finden und kann mit
wget http://download.tinkerforge.com/tools/brickd/linux/brickd_linux_latest_armhf.deb sudo dpkg -i brickd_linux_latest_armhf.deb
herunter geladen und installiert werden. Möchten wir mit Python auf die Sensoren zugreifen, benötigen wir noch die Bindings für Python. Diese können einfach mit
sudo pip install tinkerforge
installiert werden. Sollte der Python Paket Manager ‘pip’ noch nicht vorhanden sein: get_pip
Nun ist der RaspberryPi prinzipiell fertig, mit allen Sensoren zu kommunizieren. Dazu am besten einfach das vorbereitete Standardprogramm von Tinkerforge laden und ausführen.
wget https://raw.github.com/Tinkerforge/weather-station/master/write_to_lcd/python/weather_station.py
Anschließend kann man mit
python weather_station.py
die Wetterstation starten und sehen, wie die Sensoren jede Sekunde eingelesen und auf dem LCD Display dargestellt werden.
Wir haben nun alle physikalischen Werte eingelesen und auch auf dem LCD Display dargestellt. Prima!
Wenn wir die Wetterstation auch außerhalb unseres WLAN’s online bekommen wollen, benötigen wir einen UMTS Stick mit Datenkarte. Empfehlung: M2M Mobile und Huawei UMTS Stick.
Huawei UMTS Stick für RaspberryPi einrichten
Der RaspberryPi soll auch außerhalb vom heimischen WLAN mit dem Internet kommunizieren. Daher ist eine mobile Datenverbindung notwendig. Der günstige Huawei UMTS Stick ist allerdings noch etwas umzukonfigurieren, damit er vom RaspberryPi korrekt erkannt wird.
Huawei UMTS Modem auch als Modem konfigurieren
Der Huawei UMTS Stick ist hoffentlich funktionsfähig und wird vom RaspberryPi Model B+ erkannt. Testen kann man das, indem man ‘lsusb’ im Terminal eintippt.
pi@rpi ~ $ lsusb Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Bus 001 Device 004: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter Bus 001 Device 006: ID 12d1:1f01 Huawei Technologies Co., Ltd. Bus 001 Device 005: ID 16d0:063d GrauTec
Der UMTS Stick von Huawei ist so konfiguriert, dass er unter Windows und Mac ein Plug&Play möglich ist incl. automatischer Konfiguration usw. Das hat den Nachteil, dass es auf dem RaspberryPi als CD-ROM Laufwerk erkannt wird. Wir müssen also dem Linux mitteilen, dass es ein UMTS Modem ist, statt eines CD-ROM Laufwerk. Dazu ist usb-modeswitch notwendig.
sudo apt-get install usb-modeswitch
Nun in der /etc/usb_modeswitch.conf die DefaultProduct ID ändern:
Die /etc/usb_modeswitch.conf sollte dann so aussehen:
# Huawei UMTS Stick von CD-ROM nach Netzwerkkarte switchen: DefaultVendor = 0x12d1 DefaultProduct = 0x1f01 << hier muss eure ID rein! TargetVendor = 0x12d1 TargetProduct = 0x1506 MessageEndPoint = "0x01" MessageContent = "55534243000000000000000000000011060000000000000000000000000000"
Danach steht der Huawei UMTS Stick als Netzwerkkarte zur Verfügung:
pi@rpi ~ $ lsusb Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Bus 001 Device 004: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter Bus 001 Device 007: ID 12d1:14dc Huawei Technologies Co., Ltd. Bus 001 Device 005: ID 16d0:063d GrauTec
Es steht nun ein zweites Ethernet Device zur Verfügung, welches vom RaspberryPi genutzt werden kann, um sich mit dem Internet zu verbinden.
pi@rpi ~ $ ifconfig eth0 Link encap:Ethernet Hardware Adresse b8:27:eb:6b:eb:43 UP BROADCAST MULTICAST MTU:1500 Metrik:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 Kollisionen:0 Sendewarteschlangenlänge:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) eth1 Link encap:Ethernet Hardware Adresse 00:1e:10:1f:00:00 UP BROADCAST RUNNING MULTICAST MTU:1500 Metrik:1 RX packets:200 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 Kollisionen:0 Sendewarteschlangenlänge:1000 RX bytes:92685 (90.5 KiB) TX bytes:0 (0.0 B)
Ist man bisher via SSH im heimischen WLAN mit dem RaspberryPi verbunden (der Pi bekommt seine IP also vom eth0 Device), sollte man mit folgendem Schritt noch warten, bis wirklich alles konfiguriert ist und man tatsächlich unabhängig vom eigenen WLAN in’s Internet möchte:
sudo nano /etc/network/interfaces
Dort
iface eth1 inet dhcp
hinzufügen.
Tinkerforge Wetterstation mit Twitter verbinden
Um als Internet of Things Gerät bei Twitter etwas posten zu dürfen, muss man sich vorher einen Developer Account besorgen und seine Anwendung eintragen.
Wichtig ist, der App “Read+Write” Rechte zu geben und die 4 Codes zu bekommen. Wie im Video zu sehen ist, dauert das ein paar Sekunden. Diese 4 Codes (für OAuth) müssen nun von Tweepy, dem Twitter Client für Python, genutzt werden, um sich zu authentifizieren.
Tinkerforge Wetterstation um Twitter Funktionalität erweitern
Hier kann man einfach das um die Twitter Funktionalität erweiterte Tinkerforge Skript nutzen:
git clone https://gist.github.com/2c96d807242ab7338ba3.git weather_station
Nun hat man die weather_station_tweeter.py auf dem RaspberryPi und kann diese editieren. Nicht vergessen die Authentication Codes für eure Twitter App in der init_twitter() Funktion einzutragen!
Die weather_station_tweeter.py muss noch mit
chmod +x weather_station_tweeter.py
ausführbar gemacht werden, sodass diese vom System gestartet werden kann.
Nun gibt es viele Möglichkeiten das Python Skript automatisch starten zu lassen. Eine einfache ist das Starten via Cronjob. Dazu folgendes ausführen:
sudo crontab -e
Darin die Pfadumgebung für den Cronjob eintragen
SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
und schließlich den Befehl, der das weather_station Python Script jedes mal nach dem Booten startet:
# m h dom mon dow command @reboot su -c 'python /home/pi/weather_station/weather_station_tweeter.py 2>&1 >> /home/pi/weather_station.log' -s /bin/sh pi
Dieser Eintrag beauftragt den Pi, jedes mal nach dem Neustart das Python Skript als User ‘pi’ auszuführen und die Log-Ausgaben in eine weather_station.log Datei zu schreiben.
Fertig
Die ganzen Schritte wirken nur niedergeschrieben so kompliziert. Wenn man etwas geübt mit Linux und den ganzen Befehlen ist, dann ist der größte Teil der Dinge, die hier aufgeschrieben sind, ohnehin bereits eingerichtet oder logisch und nicht extra einer Erwähnung wert.
Das Resultat ist eine alle 10min twitternde Wetterstation:
Fazit
Zufällig passt ein RaspberryPi und ein Huawei UMTS Stick genau in die Tinkerforge Wetterstation und somit kann diese auch ohne das heimische WLAN als Internet of Things Anwendung genutzt werden.
Die Nutzung der Sensoren ist – wie von Tinkerforge gewöhnt – einfach und in beliebiger Programmiersprache möglich. Hier wurde eine Beispielimplementierung in Python gezeigt, welche maßgeblich auf dem Skript von Tinkerforge beruht, nur um die Twitter Funktionalität erweitert wurde.
Prinzipiell kann natürlich jede Web-Anwendung mit den Daten gespeist werden, nicht nur Twitter.
Kritik: Die gemessene Temperatur ist immer ein paar Grad (2-10°C) zu warm, da es genau genommen die Temperatur des Barometer-Sensor-Chips ist, welcher prinzipbedingt etwas wärmer als die umgebende Luft ist. Die gemessene Helligkeit ist im schwarzen Gehäuse mit Sicherheit auch nicht so ganz repräsentativ. Das sollte man bedenken.
Alles in allem ziemlich gut, um sich dem Thema zu nähern.
Und nun?
Da der RasbperryPi nun ein Teil des Internets ist, kann er sich beispielsweise
- Daten einer Wetter API holen und den Gardena Bewässerungscomputer anweisen die Erde nicht zu bewässern, wenn es ohnehin in den nächsten Stunden regnen soll
- auf Anweisung Fotos machen und twittern
- Weiterhin könnte man Funksteckdosen oder andere Aktoren vor Ort via Twitter ansteuern
Den Anwendungsmöglichkeiten ist keine Grenze gesetzt. Außer durch den Datentarif der GSM Karte. :(
4 Comments
Klasse ! Ich versuche mich schon die ganze Zeit erfolglos mit dem Thema – Deine Anleitung hier war genau das was ich gesucht und gebraucht habe.
Eine winzige Kritik sei mir hier aber gegönnt: die zu warm gemessene Temperatur liegt sicher nicht am Baro-Modul, sondern eher an der Abwärme der Raspbeere – aber auch hier gibt’s Abhilfe: den Sensor extern platzieren ;-) LG, Manü (bitte weitermachen!!)
Danke!
Thema “Tinkerforge Wetterstation mit RaspberryPi verbinden”
(python-script zurAnzeige der Daten amLCD-Display)
Das Script funktioniert nach Anmeldung am Raspbi.
Ich möchte das Script beimHochlaufen automatisch starten.
Frage:
Started jemand das Script in der /etc/rc.init ?
Alle Anleitungen dazu im Netz funktionieren bei mir nicht.
Wenn Du ein Script in /etc/rc.init ablegst, mußt Du noch auswählen, welcher Run-Level es starten soll.
Dazu legt man einen symbolischen Link in das Verzeichnis des betreffenden Run-Levels.
Dort beginnen die Scripte mit einem Buchstaben für Start bzw. Stop und einer Nummer für die Reihenfolge.
Das sollte Dir helfen.