Dekodierer für MQTT-Geräteprofile
Bei MQTT-Geräteprofilen akzeptiert die Funktion decode
den folgenden Parameter:
function decode(message, topic) {
var decoded = {
serialNumber: null,
objects: []
};
// Place your code here and push the results to 'decoded.objects'.
return decoded;
}
message
enthält die MQTT-Nachricht als Zeichenfolge. Sie müssen den Wert korrekt parsen, um die benötigten Informationen herauszulesen.
topic
enthält das Topic der MQTT-Nachricht.
Bitte beachten Sie, dass die Nachricht Daten in verschiedenen Formaten enthalten kann, beispielsweise als Klartext, JSON oder Binärdaten. XML-Daten werden automatisch in JSON umgewandelt, bevor sie an den Dekodierer übergeben werden.
Sie können JSON.parse() verwenden, um JSON-Daten zu parsen:
function decode(message, topic) {
var data = JSON.decode(message);
var decoded = {
serialNumber: null,
objects: []
};
// Place your code here and push the results to 'decoded.objects'.
return decoded;
}
Die Funktion decode
muss ein Objekt mit einem objects
-Array sowie einer optionalen Seriennummer zurückgeben:
{
serialNumber: null,
objects: [{
key: "data-point-key-abc",
value: 23.5,
datetime: '2025-05-21T06:21:16.138Z',
}, {
key: "data-point-key-xyz",
value: 21.8,
datetime: '2025-05-21T06:21:16.138Z',
}]
}
- serialNumber
Wenn das Gerät seine eigene Seriennummer sendet, können Sie diese Eigenschaft übergeben, um automatisch die Seriennummer des Geräts in der Datenbank zu aktualisieren. Setzen Sie die Eigenschaft auf
null
, wenn Sie die Seriennummer nicht aktualisieren möchten.- objects
Ein Array von Objekten mit den folgenden Eigenschaften:
- key
Der Schlüssel des entsprechenden Datenpunkts, wie er oben in der Tabelle Datenpunkte in der Spalte Schlüssel definiert wurde.
- datetime
Datum und Uhrzeit des Messwerts. Muss eine Zeichenfolge gemäß ISO 8601 (Date.prototype.toISOString()) sein. Kann entweder auf
new Date().toISOString()
gesetzt oder aus der Nachricht geparst werden.- value
Der effektiv aufgezeichnete Messwert als Ganzzahl, Fließkommazahl oder Wahrheitswert.
Nutzlast testen
Um den Dekodieralgorithmus zu testen, geben Sie die erwartete Nutzlast im Feld Payload und, falls vorhanden, das Topic im Feld Topic ein und klicken Sie anschließend auf die Schaltfläche Test.
Wenn Sie Klartext, JSON- oder Binärdaten eingeben, werden diese direkt an die decode
-Funktion übergeben, und das Ergebnis wird im Feld Resultat angezeigt.
Wenn Sie XML-Daten eingeben, werden diese automatisch in JSON umgewandelt. Die JSON-Daten werden im Feld JSON angezeigt und an die decode
-Funktion übergeben. Das Ergebnis wird im Feld Resultat angezeigt.
Wenn Fehler in der Nutzlast oder in der Dekodierfunktion auftreten, werden diese ebenfalls im Feld Resultat angezeigt.
Vollständiges Beispiel
function decode(message, topic) {
// Decode a JSON string to an object.
var data = JSON.parse(message);
var now = new Date().toISOString();
var measurements = [];
// Helper function to generate a measurement object.
// Change the properties on `item` according to your message format.
function createMeasurement(item) {
return {
key: item.key,
datetime: item.datetime || now,
value: item.value
};
}
// Add the decoded values to the objects array.
// Example:
// Convert a single item from the JSON object to a measurement object,
// assuming the item is stored in data.items[0].
measurements.push(createMeasurement(data.items[0]));
// Convert all items from the JSON object to measurement objects,
// assuming the items are stored in data.items.
data.items.forEach(function(item) {
measurements.push(createMeasurement(item));
});
// Create a measurement object manually.
measurements.push({key: 'key_1', datetime: now, value: data.key_1.value});
return {
serialNumber: data.serialNumber
objects: measurements;
};
}