Direkt zum Inhalt

Mendix, AWS und das Internet der Dinge

Mendix, AWS und das Internet der Dinge

Sie haben vielleicht die jüngste Ankündigung unserer erweiterten strategischen Beziehung mit AWS gesehen und vor kurzem, Mendix und AWS haben zusammengearbeitet, um eine Reihe von Demonstratoren und Vorlagen zu erstellen. Wir wollten zeigen, wie diese großartigen Plattformen zusammenarbeiten können, wie unsere Beschleuniger für Finanzdienstleistungen und Versicherungen.

Eines der Dinge, die wir Ihnen gerne demonstrieren möchten, ist die Integration zwischen Mendix und AWS. In diesem Blog wird die von uns erstellte Demonstration und deren Umsetzung beschrieben.

Dieser Beitrag wurde verfasst in Zusammenarbeit mit Simon Black (Senior Manager für Evangelisation und technische Unterstützung), Alistair Crawford (Solutions Evangelist) und Adrian Preston (Lösungs-Evangelist).

Das Szenario

Wie in unserem Blog über Kühlkettenlogistik erläutert, wurde uns das Szenario der Kühlkettenlogistik und die Nachverfolgung des Transports temperaturgeregelter Waren vorgestellt. Um dies zu erreichen, verwendeten wir Mendix um ein Webanwendungs-Frontend zu erstellen, das von AWS-Diensten unterstützt wird. Mit diesen Tools wollten wir Folgendes erstellen:

  • Eine Webanwendung für Bürobenutzer
  • Eine mobile Version für Außendienstmitarbeiter
  • Die unterstützende AWS-Cloud-Architektur zur Verarbeitung und Bereitstellung der Daten

Erstellen der Demo, Teil 1: IoT und AWS

Um die Demonstration realer Daten zu vereinfachen (und die Notwendigkeit eines physischen LKWs mit Sensoren zu beseitigen), beschlossen wir, einen Datensimulator zu bauen, mit dem wir dann Daten in die AWS-Dienste einspeisen würden.

Um die IoT-Daten in AWS zu verarbeiten, haben wir uns für AWS Timestream entschieden und damit angefangen. Wir haben einen Datenfeed aus Timestream erstellt, der die Sensordaten für Temperatur und Luftfeuchtigkeit darstellte. Wir würden auch die Reisedaten und Daten von den endgültigen IoT-Geräten benötigen; den Schlössern und dem Backup-Kompressor.

Die Sperren sind ein einfacher Boolescher Wert, der speichert, ob sie aktiviert sind oder nicht. Der Backup-Kompressor ist ebenfalls ein Boolescher Wert, der angibt, ob er aktiviert ist oder nicht. Er wird jedoch für die Timestream-Daten an den Simulator zurückgemeldet, sodass die Temperaturdaten nach unten tendieren, wenn der Kompressor eingeschaltet wird.

Eine weitere AWS-Funktion, die wir implementieren wollten, war die Bilderkennung. In unserem Szenario transportierten die Lastwagen frische Produkte, in diesem Fall Obst, und diese mussten bei der Lieferung überprüft werden. Sobald die Lieferung abgeschlossen war und die Person, die die Waren am anderen Ende überprüfte, ein Foto gemacht hatte, konnten wir es durch AWS Rekognition laufen lassen und feststellen, ob das Produkt gut oder schlecht war.

Hier ist ein kurzer Überblick darüber, wie jeder dieser Datensätze und Funktionen in AWS erstellt wurde.

Einrichten von AWS IoT

Um Daten von den Geräten zu empfangen, nutzten wir AWS IoT CoreWir brauchen zuersted zur Einrichtung unserer Geräte, auch bekannt im IoT als 'Dinge'Wir haben ein "Thing" für unsere Fahrzeugdaten vom LKW und ein weiteres Ding für jeden Container im LKW. Dies hilft uns, das Fahrzeug zu verfolgen und den Zustand der Container zu überwachen. 

