Daten in niotix empfangen
Daten können in niotix aus unterschiedlichsten Quellen, Übertragungstechnologien und Protokollen empfangen werden (technologieagnostisch). Für die Entgegennahme von Daten werden Konnektoren verwendet, die die spezifischen Aufgaben der jeweiligen Übertragungstechnologie übernehmen. Zudem können Daten, die nicht dem erwarteten Datenformat entsprechen, in einem Konnektor transformiert werden. Alle verfügbaren Konnektoren können hier eingesehen werden: Übersicht der Konnektoren.
Daten an Virtuelle Geräte oder Digiale Zwillinge speichern
Um Daten mit Kontext zu versehen, können sie entweder an ein Virtuelles Gerät (digitales Abbild eines physischen Sensors oder Systems) oder einen Digitalen Zwilling (digitales Abbild eines physischen Objekts) geschrieben werden. Die Messwerte werden in sogenannten Datenpunkten gespeichert, die einen historischen Verlauf der einzelnen Messwerte ermöglichen. Es gibt Unterschiede zwischen Virtuellen Geräten und Digitalen Zwillingen, da Daten von Sensoren häufig mehrere Messwerte in einem Datenpaket enthalten, die zudem komprimiert sind und über einen sensorspezifischen “Parser” entschlüsselt werden müssen. Dieser “Parser” ist Teil der Gerätetreiber in niotix. (Doku Gerätetreiber).
Standard Eingangsdatenformat für das Update von Datenpunkten
Datenpunkte können in niotix direkt über einen identifier oder indirekt über routing adressiert werden. Im Folgenden wird das Standardformat für niotix beschrieben. Falls die Daten nicht im Standardformat ankommen, müssen sie über das Template im Konnektor transformiert werden.
Adressieren von Datenpunktupdates mit Identifier
Bei der direkten Adressierung eines Datenpunktes wird die Kombination aus identifier, variable und data verwendet:
{
"identifier": 42,
"variable": "consumption",
"data": {
"value": 100,
"time": "2025-03-21T09:26:04Z"
}
}
- Mit
identifiermuss passend zu dem im Datenpunkt hinterlegten Datenpunkt sein. Da die Bennung von Variablen häufig mehrfach in einem Account vorkommt, dient dies dazu das korrekte Ziel zu identifizieren. Siehe[1] - Die
variablemuss passend zu der Variable im Datenpunkt sein. Siehe[2] dataenthält die Informationenvalueundtimevalueenthält den Messwert der an den Datenpunkt geschrieben werden solltimeenthält den Zeitstempel der an den Messwert geschrieben werden soll. Ist dieser Parameter nicht gesetzt, so wird die aktuelle Systemzeit verwendet.
Das passende Beispiel für eine Konfiguration eines Datenpunktes:
Adressieren von Datenpunktupdates über Datenrouting
Da eine direkte Verknüpfung eines Datenpunktes zu einem Konnektor und Idenitifier für einige Prozesse, wie zum Beispiel die Wechsel auf einen anderen Konnektor oder das schreiben der Daten Datenpunkte eines anderen Objektes viel Aufwand bedeutet gibt es zusätzlich die Möglichkeit Datenpunkte von Digitalen Zwillingen über routing zu adressieren:
{
"routing": {
"refKey": "42"
},
"variable": "volume",
"data": {
"value": 900,
"time": "2025-03-21T10:45:04Z"
}
}
- Mit
routingkönnen ein oder mehrere Digitale Zwillinge über die Kombination ausReferenz-Id-Schlüssel&Referenz-Id-Wertadressiert werden. Siehe[1] - Die
variablein diesem Fall passend zum Schlüssel des Datenpunktes sein. Siehe[2] dataenthält die Informationenvalueundtimevalueenthält den Messwert der an den Datenpunkt geschrieben werden solltimeenthält den Zeitstempel der an den Messwert geschrieben werden soll. Ist dieser Parameter nicht gesetzt, so wird die aktuelle Systemzeit verwendet.
Referenz-Id-Schlüssel & Referenz-Id-Wert werden im Digitalen Zwilling in den Meta-Informationen hinterlegt:

Im Datenpunkt wird im Feld “Schlüssel” die Variable hinterlegt:
Adressieren von Daten für Virtuelle Geräte
Da Datenpakete für Virtuelle Geräte häufig mehrere und komprimierte Messwerte enthalten, besteht hier die Möglichkeit diese über einen Gerätetreiber zu parsen. In diesem Fall wird das Datenpaket an das Virtuelle Gerät mit der Externen Id gesendet, welches zu dem im Konnektor definierten identifier passt. Der am Virtuellen gerät hinterlegte Gerätetreiber definiert dann wie die Daten entschlüsselt und in Zielvariablen aufgeteilt werden soll. Dadurch wird in diesem Fall keine variable benötigt, da diese intern vom Gerätetreiber erzeugt wird. Die erzeugten Zielvariablen werden automatisiert im Virtuellen Gerät als Datenpunkt angelegt und beim erhalt eines neuen Datenpaketes nach dem Durchlaufen des Gerätetreibers aktualisiert.
Datenstruktur für komprimierte Daten (HEX)
{
"identifier":"vd-pass-through",
"data":{
"value":{
"payload": "002B406EA710",
"port": 42
},
"time": "2025-03-21T10:30:46.157Z"
}
}
- Mit
identifierwird das gewünschte Virtuelle Gerät adressiert. DieExterne Iddes Virtuellen Gerätes muss entsprechend übereinstimmen. dataenthält die Informationenvalueundtimevalueenthält die Informationenpayloadundport:payloadenthält den HEX dekodierten Payload der die Messwerte enthältportkann optional übertragen werden, wenn Payload z.B. abhängig von dem Port unterschiedlich dekodiert werden soll.
timeenthält den Zeitstempel der an den Messwert geschrieben werden soll. Ist dieser Parameter nicht gesetzt, so wird die aktuelle Systemzeit verwendet.
Datenstruktur für Klardaten (JSON)
{
"identifier":"vd-pass-through-json",
"data":{
"value":{
"payload": {
"key1": 23,
"key2": "value2"
},
"port": 42
},
"time": "2025-03-21T13:12:01.157Z"
}
}
- Mit
identifierwird das gewünschte Virtuelle Gerät adressiert. DieExterne Iddes Virtuellen Gerätes muss entsprechend übereinstimmen. dataenthält die Informationenvalueundtimevalueenthält die Informationenpayloadundport:payloadenthält die Schlüssel-Wert-Paare.portkann optional übertragen werden, wenn Payload z.B. abhängig von dem Port unterschiedlich dekodiert werden soll.
timeenthält den Zeitstempel der an den Messwert geschrieben werden soll. Ist dieser Parameter nicht gesetzt, so wird die aktuelle Systemzeit verwendet.
Mehrere Datenpakete mit einem Request übertragen
Sollen mehrere Datenpakete mit einem Request übertragen werden, so sind diese als Array zu übertragen, z.B.:
[
{
"routing": {
"refKey": "42"
},
"variable": "volume",
"data": {
"value": 900,
"time": "2025-03-21T10:45:04Z"
}
},
{
"routing": {
"refKey": "42"
},
"variable": "energy",
"data": {
"value": 100,
"time": "2025-03-21T10:45:04Z"
}
}
]