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. Toni Kerschbaummayr hat im Teil 1 dieser Beitragsserie gezeigt, wie die Sensor-Hardware Raspberry Pi mit BME 280 Sensor konfiguriert und mit dem Azure IoT Hub verbunden wird.
In diesem zweiten Beitrag zeigen wir, wie die beiden Services Azure IoT Hub und Azure Stream Analytics konfiguriert werden können, um die Sensordaten mit geringer Latenz in einem Power BI Realtime Dashboard visualisieren zu können. Die wesentliche Forschungsarbeit diesbezüglich wurde auch hier von Toni Kerschbaummayr bewerkstelligt.
Architekturübersicht
Azure IoT Hub ist ein Cloud Service in der Windows Azure Plattform, der dazu konzipiert ist, Daten von Millionen Sensoren aufzunehmen und eine bidirektionale Kommunikation zu diesen Devices aufzubauen.
Azure Stream Analytics ist ein Cloud Service in der Windows Azure Plattform für Analysen in Echtzeit und die Verarbeitung komplexer Ereignisse, der entwickelt wurde, um große Mengen schneller Streamingdaten aus mehreren Quellen gleichzeitig zu analysieren und zu verarbeiten. In Informationen aus einer Reihe von Eingabequellen wie Geräten, Sensoren, Clickstreams, Feeds sozialer Medien und Anwendungen können Muster und Beziehungen identifiziert werden. Diese Muster können verwendet werden, Aktionen und Workflows wie das Erstellen von Warnungen, Senden von Informationen per Feed an ein Berichterstellungstool oder Speichern transformierter Informationen zur späteren Verwendung auszulösen.
In der Versuchsanordnung dieser Blogbeitragsserie werden folgende Komponenten genutzt, um eine IoT Architektur für Sensordaten aufzubauen:
Aus Power BI Perspektive kann dies vereinfacht so dargestellt werden. Es kann entweder ein Streaming Dataset mit geringer Latenz (und bescheidenen Visualisierungsmöglichkeiten) erstellt werden ...
... oder ein Push Dataset mit etwas höherer Latenz und dafür umfangreicheren Visualisierungsmöglichkeiten:
Schritt 1: IoT Hub in Windows Azure anlegen
Azure IoT Hub ist ein Cloud Service in der Windows Azure Plattform, der dazu konzipiert ist, Daten von Millionen Sensoren aufzunehmen und eine bidirektionale Kommunikation zu diesen Devices aufzubauen.
Zum Deployment sind folgende Schritte durchzuführen.
1.1 Service anlegen
Login bzw. Registrierung im Azure Portal, Klick auf Create a ressource (links oben) und Suche nach IoT Hub -> Anlegen mit Create:
Vergeben eines Namens für den IoT Hub (hier: linearis-sensors-hub), Auswahl der Subscription, der Resource Groupe und der Region:
Weiter und Tarif wählen: pro Subscription steht ein "F1: Free-tier" zur Verfügung, dieser kostenlose Service ist auf maximal 8.000 Events assspro Tag begrenzt (5 Werte pro Minute = 7200 pro Tag = alle 12 Sekunden).
Jetzt auf Review + Create klicken und Abwarten des Erstellungsvorgangs.
1.2 Device hinzufügen (= Raspberry Pi)
Jetzt muss noch der Raspberry Pi als IoT- Gerät innerhalb des neu erstellten IoT- Hubs angelegt werden, damit dieser als berechtigtes Device erkannt wird:
Vergeben einer Device ID (hier: RaspberryPI01) und auf Speichern klicken:
In den Gerätedetails ist der Primary Connection String zu finden, dieser wird - wie in Teil 1 dieser Blogserie gezeigt - auf den Raspberry Pi übertragen und zur Authentifizierung der Hardware als Parameter im Sensorprogramm eingesetzt.
1.3 Monitoring
Im Bereich Metrics können recht übersichtliche Monitorings der vom Sensor gelieferten Daten erstellt werden. Hinweis: hier wurde der Sendeintervall von ursprünglich 12 Sekunden (= 5 Werte / min) auf 2 Sekunden (= 30 Werte / min) verkürzt.
Schritt 2: Stream Analytics Job in Azure anlegen
Azure Stream Analytics ist ein Cloud Service in der Windows Azure Plattform für Analysen in Echtzeit und die Verarbeitung komplexer Ereignisse, der entwickelt wurde, um große Mengen schneller Streamingdaten aus mehreren Quellen gleichzeitig zu analysieren und zu verarbeiten. In Informationen aus einer Reihe von Eingabequellen wie Geräten, Sensoren, Clickstreams, Feeds sozialer Medien und Anwendungen können Muster und Beziehungen identifiziert werden. Diese Muster können verwendet werden, Aktionen und Workflows wie das Erstellen von Warnungen, Senden von Informationen per Feed an ein Berichterstellungstool oder Speichern transformierter Informationen zur späteren Verwendung auszulösen. Hinweis: Azure Stream Analytics ist der Nachfolger der früheren SQL Server Komponente Stream Insights und kann sowohl für cloud- als auch server-basierte Szenarien genutzt werden.
Zum Deployment sind folgende Schritte durchzuführen.
2.1 Job anlegen
Login bzw. Registrierung im Azure Portal, Klick auf Create a ressource (links oben) und Suche nach Stream Analytics -> Anlegen mit Create:
Vergeben eines Namens für den Stream Analytics Job (hier: linearis-sensors-stream) und Auswahl der Subscription, der Ressource Group und der Region. Die Streaming Units werden vom Standardwert 3 auf 1 reduziert, um die Kosten zu minimieren (ein Free-tier wie beim IoT Hub ist hier leider nicht verfügbar):
2.2 Input definieren: IoT Hub
Nach der Anlage des Stream Analytics Jobs wird dieser aufgerufen und im Bereich Inputs die erste Datenquelle hinzugefügt:
Über Add stream input wird die Quelle IoT Hub selektiert ...
... und im nächsten Schritt der zuvor angelegte linearis-sensors-hub ausgewählt und ein Input Alias (hier: InputFromHub) vergeben (die anderen vorgeschlagenen Parameter können belassen werden):
Nach dem Save wird die Input Quelle angelegt und getestet:
2.3 Output definieren: Power BI Dataset
Nun wird über den Bereich Output die Ausgabe der Streamingdaten mit dem Button Add nach Power BI definiert:
Die Anmeldung am Power BI Account erfolgt über den Button Authorize, diese ist Voraussetzung für die Auswahl eines App-Workspaces (ansonsten wird das Dataset im My Workspace des Users angelegt):
Jetzt erfolgt die Selektion des App-Workspaces (hier: Linearis Public), der Name des Power BI Dataset (hier: Realtime Raspberry Pi) und der Name der SQL Tabelle für die Push-Option des Power BI Datasets (hier: Sensor Data):
Danach erfolgt die Anlage des Outputs und der Test der Connection:
2.4 Query definieren
Die Query Language von Azure Stream Analytics ist stark an SQL angelehnt und mit speziellen Funktionen bspw. für das Windowing (Tumbling Window, Sliding Window, Hopping Window, Session Window, etc.) angereichert:
Die Query ist in unserem Anwendungsfall jedoch sehr simpel, wir brauchen lediglich in den vorgeschlagenen Query Syntax die zuvor vergebenen Aliase für Input und Output einsetzen:
2.5 Stream Analytics Job starten
Der Stream Analytics Job ist jetzt fertig konfiguriert und braucht nur noch gestartet zu werden:
Im Bereich Metrics können wiederum sehr übersichtliche Monitorings erstellt werden. Hinweis: die Addition von Input Events und Output Events im Area Chart ist nicht unbedingt sinnvoll aber praktisch.
Schritt 3: Erzeugen des Power BI Datasets
Hier der Tipp Text aus der Konfiguration des zu erzeugenden Power BI Datasets:
Das Power BI Dataset wird also physisch erst angelegt, sobald das erste Outputsignal an Power BI gesendet wird:
Im dritten Teil dieser Beitragsserie werden wir genau hier in Power BI fortsetzen.
Evaluierung
Azure IoT Hub und Azure Stream Analytics stellen den von Microsoft empfohlenen Weg zum Aufbau der Infrastruktur eines Realtime Dashboardings bzw. eines Realtime Daten Processings mit zahlreichen ("Millionen") IoT Devices dar. In einem solchen Szenario erscheinen die Kosten gering und die Azure Plattform erspart die vermutlich aufwendige Entwicklung einer eigenen IoT- und Streaming-Plattform. 1 Streaming Unit kostet übrigens etwa EUR 66 pro Monat (9,3 Cent pro Stunde), die Kosten für den IoT Hub haben wir nicht recherchiert (sondern den kostenlose Plan mit 1 Device mit maximal 8000 Events pro Tag, also nur alle 12 Sekunden, gewählt).
Beim Aufbau unseres Testszenarios hatten wir teilweise Probleme mit der Kommunikation zwischen dem IoT Hub und dem Stream Analytics Job, möglicherweise ausgelöst durch Umhängen der Services in eine andere Resource Group. Durch Löschen und Neuanlage wurde das Thema jedoch gelöst und läuft seither zuverlässig.
In unserem Anwendungsfall mit nur 1 Device ist diese Infrastruktur natürlich ein Overkill und verglichen mit dem Raspberry Pi sehr teuer. In der Praxis würde dieses Szenario mit einer "Power BI Realtime API" Lösung sicherlich günstiger und einfacher umgesetzt werden können.
Quellennachweis
https://azure.microsoft.com/de-de/services/iot-hub/
https://docs.microsoft.com/de-de/azure/iot-hub/
https://azure.microsoft.com/de-de/services/stream-analytics/
https://docs.microsoft.com/de-de/azure/stream-analytics/stream-analytics-introduction
https://docs.microsoft.com/de-de/stream-analytics-query/windowing-azure-stream-analytics