Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

...

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 Objekt verknüpfen kann.

Dies kann mehrmals Für die selbe JSON Struktur können mehrere Eintragungen angelegt werden. Auf diese Weise können die Positionen mehrerer spezifischen Werte in einer JSON Dateistruktur definiert und mit jeweils einem Objekt verknüpft werden.

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 bei “gemeinsamen Trigger” werden alle Transaktionen ausgeführt, eine zusammenhängende JSON Datenstruktur erzeugt und diese gesendet)

Info

JSON Arrays als Startelemente bei der Abfrage
Bis Softwareversion Firmware V 4.0 Insider 5 werden nur Objekte als Startelemente unterstützt. Ab dieser Version kann IP 5 wurden als Startobjekte in der JSON Struktur nur einzelne Objekte unterstützt.

Ab Firmware V 4.0 IP 5 darf ein Selektor auch mit [ beginnen. Die eckigen Klammern können eine Zahl für den Array Index oder für einen Filter (siehe unten) enthalten.

Senden von JSON Arrays
Bis Softwareversion Firmware V 4.0 Insider IP 5 können Selektoren, die ein Array erzeugen, nicht zum Erzeugen eines einer JSON Struktur beim Senden von Daten genutzt werden. Ab Firmware V 4.0 IP 5 ist dies nun möglich.

Übersicht

Inhalt
minLevel1
maxLevel6
outlinefalse
typelist
printablefalse

...

In diesem Beispiel befinden sich alle Werte auf einer Ebene und das die JSON Datenstruktur besteht nur aus einem Objekt, welches durch { } gekennzeichnet ist.

...

Status
colourGreen
titleBeispiel
Möchte man auf den Helligkeitswert, der in der im oben dargestellten JSON Datenstruktur mit dem Schlüssel brightness definiert ist, zugreifen, muss lediglich brightness im Feld Selektor eingetragen werden.

Status
colourPurple
titleNEU (IP4 V4)
Beinhaltet der Schlüssel andere Zeichen als Buchstaben, Zahlen, Unterstrich und Minus-Zeichen (z.B. einen Doppelpunkt), dann muss ist der Schlüssel in Anführungszeichen in das Feld Selektor eingetragen werdeneinzutragen. Beispiel: "test: 3"

Selektor bei verschachtelten Datenstrukturen

Hier soll beispielhaft auf das erste Ereignis zugriffen werden.

...

Status
colourGreen
titleBeispiel
In params befindet sich das Objekt

  • 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 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
colourGreen
titleBeispiel
In diesem dieser JSON hat sich ein Event vom Typ input vor das sys Event gedrängt, welches wir auswerten wollenDatenstruktur befindet sich ein Array mit zwei Elementen. Insofern die Reihenfolge der Elemente nicht sicher ist, kann man anhand der Werte der enthaltenen Elemente eine Selektierung angeben. Hier wollen wir dasjenige Element 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
languagejson
{
  "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.