...
Dieser Selektor dient dazu, einen spezifischen Wert, der in einem verschachtelten JSON enthalten ist, entsprechend der Position in der Datenstruktur zu selektieren (= adressieren), damit der Timberwolf Server diesen Wert mit einem einzelnen TWS Objekt verknüpfen kann.
Dies kann mehrmals Für die selbe JSON Datenstruktur können mehrere Eintragungen (= Transaktionen) angelegt werden. Auf diese Weise können die Positionen mehrerer spezifischen Werte spezifischer Elemente in einer JSON Dateistruktur definiert und mit jeweils einem TWS Objekt verknüpft werden.
Info |
---|
Hinweis zu TWS-Objekt und JSON-Objekt JSON Datenstrukturen ermöglichen verschachtelte Dateninhalte. Diejenige Struktur, die in geschweiften Klammern {} eingeschlossen ist, wird in der JSON Syntax als ‘Objekt’ bezeichnet. Der Inhalt eines solchen JSON Objektes wird als Liste von ‘Eigenschaften’ bezeichnet. Bitte verwechseln Sie die JSON-Objekte nicht mit dem Objekten des Timberwolf Servers in der folgenden Beschreibung. |
Senderichtung beachten: Bitte beachten Sie, dass Selektoren sowohl in eingehender als auch in ausgehender Richtung (von / zum externen Gerät) genutzt werden können.
Das bedeutet bei ausgehender Richtung, dass aus den Objektverknüpfungen und den angegebenen Selektoren eine JSON-Dateistruktur erzeugt wird, die an das entfernte Gerät gesandt wird. Beachten Sie hierzu unbedingt die entsprechenden Einstellungen für den Trigger (mit gemeinsamen Trigger wird immer die ganze Datenstruktur als JSON erzeugt und zusammen gesendet) Auslöser. Bei “gemeinsamen Auslöser” werden alle Transaktionen zusammen ausgeführt, damit eine zusammenhängende JSON Datenstruktur erzeugt und diese komplett an das entfernte Gerät gesendet. Info
Info |
---|
NEU! Unterstützung für JSON Arrays als Startelemente bei der Abfrage |
...
Firmware V 4.0 |
...
IP 5 wurden als Startobjekte in der JSON Struktur nur einzelne Objekte unterstützt. |
...
Firmware V 4.0 |
...
IP 5 können Selektoren, die ein Array erzeugen, nicht zum Erzeugen |
...
einer JSON Struktur beim Senden von Daten genutzt werden. Ab Firmware V 4.0 IP 5 ist dies nun möglich. |
Übersicht
Inhalt | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
...
In diesem Beispiel befinden sich alle Eigenschaften (Elemente in dem JSON Objekt als Schlüssel-Werte Paare) auf einer Ebene und das diese JSON Datenstruktur besteht nur aus einem JSON Objekt, welches durch { } gekennzeichnet ist.
...
Status | ||||
---|---|---|---|---|
|
brightness
im Feld Selektor eingetragen werden.Status | ||||
---|---|---|---|---|
|
"test: 3"
Selektor bei verschachtelten Datenstrukturen
Hier soll beispielhaft auf das erste Ereignis (der Wert ‘sleep’ mit dem Schlüssel event
aus dem ersten Element in dem Array events
) zugriffen werden.
Codeblock | ||
---|---|---|
| ||
{ "src": "shellyplusht-c049ef8ad9c8", "dst": "shellyplusht-c049ef8ad9c8/events", "method": "NotifyEvent", "params": { "ts": 1677071174.05, "events": [ { "component": "sys", "event": "sleep", "ts": 1677071174.05 } ] } } |
Status | ||||
---|---|---|---|---|
|
Das JSON-Objekt params enthält das JSON-Array events. Mit dem Selektor
params.events
...
können die im Array enthaltenen Objekte angesprochen werden.
Zwischen den Array-Begrenzern [ ] wird eine Liste von
...
Elementen gleichen oder verschiedenen Typs in der JSON Datenstruktur eingeschlossen. Mit
params.events[0]
wird das erste Element
...
aus diesem Array
...
gewählt (im obigen Beispiel gibt es im Array
events
nur ein Element, hier vom Typ Objekt).Um die in dem Element enthaltene Eigenschaft mit dem Schlüssel event auszuwählen, lautet der gesamte Selektor:
params.events[0].event
...
(dieser enthält den Wert sleep als Eigenschaft vom Typ Zeichenkette).
Der damit extrahierte Wert sleep wird vom Timberwolf Server an das TWS-Objekt übergeben und dieses kann nun beliebig verknüpft und in anderen Subsystemen weiterverarbeitet werden, beispielsweise durch eine Logik ausgewertet.
Selektor um ein Array aus einer Auflistung anhand eines Wertes auszuwählen
Im vorigen Beispiel haben wir gesehenist beschrieben, wie ein Element aus einer einem JSON-Array -Liste über den Index (Zahl entsprechend der Position in der Auflistung im Array, beginnend mit 0 beginnend) ausgewählt werden kann. Manchmal Häufig ist die Position von Daten einer Struktur JSON Datenstruktur nicht fest fix und kann sich seitens des fremden Gerätes verändern.
Status | ||||
---|---|---|---|---|
|
In diesem Beispiel wollen wir dasjenige Element aus dem JSON-Array auswählen, das den Wert sys im Schlüssel component enthält.
Codeblock |
---|
{ "src": "shellyplusht-c049ef8ad9c8", "dst": "shellyplusht-c049ef8ad9c8/events", "method": "NotifyEvent", "params": { "ts": 1677071174.05, "events": [ { "component": "input:0", "id": 0, "event": "single_push", "ts": 1631266595.44 }, { "component": "sys", "event": "sleep", "ts": 1677071174.05 } ] } } |
Im Als Selektor ist hierfür nun die Filter-Schreibweise params.events[component="sys"].event
einzutragen, um damit dasjenige Element aus der Auflistung dem Array events auswählen, welches im Schlüssel component einen bestimmten Wert (hier “sys”) gesetzt hat, um dort dann darüber den Wert “sleep” zum mit dem Schlüssel “event” zu selektieren.
...
Über dem Timberwolf Server erfasste oder beispielsweise durch eine Logik weiterverarbeitete Daten können als ein JSON Datenstruktur, welches welche mehrere Werte gleichzeitig beinhalten kann, an ein anderes Gerät gesendet werden. Empfänger können etwa Aktoren, andere SmartHome-Produkte oder Cloud-Dienste sein.
In diesem Beispiel möchten wir ein JSON erzeugenwird eine JSON Datenstruktur erzeugt, welches die aktuelle Leistungsaufnahme darstelltsowie einzelne Stromflüsse enthält. Das Empfängersystem empfangende Gerät erwartet ein JSON Objekt welches einen den Schlüssel consumption
enthält. In consumption
befinden sich der Schlüssel total
welcher auf eine Zahl verweistals Wert enthält. Unter phases
befindet sich ein Array in dem jeder Eintrag jedes Element den Verbrauch Stromfluss pro Außenleister Außenleiter darstellt.
Codeblock | ||
---|---|---|
| ||
{ "consumption": { "total": 343, "phases": [ 38.57, 290.38, 14.29 ] } } |
Es Um die oben dargestellte JSON Datenstruktur zu erzeugen, werden vier Werte benötigt, dazu wurde jeweils eine publizierende Transaktion . Hierzu wurden vier publizierende Transaktionen angelegt. Die Gesamtheit der vier Transaktionen erzeugt, abhängig von den Trigger- Einstellungen für den Auslöser, eine zusammengehörige JSON - Datenstruktur. Um ein komplettes JSON diese zu senden, wurde im Beispiel der Trigger Auslöser nur für die Transaktion Verbrauch gesamt aktiviert und dort dabei festgelegt dass eine Wertänderung dieses Objektes die Werte alle Transaktionen (Applikationenhier im Screenshot “Applikation”) dieses Topics aussendet.
...
Durch die Selektoren consumption.phases[0 ... 2]
wird definiert, dass phases eine Array darstellt und an welchen Index der zugehörige die Elemente mit den Schlüsseln und zugehörigen Werte eingesetzt werden sollsollen.
Wird ein Array Index im Selektor angegeben, bei dem für einen oder mehrere vorherige Indexe kein Wert vorhanden ist, wird für diese leeren Index-Positionen der Wert vom Typ NULL eingefügt. Ein fehlender Wert und damit das automatische Einfügen von NULL-Werten kann aus drei verschiedenen Gründen auftreten:
Es ist keine publizierende Transaktion angelegt, welche den offenen damit nicht definierten Index befüllen würde
Seit dem Start des Subsystems oder dem erstmaligen Anlegen der Transaktion wurde noch kein Wert aus dem Objektsystem gesendet, welcher durch die an diese publizierende Transaktion ausgesendet werden soll, und gesendet, jedoch hat eine andere Transaktion hat das aussenden Aussenden der Werte aller Transaktionen des dieses Topics angefordert.
Der Trigger der von der NULL Aussendung betroffenen Transaktion wurde beschränkt nur bei der Einrichtung auf das Senden für nur bei Aktualisierung dieses Objektwertes beschränkt, damit werden alle anderen Element des Elemente der JSON Datenstruktur ausgelassen.