Robert: Die Realtime Dashboard Funktion in Power BI kann dazu verwendet werden, um Sensordaten in Echtzeit zu visualisieren und damit ein Monitoring in einem Internet-of-Things (IoT) Szenario zu implementieren. Diese Blogbeitragsserie schließt thematisch an diesen Blogpost aus dem Jahr 2015 an, in dem aus einem Temperatur-Datenlogger manuell ein CSV-File heruntergeladen werden mußte und daher nur historische Auswertungen möglich waren. Toni Kerschbaummayr zeigt in diesem ersten Blogpost der Beitragsserie, wie die Sensor-Hardware konfiguriert und verbunden wird.
Anton: in diesem Blogbeitrag zeige ich in 4 Schritten, wie mit einem Raspberry Pi und einem BME280 Sensor Temperatur- und Feuchtigkeitsmesswerte gesammelt und wie diese mit einem Programm in Echtzeit an den Cloud Service Azure IoT Hub gesendet werden. Dazu zeigt eine rot leuchtende LED jede erfolgreiche Datenübertragung an, sodaß die Funktionstüchtigkeit des Systems auch am Gerät leicht überprüft werden kann.
Schritt 1: Sensor mit dem Raspberry Pi verbinden ("Hardware vorbereiten")
Folgende Komponenten werden benötigt:
Verbindungskabel (Neuftech 40x 20cm „female female“ „male female“ „male male“ jumper wire kabel Steckbrücken für Arduino Raspberry pi, 3er Set)
Nun muss der BME280 Chip und die LED mit dem Raspberry Pi anhand der folgenden Tabelle und anschließenden Abbildung verbunden werden. Die Kabel wurden mit den Kontakten des BME280 Chips verlötet.
Start (Sensor & LED) | Ende (Raspberry Pi Pin) | Kabelfarbe |
---|---|---|
VDD (Pin 5G) | 3.3V PWR (Pin 1) | weiß |
GND (Pin 7G) | GND (Pin 6) | braun |
SDI (Pin 10G) | I2C1 SDA (Pin 3) | rot |
SCK (Pin 8G) | I2C1 SCL (Pin 5) | orange |
LED VDD (Pin 18F) | GPIO 24 (Pin 18) | weiß |
LED GND (Pin 17F) | GND (Pin 20) | schwarz |

Nachdem alle Komponenten miteinander verbunden wurden, sollten die Hardware in etwa folgenden Aufbau haben:

Schritt 2: Raspberry Pi in Betrieb nehmen
2.1 Installation des Betriebssystems Raspbian auf der SD-Karte
1. Das Betriebssystem Raspbian herunterladen:
Download Raspbian Stretch (hier die .zip Datei herunterladen).
WICHTIG: Es muss unbedingt die Version raspbian-2017-07-5 verwendet werden, da in den neuere Versionen von Raspian zu Problemen bei der Verwendung von Wiring-Pi Node kommt.
2. Entpacken der .zip Datei auf dem Computer.
3. Um das Betriebssystem Raspbian auf der SD-Karte zu installieren, wird folgende Software benötigt:
Etcher SD card burner utility herunterladen und installieren
4. Etcher starten und das entpackte Image aus Schritt 2 wählen.
5. Klick auf "Flash" um den Installationsvorgang zu starten:

6. Nach dem erfolgreichen Flash-Vorgang kann die SD-Karte aus dem Computer entfernt und in den Raspberry Pi eingesetzt werden.
2.2 Konfiguration des Raspberry Pi
1. Verbinden Sie Ihren Raspberry Pi mit einer Tastatur (via USB), einer Maus (via USB) und einem Bildschirm (via HDMI).
2. Starten Sie den Raspberry Pi indem Sie ihn an eine micro-USB Stromquelle anschließen (hier kann ein altes Smartphone Ladegerät verwendet werden).
3. Loggen Sie sich mit dem Benutzernamen pi
und dem Passwort raspberry
ein.
4. Klicken Sie links oben auf das Raspberry Symbol und wählen Sie Preferences > Raspberry Pi Configuration

5. Setzen Sie auf dem Tab Interfaces die Einstellungen I2C und SSH auf Enable und klicken Sie OK.

6. Klicken Sie rechts oben am Desktop auf das Netzwerk- Symbol um den Raspberry Pi mit dem WLAN zu verbinden. Alternativ könnte auch per Netzwerkkabel ein LAN angeschlossen werden.
Schritt 3: Sensorsoftware in Betrieb nehmen
3.1 Installation der Sensorsoftware
1. Öffnen Sie die Shell auf dem Raspberry Pi:

2. Überprüfen Sie Ihre Node.js Version indem Sie folgendes Kommando in der Shell tippen:node -v
Falls eine Version kleiner 10.x verwendet wird oder Node.js gar nicht installiert ist, dann führen Sie folgende Befehle zum Installieren aus:url -sL https://deb.nodesource.com/setup_10.x | sudo -E bash sudo apt-get -y install nodejs
3. Klonen des Sensorensoftware Beispielprojekts von github (lädt den Quellcode von github.com und speichert ihn auf dem Raspberry Pi) :git clone https://github.com/Azure-Samples/iot-hub-node-raspberrypi-client-app
4. Installieren der Pakete die nötig sind um den Quellcode später laufen zu lassen (Die Installation beinhaltet die Pakete Azure IoT device SDK, BME280 Sensor library, und Wiring Pi library).cd iot-hub-node-raspberrypi-client-app
sudo npm install
3.2 Konfiguration der Sensorsoftware
1. Öffnen Sie die Konfigurations- Datei mit folgendem Kommando:nano config.json