Sobald diese mit den richtigen Sicherheitsrichtlinien eingerichtet sind, haben wir automatisch Zugriff auf die MQTT-Publish- und Subscribe-Mechanismen, die zum Senden und Empfangen von Daten verwendet werden.

Zuletzt können wir in AWS IoT Core eine Regel konfigurieren, die die eingehenden Daten unserer Fahrzeuge und Container zur weiteren Verwendung in einer TimestreamDB speichert.

Einrichten der Amazon Timestream-Datenbank

Die Einrichtung der Amazon Timestream-Datenbank ist unkompliziert. Wir haben eine Datenbank namens „Logistik“ erstellt und darin eine Tabelle namens „Container“, in der die Containersensordaten gespeichert sind, und eine Tabelle namens „Transport“, in der die LKW-Daten gespeichert sind.

Damit schon kurz nach dem Start der App einige historische Daten in der Amazon Timestream-Datenbank verfügbar sind, initialisiert die App „Things“, indem sie der Datenbank eine Reihe zufällig generierter Datensätze hinzufügt. Dies geschieht mithilfe einer Java-Aktion, die mit dem AWS Java SDK interagiert, um auf die Timestream-Datensatzschreibfunktion zuzugreifen.

Anschließend werden durch Regeln im AWS IoT Core neue Daten zu den Datenbanktabellen hinzugefügt. Regeln übernehmen ausgewählte Nachrichten, die vom Sensor/Simulator über den AWS IoT Core veröffentlicht wurden, und schreiben sie in die angegebene Datenbanktabelle.

Nachdem der AWS Timestream-Datenbank-Feed eingerichtet und ausgeführt wurde, mussten wir einige Reisedaten erstellen.

Generieren von Reisedaten

In einem realen Szenario mit Fahrt- und Geräteverfolgung verfügt unser LKW-Gerät normalerweise über ein GPS-Modul zum Senden von Standort-, Richtungs- und Geschwindigkeitsdaten. Dadurch erhalten wir Breitengrad, Längengrad, MPH (oder KPH) und Beschleunigungsdaten.

Für unsere Simulation der Reise haben wir einige vorhandene Simulationsrouten verwendet, die dank AWS öffentlich verfügbar sind. Sie verfügen über eine große Anzahl statischer Routen mit Startpunkt, Ziel und einer Reihe von Etappen oder Punkten, die in einem realistischen Muster dazwischen liegen. Dies alles liegt im JSON-Format vor und ist leicht verständlich.

Für die meisten anderen Sensordaten haben wir einfache mathematische Berechnungen durchgeführt, um Zufallswerte zu generieren, die innerhalb unserer Schwellenwerte liegen – beispielsweise Temperatur und Luftfeuchtigkeit.

Nachdem wir die Fahrtdaten generiert hatten, damit wir die Verfolgung des LKWs simulieren konnten, mussten wir im Anschluss die Bilderkennungsfunktionen implementieren und den Datensatz erstellen.

AWS-Anerkennung

Um den Prozess der Qualitätsprüfung von Produkten (in unserem Fall Obst) zu vereinfachen, haben wir uns entschieden, etwas KI zu implementieren. AWS bietet eine Reihe von Lösungen für maschinelles Lernen und KI, die für verschiedene Arten von Szenarien entwickelt wurden. Für die Bild- und Videoerkennung bietet AWS AWS Rekognition. Rekognition bietet eine Reihe vorab trainierter Modelle für maschinelles Lernen und ermöglicht es Ihnen, Ihre eigenen zu trainieren. Für unseren Anwendungsfall wollten wir es dem Benutzer ermöglichen, ein Foto von Obst zu machen und dessen Qualität zu prüfen.

Zuerst mussten wir unser Erkennungsmodell trainieren, um zu verstehen, wie gutes und schlechtes Obst aussieht. Um ein effektives Modell zu erstellen, ist es wichtig, dass Sie über einen guten Datensatz verfügen. Je mehr Bilder wir zum Trainieren des Modells bereitstellen können, desto bessere Ergebnisse erzielen wir. Zum Glück gab es viele kostenlose offene Datensätze, die unsere Entwicklung beschleunigten. Wir fanden diesen Datensatz, der Tausende von Bildern enthielt, die verdorbenes und frisches Obst darstellten:

