Embedded Webserver für Smart-Edge-Anwendungen

Autor / Redakteur: Wilfred Nilsen * / Michael Eckstein |

In vielen Anwendungen besteht der Bedarf, IoT-Knoten am Smart Edge ansprechen und konfigurieren zu können. Das kann mithilfe eines integrierten Webservers erfolgen, der auf dem Endpunkt läuft und bei Bedarf über ein lokales WLAN oder über das Internet kontaktierbar ist.

Anbieter zum Thema

Fernsteuerung: IoT-Endgeräte sind häufig an unzugänglichen Orten installiert. Über einen integrierten Webserver lassen sie sich aus der Distanz steuern.
Fernsteuerung: IoT-Endgeräte sind häufig an unzugänglichen Orten installiert. Über einen integrierten Webserver lassen sie sich aus der Distanz steuern.
(Bild: Clipdealer)

Ein IoT-Knoten am Smart Edge kann für mehrere Anwendungsfälle ausgelegt werden, beispielsweise zum Fernsteuern einer Gebäudebeleuchtung. Das hier vorgestellte Design kombiniert einen Webserver und eine IoT-Geräteverwaltungslösung. Der Webserver ermöglicht eine direkte Verbindung aus dem lokalen Netzwerk. Mithilfe des IoT-Modus können Benutzer den Edge-Node über das Internet fernsteuern. Die Webanwendung ist eine so genannte Single Page Application (SPA), die ausschließlich das WebSockets-Protokoll für das Gerätemanagement verwendet.

Das HTTP-Protokoll wird nur für das Laden der SPA verwendet. Der Embedded HTTP- und WebSocket-Server, genannt Minnow-Server, wurde speziell für Mikrocontroller mit begrenzten Ressourcen entwickelt. Beim Entwurf einer Webanwendung für ein ressourcenbeschränktes Gerät ist besondere Sorgfalt geboten, um den von der Webanwendung genutzten Speicherplatz zu begrenzen.

Bildergalerie
Bildergalerie mit 6 Bildern

Das hier beschriebene, auf GitHub verfügbare SPA-Referenzbeispiel beinhaltet Echtzeit-Updates von LEDs sowie eine Thermostatanzeige und zeigt, wie man Firmware über WebSockets und das Internet im IoT-Modus hochlädt. Das komplette SPA, einschließlich aller Ressourcen wie Bilder, CSS und JavaScript, benötigt bei der Komprimierung über einen Online-Kompressionsservice nur 41 KByte Flash-Speicher. Die SPA-Anwendung mit ihren CSS- und HTML5-Bausteinen ist so ausgelegt, dass sie sich an unterschiedliche Embedded Device Management Applications anpassen lässt.

Darüber hinaus ist die enthaltene JavaScript-Bibliothek für die WebSocket-Kommunikation generisch aufgebaut und kann problemlos in anderen Anwendungen wiederverwendet werden. Das SPA-Referenzbeispiel beinhaltet mehrere Webseiten. Im Gegensatz zu einer herkömmlichen Webanwendung wird beim Anklicken eines Links im Navigationsmenü keine Seite geladen. Stattdessen befinden sich alle Seiten in einer HTML-Datei. JavaScript dient dazu, DIV-Elemente – also die Seiten – ein- und auszublenden. Das Beispiel verwendet mehrere modale Dialogfelder. Die erste Dialogbox erscheint, sobald das SPA in den Browser geladen wurde.

Single Page Application nutzt WebSockets-Protokoll

Ein Gerät ohne native Anzeige benötigt fest programmierte Standard-Anmeldeinformationen, etwa „root“ und „password“. Jedes für den kommerziellen Einsatz produzierte Gerät sollte jedoch eindeutige Anmeldeinformationen verwenden und den Benutzer daher zwingen, bei der ersten Anmeldung neue Zugangsdaten festzulegen. Der Minnow Server kann mit oder ohne TLS verwendet werden. Eine Funktion stellt sicher, dass der Login auch ohne TLS sicher ist. Das Passwort wird dabei mit einem vom Server bereitgestellten Seed-Value, einem sogenannten Nonce, gehasht, bevor es zum Server gelangt. Nach dem Einloggen erscheint ein AJAX-basierter Taschenrechner. WebSockets können mehrere bidirektionale Nachrichten zwischen dem Browser und dem Server verarbeiten.

