Überwachung von IoT-Geräten mit Heartbeats und MQTT-Gateways
Bei der Arbeit mit IoT (Internet of Things) Geräten ist eines der Hauptprobleme, den Zustand aller Installationen im Auge zu behalten. In den meisten Fällen, insbesondere bei kleineren Geräten, werden die Anwendungen (Firmwares) einmalig während der Einrichtung geflasht und bleiben dann für eine lange Zeit an ihrem Einsatzort unberührt. Auch wenn Ihre Flotte OTA-Updates (Over-the-Air-Updates) unterstützt, ist es dennoch wichtig, eine flexible Lösung sowohl für die Überwachung als auch für die Konnektivität Ihrer Geräte zu haben - insbesondere beim Einführen neuer Updates.
Eine gute Kombination aus beidem kann erreicht werden, indem man die Herzschläge der Geräte (Liveness-Pings) mit dem MQTT-Protokoll kombiniert. Bei ilert haben wir kürzlich unseren neuen Alarmquellentyp "Herzschläge" angekündigt.
Im Folgenden finden Sie eine Schritt-für-Schritt-Anleitung zur Einrichtung flexibler Herzschlagüberwachung für IoT-Geräte (in diesem Beispiel ESP8266) unter Verwendung von MQTT, dem ilagent-Toolbox und ilert-arduino sowie der iLert-API.
Wenn Sie ein grundlegendes Verständnis für die Programmierung haben, führt Sie diese Anleitung von Null auf Held in Bezug auf esp8266, mqtt und die ilert-arduino-Bibliothek.
Anforderungen
Was in dieser Anleitung verwendet wird:
Wemos D1 Mini (ESP8266)
- Micro-USB-Kabel (stellen Sie sicher, dass Sie ein gutes Kabel wählen, billige Kabel z.B. von Ladegeräten funktionieren möglicherweise nicht)
- Macbook mit ESP8266-USB-Treiber (seriell) für MacOS
- ilert-Konto (kostenloser Plan verfügbar)
- Visual Studio Code
- PlatformIO
- RasperryPI (optional, empfohlen als mqtt-Broker-Host)
Anweisungen zur Einrichtung
- Sie können das Wemos D1 Mini (für den privaten Gebrauch und zum Testen) einfach bei Online-Händlern wie Amazon oder Alibaba erwerben.
- Holen Sie sich den Treiber für Ihr Betriebssystem und installieren Sie ihn, danach müssen Sie Ihr System neu starten.
- Laden Sie Visual Studio Code herunter und installieren Sie es.
- Laden Sie PlatformIO für Visual Studio Code herunter und installieren Sie es.
Öffnen Sie Visual Studio Code und klicken Sie auf das PlatformIO-Symbol in der linken Seitenleiste.
Navigieren Sie zu öffnen und wählen Sie das Menü Plattformen. Navigieren Sie in der oberen Leiste zu Embedded und suchen Sie nach espressif82.
Klicken Sie auf das Suchergebnis für Espressif8266 und installieren Sie die Plattform auf Ihrem Gerät.
Ihr System ist nun bereit für die Entwicklung von esp8266-Anwendungen.
Erstellen und Bereitstellen von Software auf dem esp
Erstellen und Bereitstellen von Software auf dem esp
Erstellen Sie ein neues PlatformIO-Projekt.
Projekt erstellen
Wählen Sie Ihr Board, in unserem Fall Wemos D1 Mini Lite als Teil der Espressif8266 Familie.
Es wird einige Augenblicke dauern, bis das Projekt eingerichtet ist.
Upload-Einrichtung (Bereitstellung)
Führen Sie einen kurzen Test durch, um zu prüfen, ob alles korrekt funktioniert. Stellen Sie sicher, dass Sie Ihren ESP8266 über das Micro-USB-Kabel mit Ihrem Gerät verbinden. Klicken Sie dann auf das kleine Symbol für die serielle Schnittstelle in der Fußzeile von Visual Studio Code - das serielle Terminal wird angezeigt.
Sie sollten die Ports Ihres esp-Geräts sehen können, in unserem Fall /dev/cu.wchusbserial1440 an Port 9.
Um die Builds und Uploads auf das esp8266-Gerät etwas zu vereinfachen, werden wir die Datei platformio.ini in Ihrem Projektstamm erweitern.
Derzeit sollte sie wie folgt aussehen:
Fügen wir ein paar Parameter hinzu, insbesondere den upload_port unseres Geräts, damit wir die Bereitstellung mit einem einfachen Klick starten können. Aktualisieren Sie Ihre platformio.ini-Datei, so dass sie wie folgt aussieht:
In Ihrem Fall kann upload_port einen anderen Wert erfordern, abhängig von der Ausgabe des seriellen Terminals vor
Erste Erstellung und Bereitstellung
Klicken Sie auf das Upload-Symbol (Pfeil) in der Fußzeile, um Ihr Projekt zu erstellen und auf dem Gerät bereitzustellen.
Sie sollten den Build- und Upload-Vorgang in einem neuen Terminal-Fenster sehen, der mit einer Erfolgsmeldung endet.
Nun, da wir wissen, wie wir unsere eigene Software auf dem esp8266 zum Laufen bringen, können wir mit der Einrichtung der Herzschlagüberwachung fortfahren.
Erstellen einer neuen Heartbeat-Alarmquelle
Loggen Sie sich in Ihr ilert-Konto ein oder erstellen Sie ein neues (es ist kostenlos), wenn Sie noch keines haben.
Navigieren Sie zur Registerkarte "Alarmquellen" und erstellen Sie eine neue Alarmquelle.
Wählen Sie Heartbeat als Integrationstyp und wählen Sie alle anderen Optionen entsprechend Ihrem Anwendungsfall. Ein 1-Minuten-Intervall erwartet z. B. mindestens alle 59 Sekunden einen Herzschlag, um Ihre Alarmquelle als gesund zu bewerten.
Klicken Sie auf "Speichern" und Sie sollten sehen, dass Ihre neue Heartbeat-Warnquelle nun erstellt wurde und sich im Status "Unbekannt" befindet. Das bedeutet, dass sie seit ihrer Erstellung noch nie einen Heartbeat empfangen hat.
Sie sollten auch in der Lage sein, die Heartbeat-Warnquelle zu nutzen, indem Sie einfach die gesamte Heartbeat-URL kopieren.
Führen Sie einen einfachen curl-Befehl in Ihrem Terminal aus.
Sie sollten das richtige Ergebnis für Ihren Heartbeat-Ping sehen.
Wenn Sie die Detailseite der Alarmquelle für Ihren Heartbeat neu laden, sollten Sie sehen, dass der Status jetzt auf Gesund geändert wurde.
Denken Sie jedoch daran, dass Sie wahrscheinlich den nächsten Heartbeat in ein paar Sekunden verpassen werden, was zu einem Vorfall in Ihrem iLert-Konto führt und Ihren Heartbeat in den Status "Abgelaufen" versetzt. Aber keine Sorge, sobald Ihr IoT-Gerät anfängt, Herzschläge zu senden, wird der Vorfall automatisch behoben und Ihr Heartbeat wird wieder Gesund sein.
Einrichten der Heartbeat-Überwachung mit ilert-arduino
Fügen wir zunächst die ilert-arduino-Bibliothek zu Ihren PlatformIO-Bibliotheken hinzu.
Navigieren Sie zur PlatformIO-Startseite (wie in den Einrichtungsanweisungen gezeigt) und wechseln Sie diesmal zur Registerkarte Bibliotheken.
Suchen Sie nach ilert.
Klicken Sie auf das Suchergebnis der ilert-Bibliothek und installieren Sie sie.
Wir können nun zu unserem Projekt zurückkehren und die iLert Arduino-Bibliothek verwenden, um Heartbeats zu erzeugen. Öffnen Sie die Datei src/main.cpp im Stammverzeichnis Ihres Projekts.
Erstellen einer einfachen WIFI-Verbindung
Lassen Sie uns zunächst eine grundlegende Einrichtung erstellen, die unseren esp8266 mit einem lokalen WLAN verbindet, sobald er hochfährt.
Senden von ilert-Heartbeats über HTTP
Nun, da die Wifi-Verbindung eingerichtet ist, können wir damit beginnen, Heartbeats direkt von unserem Gerät über HTTP(S) und die öffentliche ilert API zu senden.
Dazu ist nicht nur eine WLAN-Verbindung, sondern auch ein Internetzugang erforderlich.
Vollständiges Codebeispiel hier.
MQTT
MQTT (oder Message Queuing Telemetry Transport) ist ein leichtgewichtiges Publish-Subscribe-Netzwerkprotokoll, das Nachrichten zwischen Geräten auf der Basis von TCP/IP transportiert. Es ist für Verbindungen mit entfernten Standorten konzipiert, bei denen ein "kleiner Code-Fußabdruck" erforderlich ist oder die Netzwerkbandbreite begrenzt ist.
MQTT Broker
Der Broker fungiert als Postamt. MQTT verwendet nicht die Adresse des Empfängers, sondern die Betreffzeile mit der Bezeichnung "Topic", und jeder, der eine Kopie dieser Nachricht wünscht, abonniert dieses Topic. Mehrere Clients können die Nachricht von einem einzigen Broker empfangen (one to many capability). Gleichermaßen können mehrere Herausgeber Themen an einen einzigen Abonnenten veröffentlichen (many to one).
Jeder Client kann sowohl Daten produzieren als auch empfangen, indem er sie veröffentlicht und abonniert, d. h. die Geräte können Sensordaten veröffentlichen und gleichzeitig Konfigurationsinformationen oder Steuerbefehle empfangen (MQTT ist ein bidirektionales Kommunikationsprotokoll). Dies hilft sowohl bei der gemeinsamen Nutzung von Daten als auch bei der Verwaltung und Steuerung von Geräten.
Einrichten eines Brokers
Für den Fall, dass Sie mit MQTT nicht vertraut sind und noch keinen Broker einsetzen, gibt es eine Vielzahl von Open-Source-Brokern. Um diesen Leitfaden nicht weiter ausufern zu lassen, zeige ich kurz, wie man einen einfachen (ungesicherten) Broker zum Herumspielen startet:
Wechseln Sie in ein beliebiges leeres Verzeichnis Ihrer Wahl und erstellen Sie eine neue Datei touch mqtt-broker.js, in die Sie den folgenden Code einfügen:
Installieren Sie aedes, einen Node.js-basierten mqtt-Broker, und starten Sie Ihren lokalen mqtt-Broker mit:
aedes benötigt Node.js, um zu laufen
Sie haben nun einen einfachen MQTT-Broker laufen, der auf Port 1883 lauscht und der für die nächsten Schritte in dieser Anleitung verwendet werden kann.
Den ilagent als MQTT-Gateway betreiben
Der ilagent ist das Schweizer Taschenmesser im iLert-Universum. Sein Hauptzweck ist es, iLert-Kunden dabei zu helfen, jede Art von existierenden oder nicht existierenden Monitoring-Anwendungsfällen schnell in Betrieb zu nehmen.
Installing ilagent
Installation von ilagent
In unserem Fall können wir die Funktionalität von ilagent als Alert-Gateway nutzen, um Nachrichten von lokalen IoT-Geräten in die Cloud weiterzuleiten. ilagent unterstützt derzeit zwei Weiterleitungsmodi für Alert-Ereignisse oder Heartbeats: HTTP und MQTT.
Wir werden den letzteren verwenden, um unser MQTT-Gateway zu erstellen.
ilagent ist für alle gängigen Betriebssysteme verfügbar: Linux, MacOS, Windows und Unix Arm. Auf allen Geräten (außer Windows) können Sie den Agenten einfach mit unserem Einzeilenskript installieren:
Natürlich können Sie die Binärdatei auch hier herunterladen und nach Belieben installieren.
Sie können eine korrekte Installation immer überprüfen, indem Sie ilagent -V in Ihrer Shell ausführen.
Starten des MQTT Gateways
Im Kern weisen wir ilagent an, folgendes zu tun:
daemon run as daemon process (constantly running application)
-m 192. 168.1.14 connect to MQTT broker on host 192.168.1.14
-v -v set log output level to INFO
- daemon run as daemon process (ständig laufende Anwendung)
- -m 192.168.1.14 Verbindung zum MQTT-Broker auf dem Host 192.168.1.14
- -b il1hbtabc123 sendet einen regelmäßigen Heartbeat (etwa jede Minute), um die Betriebszeit des laufenden ilagent-Gateways zu überwachen
- -v -v Protokollausgabestufe auf INFO setzen
Sie sollten eine Ausgabe wie diese sehen, die Ihnen mitteilt, dass die Verbindung zu Ihrem MQTT-Broker erfolgreich hergestellt wurde.
Wenn Sie den Parameter -b verwenden möchten, sollten Sie eine weitere Heartbeat-Alarmquelle erstellen.
Verwenden Sie nicht dieselbe Alarmquelle für mehrere Alarmherkünfte Sie können auch zusätzliche Optionen angeben, wenn dies für Ihre Umgebung erforderlich ist
- -q 1883 Port des MQTT-Brokers, mit dem eine Verbindung hergestellt werden soll
- -n ilert Name des MQTT-Clients
- -e ilert/events Name des MQTT-Topics, das auf Pipe-Alert-Ereignisse überwacht werden soll
- -r ilert/heartbeats Name des MQTT-Topics, das auf Pipe-Heartbeats überwacht werden soll
Wenn Sie einen schnellen Weg brauchen, um ilagent als Daemon im Hintergrund laufen zu lassen, können Sie den folgenden Einzeiler wiederverwenden. Beachten Sie jedoch, dass ilagent dadurch nicht automatisch gestartet wird, wenn Ihr Hostsystem neu gestartet wird.
Sie können den ilagent natürlich auch direkt neben Ihrem Broker auf demselben Rechner laufen lassen (das wird sogar empfohlen).
Einrichten der vermittelten Heartbeat-Überwachung mit MQTT
Nun, da unser MQTT-Gateway läuft, können wir unseren esp8266-Code umschreiben, um Heartbeats und Ereignisse direkt durch den ilagent zu leiten, indem wir ihn als Gateway verwenden, ohne selbst direkt auf das Internet zuzugreifen.
Einrichten einer MQTT-Verbindung
Wir werden unsere grundlegende Wifi-Einrichtung um einen MQTT-Client erweitern, der eine Verbindung zu unserem MQTT-Broker herstellen kann. Wir werden diesen Client verwenden, um Nachrichten, die Heartbeats und Events enthalten, an MQTT-Themen zu senden, die ilagent abonniert hat. ilagent wird sich dann darum kümmern, diese weitergeleiteten Heartbeats und Events zuverlässig an die öffentliche API von ilert zu liefern.
Senden von Heartbeats über MQTT
Nun, da unsere MQTT-Client-Verbindung steht, können wir beginnen, Heartbeats über mqtt-Nachrichten zu senden. Die ilert-arduino-Bibliothek bietet Methoden, um die erforderlichen MQTT-Nachrichten-Payloads für ilagent zu erstellen.
Vollständiges Codebeispiel hier.
Senden von Alarmereignissen über MQTT
Mit dem ilagent mqtt gateway können auch Alarmereignisse über mqtt-Clients gesendet werden. Die Nutzlast bietet die gleichen flexiblen Optionen wie der API-Endpunkt für Ereignisse. Das folgende Beispiel erstellt einen Vorfall mit hoher Priorität in ilert. Ersetzen Sie den ersten Parameter durch den API-Schlüssel der entsprechenden Alarmquelle.
Vollständiges Codebeispiel hier.
Fortgeschritten
Beim Verwalten Ihrer Flotte ist es nicht erforderlich, Änderungen in der Benutzeroberfläche vorzunehmen. Sie können ganz einfach alle Ihre Anforderungen mithilfe der REST-API von iLert automatisieren.
Im Folgenden finden Sie ein Beispiel für die einfache Erstellung einer Herzschlagalarmquelle über unsere API. Sie können den API-Schlüssel der Alarmquelle in der Antwort des HTTP-Requests abrufen.
Es ist definitiv möglich, dass Geräte sich selbst bereitstellen und anfangen, Herzschläge zu senden.
Um einen Schritt weiter zu gehen
Wenn Ihnen dieser Einblick in die Welt des IoT und MQTT für Überwachung und Benachrichtigungen gefallen hat und Sie darüber hinausgehen oder es für Ihren Anwendungsfall implementieren möchten, zögern Sie nicht, uns für Unterstützung oder Fragen zu kontaktieren.