Zugriff auf die Werte von Items

Das Lesen eines Itemwertes und das Zuweisen/Schreiben eines Item Wertes werden im folgenden beschrieben.


Lesen einer Item Wertes

Der Syntax um den Wert eines Items in Logiken oder in eval-Ausdrücken zu lesen, ist folgender:

myvar = sh.<Pfad des Items>()

Pfad des Items beschreibt den vollständigen Pfad eines Items. Wenn ein Item vom Typ String folgendermaßen konfiguriert ist:

Oma:
    Papa:
        Kind:
            type: str

ist für das Item Kind der Pfad Oma.Papa.Kind. Auf den Wert kann folglich über sh.Oma.Papa.Kind() zugegriffen werden.

Wenn ein Item einen komplexen Datentyp (type: list oder type: dict) hat, ist außer dem Zugriff auf den gesamten Item Wert (also die komplette Liste oder das komplette dict) auch der Zugriff auf einzelne Elemente dieser Item Werte möglich.


Zugriff auf ein Listen-Element neu

Wenn ein Item als Liste konfiguriert ist, kann auf die einzelnen Elemente der Liste über ihre Position zugegriffen werden, wobei 0 die erste Position kennzeichnet. Um z.B. auf das dritte Element einer Liste zuzugreifen, ist der Syntax folgender:

myvar = sh.Oma.Papa.Kind(index=2)

Es ist auch möglich, auf die Liste vom Ende her zu zugreifen, wobei -1 das letze Element der Liste bezeichnet, -2 das vorletzte Element usw.


Zugriff auf ein Dict-Element neu

Wenn ein Item als Dict konfiguriert ist, kann auf die einzelnen Elemente des Dicts über ihren Key zugegriffen werden. Um z.B. auf das Element mit dem Key meinWert eines Dicts zuzugreifen, ist der Syntax folgender:

myvar = sh.Oma.Papa.Kind(key='myKey')

Schreiben eines Item Wertes

Der Syntax um den Wert (value) eines Items in Logiken oder in eval-Ausdrücken zu setzen, ist folgender:

sh.<Pfad des Items>(<value>)

Pfad des Items beschreibt den vollständigen Pfad eines Items. Wenn ein Item vom Typ String folgendermaßen konfiguriert ist:

Oma:
    Papa:
        Kind:
            type: str

ist für das Item Kind der Pfad Oma.Papa.Kind. Den Wert kann folglich über sh.Oma.Papa.Kind(<value>) gesetzt werden.


Wenn ein Item einen komplexen Datentyp (type: list oder type: dict) hat, ist außer dem Setzen des gesamten Item Wertes (also die komplette Liste oder das komplette dict) auch das Setzen einzelner Elemente dieser Item Werte durch Angabe eines weiteren Parameters möglich. Wichtig ist, dass der zu setzende Wert der erste Parameter ist. Alle weiteren (namentlich benannten) Parameter dürfen erst danach folgen.


Schreiben eines Listen-Elements neu

Wenn ein Item als Liste konfiguriert ist, kann auf die einzelnen Elemente der Liste über ihre Position zugegriffen werden, wobei 0 die erste Position kennzeichnet. Um z.B. das dritte Element einer Liste zu setzen, ist der Syntax folgender:

sh.Oma.Papa.Kind(<value>, index=2)

Es ist auch möglich, auf die Liste vom Ende her zu zugreifen, wobei -1 das letze Element der Liste bezeichnet, -2 das vorletzte Element usw.

Wenn eine Liste vergrößert werden soll, so gibt es die Möglichkeit das neue Item am Anfang oder am Ende der Liste anzufügen.

Um einen Wert am Ende der Liste anzufügen, ist als index der String ‚append‘ anzugeben.

sh.Oma.Papa.Kind(<value>, index='append')

Um einen Wert am Anfang der Liste einzufügen, ist als index der String ‚prepend‘ anzugeben.

sh.Oma.Papa.Kind(<value>, index='prepend')

Schreiben eines Dict-Elements neu

Wenn ein Item als Dict konfiguriert ist, kann auf die einzelnen Elemente des Dicts über ihren Key zugegriffen werden. Um z.B. auf das Element mit dem Key myKey eines Dicts zu setzen, ist der Syntax folgender:

sh.Oma.Papa.Kind(<value>, key='myKey')

Falls der Key im dict noch nicht existiert, wird ein neuer Eintrag hinzugefügt.


Weitere Parameter Item Zugriff

Außer den oben beschriebenen Parametern (value, index und key), gibt es noch weitere Parameter.

Der ineressanteste unter ihnen ist der Parameter caller. Mit ihm wird beeinflusst, was bei einer Zuweisung zu einem Item als Update durch und Änderung durch zum Beispiel in der Admin GUI zu einem Item angezeigt wird.

sh.Oma.Papa.Kind(<value>, caller='Meine eigene Logik')

Damit wird der standardmäßige Eintrag von Update durch und Änderung durch durch den gewählten Eintrag ersetzt.

Ein weiterer Parameter ist source. Dieser wird im allgemeinen in Gateway Plugins genutzt, um zu kennzeichnen von welchem externen Device ein Itemwert verändert wurde.

Plugins setzen einen Item Wert normalerweise so:

sh.Oma.Papa.Kind(<value>, caller=<Plugin Name>)

Damit wird der Plugin Name in der Admin GUI in den Feldern Update durch und Änderung durch angezeigt.

Bei einem Gateway Plugin, bei dem das Plugin mehrere externe Geräte unterstützt, wird der Wert des Items folgendermaßen gesetzt:

sh.Oma.Papa.Kind(<value>, caller=<Plugin Name>, source=<Device ID>)

Dadurch wird in der Admin GUI in den Feldern Update durch und Änderung durch <Plugin Name>:<Device ID> angezeigt.