https://www.kaggle.com/datasets/sriramr/fruits-fresh-and-rotten-for-classification

Wir haben diesen Datensatz genommen und ihn auf AWS S3 hochgeladen, damit AWS Rekognition diese Bilder zum Trainieren und Testen verwenden kann. Ein Modell zum Erkennen benutzerdefinierter Beschriftungen lässt sich schnell und einfach erstellen. In 6 Schritten können Sie ein Modell zum Erkennen von Beschriftungen erstellen:

Beim Trainieren des DatensatzesAWS Rekognition Sie können Ihre Bilder automatisch beschriften, basierend auf den in S3 verwendeten Ordnernamen, oder Sie können Beschriftungen manuell hinzufügen. Aufgrund des großen Datensatzes haben wir uns für die automatische Beschriftungszuweisung entschieden. Das bedeutett zur Abwicklung, Integrierung, Speicherung und Beim Erstellen des Datensatzes mussten wir nicht jedem Bild manuell Beschriftungen hinzufügen. Dies saved uns viel Zeit und Mühe. Beim Erstellen eines Datensatzes ist es wichtig, sowohl einen Trainingsdatensatz als auch einen Testdatensatz bereitzustellen. Dadurch können AWS Rekognition zu sich selbst trainieren und zu dann testen wie genau das Modell ist, das mithilfe des Trainingssatzes erstellt wurde. 

 

Sobald das Modell mithilfe der Datensätze trainiert wurde (was etwa 30 Minuten dauern kann), muss das Modell gestartet werden. Sobald das Modell trainiert und gestartet ist, ist es bereit, Anfragen über die AWS-API anzunehmen (Details dazu finden Sie später in diesem Beitrag) und Beschriftungen anhand einer Bildeingabe zu erkennen.

Erstellen der Demo Teil 2: Mendix

Zu Beginn des Builds haben wir einige Wireframes und Prozessabläufe entworfen und unser UX-Designer hat ein Figma-Design entwickelt, um das Erscheinungsbild der Anwendung zu steuern.

Nachdem wir nun ungefähr wussten, wie es letztendlich aussehen würde, konnten wir mit dem Zusammensetzen der einzelnen Teile beginnen.

  • Integrationen
  • Domänenmodelle
  • Anwendungen

Der Aufbau begann mit den Verwaltungstools zur Unterstützung des Systems und einer Möglichkeit, das System vorab mit Daten zu füllen. Wir erstellten die Domänenmodellentitäten, um die Informationen zu speichern, die wir für die LKWs, ihre Container, die Fahrer und die zu transportierenden Waren benötigten. Dann erstellten wir Routinen, um diese mit Beispieldaten für die Demonstration vorab zu füllen und es anderen Benutzern in Zukunft leicht zu machen, sie zu verwenden.

Anschließend wurden die LKWs mit Fahrtdaten verknüpft und die Container an die Timestream-Datenquelle angeschlossen.

Integration Mendix mit AWS Timestream
Wenn die Logistik-App die historischen IoT-Daten von Timestream abrufen muss, erfolgt dies durch Einrichten einer SELECT-Anweisung und Ausführen dieser über die Java-Abfrageaktion von Timestream. Dies ist eine Java-Aktion, die erstellt wurde, um mithilfe des AWS Java SDK Abfragen an die Timestream-Datenbank auszuführen und die Ergebnisse zurückzugeben.

Um die Datengenerierung zu unterstützen und zu überprüfen, ob alles funktioniert, haben wir einige Admin-Seiten erstellt, auf denen wir die Daten in der Vorschau anzeigen, ändern und exportieren können. Der Export ist besonders nützlich, da die von uns erstellten JSON-Dateien dann als Datenquelle für die Vorabausfüllung in der Demoanwendung verwendet werden können.

