Sonstiges

Einbinden anderer Zustände

se_use (optional): Einbinden einer weiteren Zustandskonfiguration

se_use: <Zustandsitem> # z.B. stateengine_defaults.state_suspend.rules.suspend

Seit Version 1.8 wird se_use gleich behandelt wie andere Plugin spezifische Attribute mit Wertzuweisung. Dadurch ist es nicht nur möglich, eine Liste von einzubindenden Zuständen zu deklarieren, sondern auch auf die verschiedenen Schlüsselwörter zurückzugreifen:

  • item:<Itempfad> liest den Wert aus gegebenem Item aus und nutzt diesen als Zustandserweiterung

  • eval:<Ausdruck> ermöglicht das dynamische Erweitern des Zustands, z.B. abhängig von einem vorigen Zustand, etc.

  • value:<Itempfad> sucht das angegebene Item und bindet dieses ein. Der Wert kann auch als relativer Pfad angegeben werden. Hierbei ist zu beachten, dass die relative Adressierung vom StateEngine Item selbst aus, also vom rules-Item gesucht wird! Daher reicht in der Regel ein einzelner Punkt vor dem Namen des Zustands.

  • struct:<structname> ermögicht den Zugriff auf Structs, die entweder selbst oder durch irgendein Plugin bereit gestellt werden

Beinhaltet ein verknüpfter State ebenfalls ein se_use Attribut, werden auch die weiteren Zustände mit eingebunden. Je „tiefer“ eine Deklaration steckt, desto geringer ist ihre Priorität. Heißt, etwaige Zustandseinstellungen im eigentlichen Item erweitern und überschreiben Einstellungen, die mit se_use eingebunden wurden.

Weitere Details sind unter Zustand-Templates zu finden.

Auflösen von Zuständen

se_releasedby (optional): Definieren von Zuständen, die den aktuellen Zustand auflösen können, auch wenn sie untergeordnet sind

Das Attribut ermöglicht es, andere untergeordnete Zustände zu definieren, die den Zustand auflösen, sobald jene eingenommen werden könnten. Im Normalfall bleibt dennoch der übergeordnete Zustand aktiv, bis die Bedingungen nicht mehr wahr sind. Gewünscht wird dies normalerweise beim Suspendzustand, allerdings kann das Attribut bei jedem beliebigem Zustand genutzt werden.

Ein Zustand mit diesem Attribut wird aufgelöst, also (vorerst) nicht mehr eingenommen, sobald ein mit dem Attribut angegebener Zustand eingenommen werden könnte. Befindet sich in der Hierarchie noch ein weiterer Zustand, dessen Bedingungen erfüllt werden, wird eben dieser Zustand eingenommen - auch wenn er den ursprünglichen Zustand nicht aufgelöst hat.

Bei einer relativen Angabe eines Zustands/Items ist darauf zu achten, dass hier nicht relativ vom rules Item aus gesucht wird (wie sonst üblich), sondern relativ zum Zustandsitem. Es reicht also ein Punkt vor dem Namen des Zustandes.

Ein Beispiel: Der in der Hierarchie ganz oben (unter lock und release) angesiedelte Suspendmodus hat das Attribut definiert:

struct: stateengine.state_suspend

rules:
  suspend:
    se_releasedby: .Nacht

  Nacht:
    enter:
      <Bedingungen>

Angenommen, aktuell ist der Zustand „Nacht“ aktiv. Es wird nun ein Schalter betätigt, der den übergeordneten Suspendzustand aktiviert. Die Stateengine wechselt nun in den Suspendmodus.

Und bleibt auch dort, selbst wenn es noch Nacht ist. Werden beim nächsten Check die Bedingungen für den Nachzustand nicht mehr erfüllt, passiert nach wie vor nichts, da ja der Suspendzustand ohnehin übergeordnet ist.

Sind bei einem späteren Check der Zustände allerdings die Bedingungen aus einem Bedingungsset für „Nacht“ alle wahr, wird der Suspendmodus deaktiviert und der nächste mögliche Zustand in der Hierarchie wird eingenommen. Im obigen Beispiel wäre das der Nacht-Zustand.

Um die Abfolge der Zustände bzw. interne Informationen zur Funktionsweise des Release-Features auch nach einem Neustart zur Verfügung zu haben, sind zwei zusätzliche Items notwendig. Diese sind bereits in der struct Vorlage stateengine.general vorhanden.

Zustandsnamen

name (optional): Name des Zustands

Der Name des Zustands wird im Protokoll sowie als Wert für das über se_laststate_item_name angegebene Item verwendet. Wenn kein Name angegeben ist, wird hier die Id des Zustands-Items verwendet.

se_name: Überschreiben des Namens des Zustands

Über das Attribut se_name kann der im Attribut name angegebene Wert überschrieben werden, beispielsweise mittels eval:sh.eine_funktion(). Dies kann beispielsweise nützlich sein, um den Namen abhängig von einer Bedingungsgruppe zu ändern. Ist also z.B. der Zustand auf Grund der Temperatur eingenommen worden, könnte der Name auf „Zustand (Temp)“ geändert werden. Ist der Zustand aufgrund der Helligkeitsbedingung aktiv, könnte der Name auf „Zustand (Hell)“ geändert werden.

CLI

Im CLI Plugin können folgende zwei Befehle zu Debuggingzwecken eingesetzt werden:

se_list Zeigt eine Liste der Regelwerk-Items, für die das stateengine-Plugin aktiv ist

se_detail <Id eines Regelwerk-Items> Zeigt Details zum Objekt Item