3D-Ansicht des Motorwürfels unseres Teststands

Objectif de l'installation


Im Rahmen der Implementierung eines Sicherheitssystems für unsere Testbank haben wir uns entschieden, einen LoRaWan-Sensor (siehe unten) zu verwenden, um das Öffnen des Deckels unseres Testwürfels zu erkennen. Daneben ein Schema, das das erwartete Verhalten des Systems veranschaulicht.

Zusammenfassend ist unser Ziel, jedes Mal benachrichtigt zu werden, wenn der Deckel geöffnet wird, und eine Warnung zu erhalten, wenn der Deckel während des Betriebs des Motors offen bleibt. 

Diese Warnung wird durch ein akustisches Signal, den Versand einer E-Mail und die Anzeige eines Indikators auf einem Dashboard generiert. Der Sensor kommuniziert über das LoRaWAN-Protokoll mit unserem WISE-6610-Gateway.
Schema des Sicherheitsprozesssystems, das wir implementieren

Verwendeter Sensor: Dragino DS03 (LoRaWan)

Der DS03A ist ein LoRaWAN-Sensor, der entwickelt wurde, um das Öffnen und Schließen von Türen zu überwachen. Er überträgt wichtige Informationen wie den Zustand der Tür (offen oder geschlossen), die Dauer des Öffnens sowie die Anzahl der Öffnungen, und zwar über das LoRaWAN-Protokoll. Wir möchten ihn auf unserem Teststand installieren, um das Öffnen des Motorwürfels zu erkennen.

Sensorverbindung mit dem LoRaWan-Gateway


Das Pairing-Verfahren variiert je nach verwendeter LoRaWAN-Gateway. In diesem Fall verwenden wir das Gateway Advantech WISE-6610 V1. Dieser Pairing-Schritt ermöglicht es dem Gateway, eine Kommunikation mit dem Sensor DS03 herzustellen, sodass es die von diesem gesendeten Nachrichten empfangen, lesen und decodieren kann.
LoRaWan-Gateway Advantech Wise-6610

Wir verwenden hier die Version 1 des WISE-6610-Gateways (bereits auf unserem Prüfstand installiert), die nicht die neueste ist. Obwohl es subtile Unterschiede geben kann, bleibt das Verfahren sowie die allgemeinen Prinzipien für die Version 2 (oder Wise-6610-EB) anwendbar.

Allgemeine Konfiguration des Gateways

In diesem Fall verwenden wir eine weitgehend vorkonfigurierte Gateway. Es bleibt nur noch, unseren Sensor zur Liste der Geräte hinzuzufügen.

Um fortzufahren, ist es notwendig, sich über das lokale Netzwerk mit dem Gateway zu verbinden, um auf das Konfigurationspanel zuzugreifen, indem man einfach die IP-Adresse des Gateways in einem Browser öffnet. Die Standardanmeldeinformationen sind `root` / `root`.

Die Standardanmeldeinformationen des Wise-6610 v2 Gateways sind `admin`/ `admin`.

Sobald Sie verbunden sind, ist es im Menü `User Modules > LoRaWAN Gateway > Network Server > Settings` wichtig zu überprüfen, ob das LoRaWAN-Netzwerk aktiviert ist.
Die Konfiguration des LoRaWAN-Netzwerks kann dann über die dafür vorgesehene Seite angepasst werden, die durch die Verbindung zum Port `1660` des Gateways zugänglich ist (bitte beachten Sie, dass dieser Port änderbar ist).

Der Zugriff auf das LNS der v2 erfolgt über das Menü `LoRaWan > Advantech LoRaWan Service`.
Dashboard des LNS der Wise-6610 v1

Dashboard des LNS der Wise-6610 v1

Dashboard des LNS der Wise-6610 v1

Dashboard des LNS der Wise-6610 v1

Sensor hinzufügen

Unser Sensor funktioniert im OTAA-Aktivierungsmodus. Um ihn hinzuzufügen, öffnen Sie einfach das Menü `Devices > Commissioned`, und klicken Sie dann auf die Schaltfläche `Create`.

In der v2 ist dieses Menü über `Devices > Create Device > Type : OTAA` zugänglich

Zu diesem Zeitpunkt müssen mehrere Felder mit spezifischen Informationen zum Sensor ausgefüllt werden. Diese Daten, die einzigartig für jedes Gerät sind, sind auf dem Etikett des Sensors verfügbar : 
Etikett des LoRaWan DS03A Sensors, der für das Projekt verwendet wird
Sobald die Felder ausgefüllt sind, genügt es, auf die Schaltfläche `Submit` zu klicken, um das Gerät hinzuzufügen.

Nachdem der Sensor eingeschaltet wurde (indem die Taste 3 Sekunden lang gedrückt gehalten wird), sollte er sich automatisch mit dem Gateway verbinden. Seine LED leuchtet zunächst einige Augenblicke grün, wechselt dann zu blau, bevor sie sich ausschaltet.