Als Nächstes präsentierten wir auf einer Übersichtsseite die von uns erstellten LKW- und Fahrerinformationen. Dies gibt einem Backoffice-Benutzer die Möglichkeit, auszuwählen, welches Fahrzeug er sich ansehen möchte. Für die Demo wurde nur ein Fahrzeug in Bewegung gesetzt, aber wenn es mehrere gegeben hätte, wäre die Auswahl leicht gewesen.

Wenn Sie auf einen LKW klicken, erhalten Sie eine Ansicht der Details und des aktuellen Status dieses LKWs. Hier kommen die simulierten Informationen ins Spiel. Wir haben von oben nach unten gearbeitet und mit dem Container-Selektor begonnen, da jeder LKW in unserem System zwei Container hat, und dieser steuert die Ansicht der Monitore im Abschnitt unten.

Als nächstes kam die Karte oben rechts. MendixDas Standard-Widget von ist perfekt für die Anzeige von Standorten, hatte aber zu diesem Zeitpunkt keine integrierte Option zum Zeichnen der Routenlinie oder zum einfachen Anzeigen des fahrenden LKWs. Ein kurzer Blick auf den Marktplatz ergab auch nichts, was unseren Wünschen entsprach, also erstellten wir unser eigenes steckbares Widget mit React und JavaScript. Dieses neue Widget zeigt die Routenlinie, den LKW, der sich entlang der Linie bewegt, und die Richtung, in die er fährt.

Der untere Abschnitt zeigt Aktualisierungen der Temperatur und Luftfeuchtigkeit im ausgewählten Container und der darin transportierten Produkte. Außerdem die Schalter für den Ersatzkompressor und die Schlösser. All dies musste an unsere Timestream-Daten angeschlossen werden.

Die Daten werden dann regelmäßig aktualisiert, um aktuelle Informationen bereitzustellen. Alle Warnungen, die durch Überschreiten des Temperatur- oder Feuchtigkeitsgrenzwerts ausgelöst werden, werden über einen Websocket an den Client weitergeleitet, um ein nahezu sofortiges Update zu ermöglichen. Wir haben diese Funktion mit Amazon SNS erweitert, um auch SMS- und E-Mail-Benachrichtigungen anzubieten.

Alle Aktionen werden protokolliert und in einer Zeitleiste dargestellt, die die wichtigsten Ereignisse während der Fahrt des LKWs zeigt, von Warnmeldungen über das Verriegeln bis hin zum Entriegeln der Türen. Alle Sensordaten werden außerdem in einer Detailansicht dargestellt.

 

Das letzte Puzzleteil ist die mobile Anwendung für Außendienstmitarbeiter. Für diese Demo haben wir uns für eine responsive Webanwendung statt einer nativen mobilen Anwendung entschieden, sodass ein Großteil des Designs zwischen dem Backoffice-System und der mobilen Version wiederverwendbar war.

    

Als letztes mussten das Inspektionsformular und die Rekognition-API implementiert werden. Das Formular ist recht einfach: ein Bild der Ware, das Ankunftsdatum und eine Einschätzung ihres Zustands. Sobald das Bild aufgenommen ist, wird es an die Rekognition-API übermittelt, die wir darauf trainiert haben, anhand einer großen Bildauswahl gute und schlechte Äpfel zu erkennen. Sie gibt eine Qualitätseinschätzung zurück, ob die Ware gut oder schlecht ist und wie zuversichtlich sie hinsichtlich des Ergebnisses ist.

Integration Mendix mit AWS Rekognition

Es ist einfach zu integrieren Mendix mit AWS Rekognition. AWS bietet oft mehrere Möglichkeiten zur Integration in ihre Plattform. Sie können entweder das SDK in der Sprache Ihrer Wahl verwenden oder die zugrunde liegende API nutzen. Mit Mendix Wir hatten zwei Möglichkeiten: entweder das AWS Java SDK zu verwenden oder die APIs über das Mendix REST Microflow-Aktionen. Wir haben uns für den REST-Weg entschieden, um unsere Java-Abhängigkeiten zu minimieren und so viel native Mendix wie möglich (Mendix Dies ist bei weitem der einfachste und schnellste Weg, da die Integration mit einer REST-API ein unkomplizierter Prozess ist, im Gegensatz zur Integration mit einem SDK, mit dem wir nicht vertraut sind.)

