Posts Tagged‘Linux’

Tinkerforge Wetterstation mit RaspberryPi B+ und Huawei UMTS Stick als IoT Tweeter

by Paul Balzer on 18. August 2014

4 Comments

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.

Tinkerforge-Wetterstation-RaspberryPi-UMTS-Stick-Huawei

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.

weather_station

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:

usb_modeswitch

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.

Tinkerforge-Wetterstation-RaspberryPi-02

RasbperryPi Model B+ und Huawei UMTS Stick in der Tinkerforge Wetterstation: Passt vom Bauraum her, lediglich die Bohrungen des RasPi sind etwas zu klein für die Schrauben von Tinkerforge, weshalb das auch ohne Muttern hält.

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

Den Anwendungsmöglichkeiten ist keine Grenze gesetzt. Außer durch den Datentarif der GSM Karte. :(