Eine Korrelation zwischen den in beide Richtungen gesendeten Nachrichten besteht nicht. Es obliegt der Anwendung, diese Meldungen zu interpretieren und zu verwalten. Oft ist es jedoch sinnvoll, ein Frage/Antwort-Design-Pattern in Webanwendungen zu verwenden, bei denen ein JavaScript-Callback aufgerufen wird, wenn die Antwort vom Server zurückgegeben wird. Viele Webentwickler verwenden dafür gerne AJAX. Das Ausführen der mathematischen Operationen erfolgt serverseitig. Bei jeder an den Server gesendeten Anforderung einer mathematischen Operation folgt eine mathematische Antwort an den Browser. Das Ergebnis wird im Taschenrechner angezeigt. AJAX beinhaltet auch ein Success/Error-(Try/Catch-)Konzept.

LEDs für Zustandserkennung nutzen

Viele Geräte verfügen über LEDs. Die Server-LED-Logik lässt sich daher leicht auf diese Geräte portieren. Das Anklicken einer LED-Taste sendet ein Echtzeit-Ereignis an den Server, der die LED setzt. Der Server kann in einem Fenster der Windows-Konsole ausgeführt werden. Der LED-Zustand wird auf der Konsole abgebildet. Sie können den LED-Zustand auch in der Konsole (auf der Serverseite) mit den Tastaturbuchstaben B bis E einstellen. Der Server sendet dann eine Echtzeit-Update-Meldung an den Browser. Das Thermostat dient als zusätzliches Beispiel für ein Echtzeitereignis. Die Pfeiltasten der Auf- und Ab-Tastatur steuern die Temperatur. Zum Auslegen dient eine frei verfügbare Gauge-Widget-Bibliothek.

Das Thermometer-Widget ist allerdings nicht in der Lage, große Mengen eingehender Daten zu verarbeiten. Die Firmware-Upload-Seite zeigt, wie man eine Drag & Drop-Upload-Seite in HTML 5 erstellt und wie man die hochgeladene Datei über die WebSocket-Verbindung an den Server sendet. Alle über die WebSocket-Verbindung gesendeten Nachrichten sind JSON-Textnachrichten. Einzige Ausnahme sind die Binärdaten des Uploads. Modernes JavaScript kann Binärdaten einfach verwalten und das WebSocket-Protokoll unterstützt sowohl Binär- als auch Textframes. Während des Hochladens der Firmware kann der Benutzer die SPA weiter verwenden. Im Gegensatz zur sicheren Anmeldeseite ist das Setzen neuer Anmeldeinformationen nur dann sicher, wenn TLS verwendet wird. Der Minnow-Server unterstützt TLS.

Der modale Dialog zur Anmeldung.
Der modale Dialog zur Anmeldung.
(Bild: Real Time Logic)

Aktivierung des SPA-Referenzbeispiels für das IoT

Geräte mit Embedded Webserver werden typischerweise in privaten Netzwerken hinter Firmen-Firewalls und/oder Routern installiert und betrieben, die den Zugriff aus dem Internet verhindern. Es sei denn, im Router ist eine Portfreigabe (Firewall-Pinhole) konfiguriert. Dann ist es möglich, dass sich das Gerät an einen Redirection-Server anmeldet. Über die zugewiesene Adresse ist dann nach Authentifizierung ein Zugriff auf das Gerät möglich. Für Testzwecke haben wir den Online-IoT-Server http://minnow.ml eingerichtet. Diese IoT-Bridge fungiert als Proxy zwischen den Remote-Benutzern und den Geräten und ermöglicht Remote-Benutzern den sicheren Zugriff auf private Webserver, die hinter einer Firewall laufen. Für den späteren Serienbetrieb müssen Anwender einen eigenen privaten IoT-Server einrichten. Die GitHub Minnow Page enthält Anweisungen für das Einrichten von eigenen privaten IoT-Servern.

Bild 8: Online-IoT-Server vor und nach dem Anklicken eines Geräte-Links.
Bild 8: Online-IoT-Server vor und nach dem Anklicken eines Geräte-Links.
(Bild: Real Time Logic)