2. interval: definiert in welchen Abständen (Millisekunden) Sensorenwerte erfasst und gesendet werden sollen. Der Standardwert von 2.000 Millisekunden (= 2 Sekunden) muss auf 12.000 Millisekunden (= 12 Sekunden) erhöht werden, da der Gratisplan des IoT Hubs maximal 8.000 Werte pro Tag verarbeiten kann.
Schritt 4: Intervallbasierte Datensammlung starten
Im Teil 2 dieser Blogserie wird gezeigt, wie der Azure IoT Hub konfiguriert wird und wie der Primary Connection String zur Authentifizierung der Hardware am Cloud Service erstellt wird:

Die Sensorsoftware wird mit nachfolgendem Befehl gestartet, als Parameter wird der Primary Connection String des Azure IoT Device (siehe oben) eingesetzt:
sudo node index.js '<IHRE AZURE IoT GERÄT VERBINDUNGSZEICHENFOLGE>'
Wenn alles geklappt hat und das Programm gestartet hat, werden im definierten Zeitintervall die Sensordaten an den IoT Hub gesendet. Die rote LED auf der Steckplatte leuchtet bei jeder erfolgreichen Datenübermittlung auf und zeigt somit auch auf Hardwareebene, ob das System funktioniert:


Im IoT-Hub kann beispielsweise die Total Number of messages used im Bereich Metrics ausgewertet werden und so die Aktivität der Sensordatenübermittlung beobachtet werden:

Kritische Evaluierung
Mit dem Raspberry Pi steht ein Mini-Computer um knappe EUR 40 zur Verfügung, der hervorragend zur sensorbasierten Massendatensammlung in einer IoT-Infrastruktur geeignet ist. Dennoch sind einige kritische Punkte anzumerken:
- Das Sensorprogramm ist fehleranfällig
Sobald ein x-beliebiger Fehler am Raspberry Pi auftritt, beendet sich das Sensorprogramm. Ich habe versucht, mit try/catch Blöcken alle Fehler abzufangen, doch ist das nicht gelungen (bzw. bedürfte es hier noch weiterer intensiverer Forschungsarbeit). Deshalb habe ich auf dem Raspberry Pi einen sogenannten cron-Task eingerichtet, der den Raspberry Pi einmal pro Stunde neu bootet. Damit ist sichergestellt, daß ein Ausfall maximal 1 Stunde dauert.
Grundsätzliche Anleitung zum Anlegen eines cron- Tasks findet man hier:
https://www.raspberrypi.org/documentation/linux/usage/cron.md
Eintrag zum stündlichen reboot (0 steht für Minute 0, also jedes mal wenn die in der Uhrzeit die Minute = 0 ist, dann wird der reboot ausgeführt, bspw. 09:00): 0 * * * * /sbin/shutdown -r now - Der Raspberry Pi ist empfindlich bezüglich der Stromversorgung
Der USB-Stecker am anderen Ende des micro-USB darf nicht an einen Laptop angeschlossen werden, sondern muss mit einem Steckdosenadapter mit Strom versorgt werden, sonst stimmt die Betriebsspannung nicht und der Raspberry Pi startet nicht.
Aber es funktioniert auch nicht jeder (alte Handy-)Adapter, wir hatten einen Effekt, daß mit einem Steckdosenadapter der Raspberry Pi und auch die Sensordatenübertragung funktioniert hat, aber kein HDMI-Signal an den Monitor gesendet werden konnte.
Weiters hatten wir Probleme bei der Stromversorgung des Sensors, diese dürfte unterbrochen werden, wenn der micro-USB nicht richtig sitzt (bzw. abgenützt ist) -> der Raspberry Pi funktioniert ganz normal, aber der Sensor bekommt keinen Strom mehr. - Die Verkabelung des Raspberry Pi mit der Steckerplatte und dem Sensor ist fragil.
Das ist auch auf den Abbildungen hier im Blogbeitrag zu sehen, im Rahmen dieses Experiments ist das kein Problem, bei Wackelkontakten liefert das Sensorprogramm einen Hardwarefehler und muß neu gestartet werden. Für den Praxiseinsatz muss hier also noch in die Robustheit der Hardware investiert werden.
Wie bei jeder neuen Materie muss hier also eine Lernkurve aufgebaut werden, um die Eigenheiten des Systems und die häufigsten Fehlerursachen handhaben zu können.
Quellen
https://www.hackster.io/xin-shi/data-visualization-in-power-bi-with-bme280-raspberry-pi-0fce0c
https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-raspberry-pi-kit-node-get-started
Robert: in den nächsten beiden Teilen dieser Blogserie werden wir sehen, wie die gesammelten Sensordaten mit Microsoft Azure gestreamt und in Power BI in Echtzeit ausgewertet werden können.