Um die Verbindung zu überprüfen, genügt es, das Menü `Received Frames` (v1) oder `Frames Traffic` (v2) aufzurufen, wo die vom DS03 gesendeten Frames erscheinen sollten.

Interpretation und Übertragung der Sensordaten


Der DS03-Sensor überträgt seine Daten in Form von hexadezimalen Zeichenfolgen. Um sie verständlich in unserer Software IoTEdge zu speichern, müssen wir sie in ein kompatibles Format umwandeln. IoTEdge akzeptiert Daten im JSON-Format, die über MQTT gesendet werden.

Wir werden daher die Umwandlung der hexadezimalen Daten in ein JSON-Objekt mit klaren und lesbaren Informationen vornehmen. Dazu verwenden wir das Tool Node-RED, das in unserem Gateway enthalten ist.

Einführung in Node-RED

Node-RED ist eine visuelle Programmierumgebung, die für die Sammlung, Transformation und Übertragung von Daten konzipiert wurde. Basierend auf einer JavaScript-Engine besteht seine Benutzeroberfläche aus Flows und anschlussfähigen Blöcken, die es ermöglichen, Operationen durchzuführen, Daten zu senden und zu transformieren sowie diese flexibel zu verarbeiten.

Wir werden häufig den Block `funktion` verwenden, der es ermöglicht, JavaScript-Code direkt in den Node-RED-Flow zu integrieren.

Der Informationsaustausch zwischen den Blöcken erfolgt in Form von JavaScript-Objekten.

Um auf  Node-RED auf dem Gateway zuzugreifen, genügt es, den Port 1880 (standardmäßig) des Gateways über die folgende URL zu erreichen: `http://{IP des Gateways}:1880/#`.
Screenshot der Node-RED-Oberfläche

Screenshot der Node-RED-Oberfläche

Wenn Node-RED noch nicht aktiviert ist, sollten Sie auf die Konfigurationsseite des Gateways zugreifen (`http://{IP des Gateways}`). Wählen Sie im linken Menü dann `Customization > User Modules`.

In der v2 `Application Tools > Node-RED > Settings`.

Sie finden dort einen klickbaren Link mit dem Titel `Node-RED`, der es Ihnen ermöglicht, das Tool zu konfigurieren. Nachdem Sie auf diesen Link geklickt haben, aktivieren Sie das Kontrollkästchen `Enable Automatic Start`, und klicken Sie dann auf `Apply`, um die Konfiguration zu bestätigen.

In der v2 aktivieren Sie `Node-RED control`.

Dekodierung und Versand von Daten über Node-RED

Das Gateway empfängt ein LoRaWAN-Paket und führt eine erste Verarbeitung durch, indem es es in ein JSON-Objekt umwandelt, das das hexadezimale Paket, die Signalqualität, den Zeitstempel und die ID des Sensors enthält. Diese Daten werden dann an einen internen MQTT-Broker gesendet, der sie an unseren Node-RED-Flow weiterleitet. Dieser Prozess findet vollständig intern im Gateway statt.

Der entworfene Node-RED-Flow ist einfach und folgt dem nebenstehenden Plan. Die Idee ist, die Nachricht zu dekodieren und sie dann korrekt zu formatieren, um sie an IoTEdge zu senden.
Beschreibung des Node-RED-Flusses zur Konvertierung und Formatierung der DS03A-Sensordaten
Einige zusätzliche Erläuterungen :

Eingabe : Das für die Eingabe verwendete Topic ist ein Wildcard `uplink/#`, das es ermöglicht, die Daten aller mit dem Gateway verbundenen Sensoren zu empfangen. Wenn man den Datenstrom auf einen einzigen Sensor beschränken möchte, sollte `#` durch die DevAddr-ID des Sensors ersetzt werden.

Konvertierung :  Die Konvertierung entspricht dem Schritt der Übersetzung des hexadezimalen Frames in verwertbare Daten, gemäß der offiziellen Dokumentation des Herstellers. Obwohl ein von Dragino bereitgestelltes Dekodierungsskript online verfügbar ist, erfordert es mehrere Anpassungen, um korrekt zu funktionieren (siehe Anmerkung Nr. 1) und weist eine Inkompatibilität mit dem Gateway 6610-V1 auf (die v2 erfordert ebenfalls Anpassungen).
Wir werden daher ein alternatives Skript verwenden (siehe unten), das speziell entwickelt wurde, um die Kompatibilität mit dem Gateway 6610-V1 sicherzustellen. Es ist einfach erforderlich, dieses Skript in den zweiten Funktionsblock Ihrer Node-RED-Umgebung zu kopieren.