Ein privater IoT-Servers hat den Vorteil, dass ein Anwender nicht von einem IoT-Dienstleister abhängig ist. Einrichtung und Betrieb eines privaten IoT-Servers sind unkompliziert. Alle angeschlossenen Geräte werden auf der Benutzeroberfläche des Online-Servers angezeigt. Wenn Sie auf eines der Geräte klicken, gelangen Sie zum Anmeldebildschirm des Geräts. Die Anmeldeseite bezieht sich auf die Anmeldeinformationen, die vom Gerät und nicht vom Online-Server bereitgestellt werden. Die Standard-Anmeldeinformationen sind root/password. Die Abbildung zeigt den Online-Server vor und nach dem Anklicken eines Geräte-Links.

Minnow Server C-Code kompilieren und ausführen

Wir haben den Minnow Server und das Beispielprogramm in den Online-Dienst repl.it hochgeladen, der die Kompilierung und Ausführung von C-Code online ermöglicht. Entwickler können den Minnow Server C-Code kompilieren und ausführen. Ein Klick auf „Start“ kompiliert und startet den C-Code. Nach einigen Sekunden steht das Gerät auf minnow.ml zur Verfügung. Anweisungen im Browser beschreiben das weitere Vorgehen. Für eine gute Übersicht sollte der Computermonitor groß genug sein, um zwei Browserfenster nebeneinander anzuzeigen – eines für repl.it und eines für minnow.ml.

Die GitHub-Seite enthält detaillierte Anweisungen und ein Video zur Verwendung der gebrauchsfertigen und eigenständigen ESP8266 IDE.
Die GitHub-Seite enthält detaillierte Anweisungen und ein Video zur Verwendung der gebrauchsfertigen und eigenständigen ESP8266 IDE.
(Bild: Real Time Logic)

Der Minnow Server enthält eine Portierungsschicht für mehrere Echtzeit-Betriebssysteme (Realtime Operation System, RTOS). Das Referenzbeispiel für den Minnow Server enthält auch eine gebrauchsfertige Build-Umgebung für den Wi-Fi-Mikrocontroller ESP8266. Mit der Umgebung ist es möglich, FreeRTOS und den lwIP-TCP/IP-Stack in weniger als 30 Minuten aufbauen zu können. Die komplett einsatzbereite webbasierte ESP8266-Entwicklungsumgebung (IDE) läuft entweder mit VmWare oder VirtualBox. Das Bild links zeigt die virtuelle Maschine und die mit der virtuellen Maschine verbundene webbasierte IDE. Beachten Sie, wie die virtuelle Maschine den Besitz der ESP8266 USB-Verbindung übernommen hat. Die webbasierte IDE erkennt dies und zeigt den ESP8266 als angeschlossen und bereit, mit neuer Firmware geflasht zu werden. Die GitHub-Seite enthält detaillierte Anweisungen und ein Video zur Verwendung der gebrauchsfertigen und eigenständigen ESP8266 IDE.

Minnow-Server eignet sich für leistungsschwache Systeme

Der Minnow-Server ist in erster Linie für kleine ressourcenbeschränkte Systeme konzipiert. Obwohl der Minnow-Server für die Verwaltung mehrerer Verbindungen eingerichtet werden kann, ist das Referenzbeispiel darauf ausgelegt, den RAM-Speicher zu schonen und eine Verbindung nach der anderen zu verwalten. Der Versuch, ein neues Browserfenster zu verbinden, während ein anderes Browserfenster die einzige WebSocket-Verbindung verwendet, funktioniert daher nicht. Embedded-Entwickler, die potentere Mikrocontroller-Lösungen zur Verfügung haben, sollten einen leistungsfähigeren Embedded-Webserver wie den Barracuda App Server verwenden, der auch WebSockets enthält. Als Beispiel verwendet Mitsubishi Deutschland den Barracuda App Server, um in Industrieanlagen eine vorausschauende Wartung zu ermöglichen. Der Barracuda App Server wird hier zur Kommunikation mit der SAP IoT Lösung verwendet. Die Predictive Analytics von SAP ist ein Online-Cloud-Service, der Geräteherstellern zur Verfügung steht.

* Wilfred Nilsen ist Gründer und CTO von Real Time Logic in Dana Point, Kalifornien.

Artikelfiles und Artikellinks

(ID:45892426)