Regelwerk-Item
Unter jedem Item, für das eine State Machine angelegt werden soll, muss ein „Regelwerk-Item“ erstellt werden.
Es wird empfohlen, dieses mit dem Namen rules
als Child-Item unter das Item, das automatisiert werden soll, zu legen.
Dieses Item benötigt einige vorgegebene Definitionen, die am einfachsten über das struct
Attribut
eingebunden werden. Das Item sieht dann folgendermaßen aus:
#items/item.yaml
raffstore1:
automatik:
struct: stateengine.general
rules:
cycle: 60
Bei jedem Aufruf des Regelwerk-Items - im Beispiel auf Grund der cycle Angabe also alle 60 Sekunden - werden die Zustände hierarchisch evaluiert. Zuerst wird also der erste Status getestet. Kann dieser nicht aktiviert werden, folgt der darunter angegebene, etc. Details hierzu finden sich im nächsten Teil der Dokumentation.
Möchte man die Evaluierung eines Items deaktivieren, ist unter rules
das Attribute se_plugin
auf inactive zu setzen:
#items/item.yaml
raffstore1:
automatik:
struct: stateengine.general
rules:
se_plugin: inactive
Item-Definitionen
Bedingungen und Aktionen beziehen sich überlicherweise auf Items wie beispielsweise
die Höhe einer Jalousie oder die Außenhelligkeit.
Diese Items müssen auf Ebene des Regelwerk-Items über das Attribut
se_item_<Bedingungsname/Aktionsname>
bekannt gemacht werden.
Anstatt direkt das Item in Form des absoluten oder relativen Pfades mittels se_item_
zu
setzen, kann auch die Angabe se_eval_
genutzt werden. In diesem Fall wird eine beliebige
Funktion anstelle des Itemnamen angegeben. Dies ist sowohl für Bedingungsabfragen,
als auch für das Setzen von „dynamischen“ Items möglich.
An dieser Stelle ist es auch möglich, über se_mindelta_
zu definieren, um welchen Wert
sich ein Item mindestens geändert haben muss, um neu gesetzt zu werden. Siehe auch Aktionen.
Außerdem ist es möglich, über se_repeat_actions
generell zu definieren,
ob Aktionen für die Stateengine wiederholt ausgeführt werden sollen oder nicht. Diese Konfiguration
kann für einzelne Aktionen individuell über die Angabe repeat
überschrieben werden. Siehe auch Aktionen.
Beispiel se_item
Im Beispiel wird durch se_item_height
das Item beispiel.raffstore1.hoehe
dem Plugin unter dem Namen „height“ bekannt gemacht. Das Item beispiel.wetterstation.helligkeit
wird durch se_item_brightness
als „brightness“ referenziert.
Auf diese Namen beziehen sich nun in weiterer Folge Bedingungen und Aktionen. Im Beispiel
wird im Zustand Nacht das Item beispiel.raffstore1.hoehe
auf den Wert 100 gesetzt, sobald
beispiel.wetterstation.helligkeit
den Wert 25 übersteigt. Erklärungen zu Bedingungen
und Aktionen folgen auf den nächsten Seiten.
#items/item.yaml
raffstore1:
automatik:
struct: stateengine.general
rules:
se_log_level: 2
se_item_height: beispiel.raffstore1.hoehe
se_item_brightness: beispiel.wetterstation.helligkeit
Nacht:
name: Nacht
on_enter_or_stay:
se_action_height:
- 'function: set'
- 'to: 100'
enter_toodark:
se_max_brightness: 25
Beispiel se_eval
se_eval ist für Sonderfälle und etwas komplexere Konfiurationen sinnvoll, kann aber im ersten Durchlauf ignoriert werden. Es wird daher empfohlen, als Beginner dieses Beispiel einfach zu überspringen ;)
Im Beispiel wird durch se_eval_brightness
das Item für den Check von
Bedingungen bekannt gemacht. Aufgrund der angegebenen Funktion wird das Item
abhängig vom aktuellen Zustandsnamen eruiert. Da Zustand_Eins den Namen „sueden“
hat, wird somit auch der Wert von wetterstation.helligkeit_sueden abgefragt.
Würde der Zustand „osten“ heißen, würde der Helligkeitswert vom Osten getestet werden.
#items/item.yaml
wetterstation:
helligkeit_sueden:
type: num
knx_cache: 1/1/1
knx_dpt: 5
helligkeit_osten:
type: num
knx_cache: 1/1/2
knx_dpt: 5
raffstore1:
automatik:
struct: stateengine.general
rules:
se_eval_brightness: se_eval.get_relative_itemvalue('wetterstation.helligkeit_{}'.format(se_eval.get_variable('current.state_name')))
Zustand_Eins:
name: sueden
enter:
se_max_brightness: 5000