Wrapping : Damit IoTEdge die Daten korrekt akzeptieren und interpretieren kann, müssen diese im folgenden Format strukturiert sein :

{
	"d":[
		{
			"tag":"Something:IoTEdge_Tag",
			"value":value
		},
		{
			"tag":"Something:IoTEdge_Other_Tag",
			"value":other_value
		}
	],
	"ts":"00000000000"
}

Dekodierungsskript für den DS03A auf der Wise-6610

//Dieses Skript unterstützt derzeit keinen Dual-Channel-Modus.
bytes = []

c = 0 
while(c < msg["data"].length) {
    bytes.push(parseInt(msg["data"].substr(c, 2), 16));
    c+=2;
}

result = {}

if(msg.port == 2 || msg.port == 3) {
    //Echtzeit Öffnen/Schließen Status und historisch
    //Zur Vereinfachung nur den ersten Eintrag historischer Ereignisse übersetzen. 
    result["DOOR:COUNT_MODE"] = (bytes[0] & 0x08) ? "RES" : "FAC"; //RES : Seit Reset / FAC : Seit Werkseinstellung 
    result["DOOR:TDC"] = (bytes[0] & 0x04) ? 1 : 0;
    result["DOOR:ALARM"] = (bytes[0] & 0x02) ? 1 : 0;
    result["DOOR:DOOR_OPEN_STATUS"] = (bytes[0] & 0x01) ? 1 : 0;
    result["DOOR:DOOR_OPEN_TIMES"] = bytes[1] << 16 | bytes[2] << 8  | bytes[3];
    result["DOOR:LAST_DOOR_OPEN_DURATION"] = bytes[4] << 16 | bytes[5] << 8 | bytes[6];
}
if(msg.port == 4) {
    //Sensor Konfiguration
    //Nur nach einer Downlink-Nachricht vom Server gesendet 
    result["DOOR:TDC"] = bytes[0] << 16 | bytes[1] << 8 | bytes[2];
    result["DOOR:DISALARM"] = (bytes[3] & 0x1) ? 1:0;
    result["DOOR:KEEP_STATUS1"] = (bytes[4] & 0x1) ? 1:0;
    result["DOOR:KEEP_TIME1"] = bytes[5] << 8 | bytes[6]
    result["DOOR:KEEP_STATUS2"] = (bytes[7] & 0x1) ? 1 : 0;
    result["DOOR:KEEP_TIME2"] = bytes[8] << 8 | bytes[9]
    result["DOOR:ALARM_INTERVAL"] = bytes[10]
}

if(msg.port == 5) {
    //Gerätestatus    
    result["DOOR:SENSOR_MODEL"] = (bytes[0] & 0x1B) ? "DS03A" : "Unbekanntes Gerät";
    result["DOOR:FIRMWARE_VERSION"] = "${bytes[1]}";
    result["DOOR:FREQUENCY_BAND"] = "EU868";
    result["DOOR:SUB_BAND"] = 0x00;
    result["DOOR:BATTERY"] = byte[5] << 8 | byte[6];
}

output = {
    "d":[],
    "ts":"00000000000000000000000"
}

for(k in result) {
    output["d"].push({"tag":k, "value":result[k]})
}

output["raw"] = result

return output
Screenshot des eingerichteten NodeRED-Streams

Ab sofort überträgt das Gateway die Daten des Sensors an IoTEdge, in die Cloud.

Konfiguration der Datenspeicherung in IoTEdge


Die Übertragung der Daten zu IoTEdge erfolgt über das MQTT-Protokoll. Damit IoTEdge diese korrekt interpretieren kann, muss eine Darstellung des Geräts innerhalb der Plattform erstellt werden. Dieses Element ermöglicht es, die empfangenen Daten einem identifizierten Gerät zuzuordnen.

In IoTEdge werden Geräte (devices) als Gruppen von Variablen definiert, die den Zustand eines Sensors darstellen. Jedes Gerät basiert auf einem Gerätemodell – dem Äquivalent eines Sensortyps – und seine spezifische Konfiguration wird als Gerätedetails bezeichnet, die eine konkrete Instanz dieses Modells darstellen.

Wir werden jetzt ein neues Gerätemodell erstellen. Gehen Sie dazu in die IoTEdge-Oberfläche und greifen Sie auf den Abschnitt Device Center > Device Model zu.
Geräteverwaltungsbildschirm im IoTEdge
Klicken Sie dann auf + Hinzufügen, um das Fenster zur Erstellung eines neuen Modells zu öffnen. Es ist dann notwendig, die vom Sensor bereitgestellten Variablen zu definieren, nämlich :

//Die Booleans in IoTEdge werden durch {0, 1} dargestellt, um in Dashboards verwendet werden zu können
bool DOOR_OPEN_STATUS;
bool ALARM;
int LAST_DOOR_OPEN_DURATION; // in Sekunden
int DOOR_OPEN_COUNT;