Wir konzentrierten uns zunächst auf die Implementierung der Hauptaktivität, nämlich die Erkennung der benutzerdefinierten Beschriftungen. Mithilfe dieser API konnten wir das Mapping in Mendix: https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DetectCustomLabels.html

Zuerst haben wir ein JSON-Snippet für die Antwort und ein Import-Mapping zur Verarbeitung der Antwort erstellt.

Als nächstes brauchten wir eine Möglichkeit, das Bild in einem „Bytes“-Attribut als Base64-codierte Zeichenfolge an AWS zu senden. Dazu erstellten wir eine Nachrichtendefinition für die Mendix System.Image, das Contents-Attribut ausgewählt und den externen Namen in „Bytes“ geändert.

Anschließend haben wir ein Exportmapping und die obige Nachrichtendefinition verwendet, um das Bild in das richtige JSON-Format zu konvertieren.

Schließlich ist ein Microflow-Aufruf erforderlich, um das Bild an AWS Rekognition zu senden und die vom Machine Learning-Modell erkannten Beschriftungen zurückzugeben. In diesem Microflow-Aufruf haben wir eine Reihe von Parametern, die von AWS Rekognition benötigt werden. Zuerst exportiert der Microflow das Bild in eine JSON-Objektzeichenfolge mit einem Attribut namens „Bytes“. Dies wird dann zusammen mit den anderen Parametern innerhalb der Nutzlast für die REST-Aktion verwendet.

Innerhalb der REST-Aktion definieren wir den Standort mithilfe der im Parameter übergebenen AWS-Region. Fügen Sie HTTP-Header hinzu, die von der API benötigt werden. Fügen Sie die erforderliche Anforderungsnutzlast und die Antwortzuordnung hinzu.

Das letzte Zauberstück, das wir für unseren Demonstrator gebaut haben, ist etwas technischer. unter der Decke. Die AWS-APIs erfordern, dass jeder API-Aufruf mit einem Prozess namens Sig4 signiert wird. Dabei werden AccessKey und SecretKey verwendet, um die HTTP-Anforderung vor dem Senden zu signieren und so sicherzustellen, dass sie authentisch ist. Im After Startup Microflow haben wir eine Java-Aktion hinzugefügt, um alle Aufrufe von AWS Rekognition abzufangen und vor dem Senden die zusätzlichen erforderlichen Sig4-Header hinzuzufügen.

Die gesamte Integration mit AWS Rekognition und dem Sig4 Interceptor wird verfügbar sein auf der Mendix Marketplace in Kürze. Dies vereinfacht die Integration in AWS Rekognition weiter und ermöglicht Ihnen die Verwendung von AWS Rekognition wie im Video gezeigt.

Geschenkpapier it up

Unsere Demoanwendungen zeigen, wie ein Produkt während des Transports von der Quelle zum Geschäft verfolgt und überwacht werden kann. Wir verwendeten AWS IoT Core, um Temperatur, Luftfeuchtigkeit und Standort mit AWS Timestream-Diensten zu überwachen, und analysierten Bilder mit Rekognition. Dann verwendeten wir Mendix um schnell ein reaktionsfähiges Frontend zu erstellen, das eine Verbindung zu diesen Diensten herstellt und die Daten in Echtzeit mehreren Gerätetypen anbietet.

Wenn Sie mehr darüber erfahren möchten, wie Sie Mendix und AWS, registrieren Sie sich für unser Webinar am 30. Juni, in dem wir die Möglichkeiten der Mendix Plattform, die von AWS-Diensten unterstützt wird. Wir haben eine Demo vorbereitet, in der Sie sehen, wie eine intelligente App erstellt wird, um die Logistik für den Transport verderblicher Waren zu verbessern. Hier anmelden!

Wählen Sie Ihre Sprache