Es war der Monat vor Weihnachten, als im ganzen Büro kein Lebewesen sich regte, nur der Ruf der Marketingabteilung nach einem Mendix Boffin. Unter dem Druck des vierten Quartals hörten wir uns ihre Schreie an und dachten uns dann: „Hey, lass es uns versuchen!“
Ihr Wunsch war eine IoT-Weihnachts-App, die das Leben eines Kindes erhellen würde. Wir haben eine App entwickelt, mit der Benutzer die Lichter an einem Weihnachtsbaum im Mendix Büro in Großbritannien. Mit vier Knöpfen könnten Benutzer vier verschiedene Lichter am Baum einschalten. Jedes Mal, wenn ein Licht eingeschaltet wurde, Mendix spendete Geld für die Aktion für Kinder Nächstenliebe.
So haben wir die Weihnachts-App ausgeliefert
Als Erstes mussten wir den Umfang des Projekts und die benötigte Hardware festlegen. Wir erkannten schnell, dass wir eine Webcam für den Live-Stream des Baums sowie eine Möglichkeit zur Steuerung der Beleuchtung benötigen würden. Nach einigen Experimenten entschieden wir uns für das unten beschriebene Setup.
Steuerung der Lichter
Um die Beleuchtung zu steuern, entschied ich mich für eine Technologie, mit der ich bereits vertraut war. Im Rahmen eines Heimautomatisierungsprojekts hatte ich bereits eine App zur Steuerung meines Stromverbrauchs zu Hause entwickelt. Ich verwendete einen Raspberry Pi in Kombination mit Energenie-Steckern, um meine Steckdosen zu steuern. Energie bietet eine Reihe von Produkten an, mit denen Sie Ihre Energie- und Heimautomatisierung steuern können. Die Energenie-Stecker werden mit einer Raspberry Pi-Steuerplatine und einem Python-SDK geliefert, mit denen Sie die Stecker steuern können.
Ich wollte eine wirklich einfache Möglichkeit, bestimmte Stecker ein- und auszuschalten. Daher habe ich das Python SDK verwendet und meine eigenen einfachen REST-Webdienste geschrieben, mit denen ich eine Geräte-ID und einen Ein- oder Aus-Befehl übergeben konnte.
Das Problem bei dieser Methode ist, dass ich schnell erkannte, dass dieser Dienst nur in unserem internen Netzwerk verfügbar sein würde. Ich könnte mich daher nicht von außen oder von der Mendix Cloud. Ich wollte nichts an der Netzwerksicherheit ändern, also musste ich mir eine Möglichkeit überlegen, die Geräte zu steuern, ohne Portweiterleitungen oder Konfigurationen im Netzwerk vornehmen zu müssen.
Da kam mir die Idee, MQTT zu verwenden. MQTT ist ein Machine-to-Machine (M2M)/Internet of Things-Konnektivitätsprotokoll. Es ist ein extrem leichtes Protokoll, das es Geräten ermöglicht, Nachrichten über Themen zu veröffentlichen und zu abonnieren.
Die Kommunikation über MQTT wird normalerweise über einen MQTT-Broker gesteuert. Geräte können Nachrichten an den Broker senden und Anwendungen können diese Nachrichten abhören, indem sie sich anmelden.
In unserem Beispiel mit der Weihnachts-IoT-App wollte ich die Information veröffentlichen, wann eine Taste in der App gedrückt wurde. Die Information, die ich abonnieren wollte, war das Lichtgerät, das ein- oder ausgeschaltet werden musste. Der Raspberry Pi musste den Broker abonnieren, und wenn eine Taste gedrückt wird, führt er den Python-Webdienst aus, um die Lichter ein- oder auszuschalten.
Der von mir gewählte MQTT-Broker war IBM Watson IoT. Es gibt eine Vielzahl von MQTT-Brokern, darunter AWS, Mosquitto, Hive MQ und Cloud MQTT. Ich habe mich jedoch für IBM Watson entschieden, weil die Konnektivität mit Node Red so einfach ist.
Node Red ist ein von IBM entwickelter Open-Source-Grafikeditor, der die Vernetzung des Internets der Dinge ermöglicht. Node Red ist mit dem Standardbetriebssystem für Raspberry Pi vorinstalliert. Ich wollte Node Red verwenden, weil ich damit mehrere Dinge tun konnte, ohne Code schreiben zu müssen:
- Abonnieren Sie die MQTT-Themen zu IBM IoT für die Beleuchtung
- Warteschlangenmeldungen zum Einschalten des Lichts
- Automatisches Ausschalten des Lichts nach einer bestimmten Anzahl von Sekunden
Unten sehen Sie den Node Red-Flow, den ich mit Node Red auf dem Raspberry Pi erstellt habe. Er abonniert das Watson IoT Gateway und hört die Gerätethemen ab. Wenn Node Red eine Nachricht zum angegebenen Thema empfängt, begrenzt es diese Nachrichten auf eine Nachricht alle 15 Sekunden. Dadurch wird sichergestellt, dass es zu keinen Konflikten kommt, wenn Personen gleichzeitig auf die Schaltfläche klicken. Es wird nur eine Nachricht nach 15 Sekunden an die nächste Stufe weitergeleitet; andere eingehende Nachrichten werden in die Warteschlange gestellt. Das Gerät wird dann mithilfe des Python-Webdienstes eingeschaltet und eine Verzögerung von zehn Sekunden gestartet. Nach der Verzögerung werden die Lichter automatisch ausgeschaltet.
Durch die Verwendung eines MQTT-Brokers in Kombination mit Node Red konnten wir sicherstellen, dass wir die Geräte extern aus der Cloud steuern konnten. Nachdem wir sichergestellt hatten, dass unsere Infrastruktur funktionierte, konnten wir mit der Entwicklung der App beginnen.
Der Mendix Applikation
Die App musste über drei Kernfunktionen verfügen:
- Ermöglicht Benutzern, die Lichter durch Klicken auf vier Schaltflächen zu steuern.
- Sehen Sie sich den Webcam-Stream an.
- Sehen Sie sich den Gesamtbetrag der Spende an.
Wir wollten der App einige Einschränkungen hinzufügen, um sicherzustellen, dass eine Person nicht mehrfach auf die Schaltflächen klicken kann.
Um sicherzustellen, dass die Schaltflächen nur einmal angeklickt werden, haben wir eine nicht persistente Entität erstellt und diese in der aktuellen Benutzersitzung gespeichert. Die Entität speichert, welche Schaltflächen angeklickt wurden und welche nicht. Wenn die Schaltfläche angeklickt wurde, änderte die App die Sichtbarkeit der Schaltfläche und machte sie nicht anklickbar. Bei jedem Klick auf die Schaltfläche erhöhte die App die Gesamtzahl der Klicks, berechnete die Gesamtzahl der gespendeten Klicks und rief IBM IoT mit einer Nachricht auf, ein bestimmtes Licht einzuschalten. Der Raspberry Pi empfing diese Nachricht und schaltete dann über den Webdienst die Lichter im Büro ein.
Der Videostream
Wir wollten eine einfache Möglichkeit, die App mit der Webcam zu verbinden. Nach einigen Experimenten mit unterschiedlicher Streaming-Software und -Hardware entschieden wir uns für YouTube, Wirecast (https://www.telestream.net/wirecast/overview.htm) und eine Microsoft Webcam. Mit der Wirecast-Software können Sie Feeds von Webcams erfassen und diese an eine Reihe von Streaming-Diensten, darunter YouTube, streamen. YouTube bietet unbegrenztes kostenloses Live-Streaming und hat außerdem den zusätzlichen Vorteil, dass sein Videoplayer im Gegensatz zu anderen Diensten auf HTML 5 und nicht auf Flash läuft. Die Verwendung von HTML 5 würde sicherstellen, dass der Videostream auf allen Geräten laufen kann. Wir haben das Video mithilfe der HTML-Ausschnitt in England, Mendix App Store.
Das Endprodukt
Das Endprodukt wurde in der Woche vor Weihnachten auf den Markt gebracht und wir hatten eine fantastische Resonanz. In der Spitze schalteten mehr als 150 Benutzer gleichzeitig die Lichter ein. Insgesamt konnten mit der App 3,500 US-Dollar für Action for Children gesammelt werden. Vielen Dank an alle Klicker!