Das Gerätemodell erscheint nun wie folgt, nachdem die Erstellung abgeschlossen ist.
Zusammenfassung der Erstellung des Gerätemodells DS03A in IoTEdge
Der nächste Schritt besteht darin, ein Gerätedetail aus dem zuvor definierten Modell zu erstellen. Dazu gehen Sie zu `Gerätezentrale > Gerätedetail`, und klicken Sie dann auf + Hinzufügen, um das Erstellungsformular zu öffnen. Geben Sie dann die erforderlichen Informationen ein.
Bildschirm zur Erstellung eines Geräte-Details in IoTEdge

Hinweis : Stellen Sie sicher, dass Sie die Option Link generieren beim Erstellen auswählen. Diese Option ermöglicht es, eindeutige MQTT-IDs für Ihr Gerät zu generieren. Sie verwenden diese dann im LoRaWan-Gateway, um die Sicherheit der Kommunikation mit IoTEdge zu gewährleisten.
Sobald das Geräte-Detail erstellt ist, wird es in der Liste der Geräte angezeigt. Klicken Sie auf den Namen, um auf die detaillierten Einstellungen zuzugreifen.

Notieren Sie sich im Abschnitt Geräteerweiterungskonfiguration die folgenden Informationen, die für die MQTT-Konfiguration erforderlich sind :
  • brokerUsername
  • brokerPassword

Nutzen Sie auch diesen Schritt, um das Feld topic zu definieren, indem Sie das gewünschte MQTT-Topic (z. B. : data ) eingeben.
Konfigurationsbildschirm für die Verbindungseinstellungen zu IoTEdge nach Gerätedetails
Diese Informationen ermöglichen es, die Konfiguration des Node-RED-Flusses des Gateways abzuschließen.

Vorher ist es notwendig, das benutzerdefinierte Konvertierungsskript mit den Geräteeinstellungen zu verknüpfen. Dieses Skript ermöglicht es IoTEdge, das oben definierte JSON-Datenformat in unserem Node-RED-Fluss zu entschlüsseln.

Beginnen Sie damit, die Geräte-ID des Geräts zu kopieren, und gehen Sie dann zum Tab Übersicht. Öffnen Sie die Einstellungen einer der Variablen und ändern Sie im Abschnitt Device Extension Config das Feld Payload Type, indem Sie Custom Script auswählen.
Bildschirm zur Änderung des Payload-Typs in IoTEdge
Weiter unten im Abschnitt Nachrichten-Codec (siehe Abbildung rechts): 
  1. Klicken Sie auf die Schaltfläche Debug bearbeiten (1), um den Skripteditor zu öffnen.
  2. Ersetzen Sie den vorhandenen Inhalt durch Ihr Konvertierungsskript.
  3. Stellen Sie sicher, dass Sie Zeile 9 des Skripts ändern, indem Sie den Standardwert von d_id durch die ID Ihres Geräts (2) ersetzen.
Änderung des Skripts zur Dekodierung der Daten eines Gerätes

Schließlich müssen nur die Identifikatoren des zuvor in den NodeRED-Flow konfigurierten MQTT-Brokers in das Gateway eingegeben werden.

Physikalische Installation des Sensors


Bei den Tests in der Testumgebung wurde der Sensor aktiviert, indem die beiden Magnete direkt bis zum Kontakt zusammengebracht wurden. Im Rahmen der endgültigen Installation werden diese Magnete jedoch nicht in direktem Kontakt stehen. Es ist daher entscheidend, den Abstand zu bestimmen, bei dem der Sensor von einem Zustand in den anderen wechselt.

Manuelle Messungen haben gezeigt, dass der Zustandswechsel bei etwa 3 Zentimetern Abstand zwischen den Magneten erfolgt. Dieser Abstand kann je nach Öffnungsgeschwindigkeit leicht variieren.

Obwohl dieser Parameter in unserem Fall keine Einschränkung darstellt, ist es wichtig, ihn in sensibleren Installationskontexten zu berücksichtigen.
Physische Installation des Sensors auf dem Motorwürfel
Die beiden Magnete des Sensors können im Inneren des Testblocks platziert werden. Es ist jedoch besser, den Sensor außen zu installieren. 

Dazu ist es notwendig, den magnetischen Teil vom Hauptgehäuse zu trennen, ihn im Inneren des Würfels zu befestigen und das Verbindungskabel durch eine in die Wand gebohrte Öffnung zu führen.

Beim Zusammenbauen des Sensors ist es wichtig, die Drähte des Magneten korrekt wieder anzuschließen. Standardmäßig sollte das rote Kabel an den Anschluss 1 und das schwarze Kabel an den Anschluss 9 angeschlossen werden.
Öffnungs-/Schließsensor offen

Der Teil 2 dieses Artikels wird gerade verfasst.