Ankündigung
Einklappen
Keine Ankündigung bisher.
Stateengine Plugin Support
Einklappen
X
-
Ich habe die Version 1.9.2 am Laufen (aktuelle Version aus dem Plugin Github develop).
-
Zieh dir bitte mal die aktuellste Version, das müsste 1.9.2 sein. Da sollte eigentlich sowas stehen in der Visu:
set screens.westen_s3.automatik.suspend_end.date_time to 2022-06-07 22:21:42.047297+02:00
Es wird also nicht direkt suspend_end aktualisert. Keine Ahnung, was da bei der älteren Version faul war, ist mir nie aufgefallen.
Einen Kommentar schreiben:
-
Ich benutze bewusst das Test-Item und nicht die komplexere Version mit dem Struct:
In smarthome-details.log sehe ich nur diese Zeilen mit Bezug zur Stateengine:Code:Storen: Trigger: type: bool name: Gemeinsamer Trigger für alle Storen enforce_updates: yes cycle: 60 = 1 # Ausloesung Trigger jede Minute TestY: AufAb: type: bool enforce_updates: on visu_acl: rw value: false cache: true Position: type: num visu_acl: rw Automatik: struct: - stateengine.general - stateengine.state_lock - stateengine.state_suspend - stateengine.state_release manuell: eval_trigger: - ...AufAb rules: se_plugin: active eval_trigger: - Storen.Trigger - ..manuell - ..lock - ..suspend se_log_level: 2 se_item_position: ...Position Default: type: foo name: Test Default se_action_position: - 'function: set' - 'to: 0' enter: type: foo
Im angehängten ZIP ist die Datei "2022-06-07-Storen_TestY_Automatik_rules.log" zu finden. Um 07:04:39 wird der Trigger "Storen.TestY.Automatik.manuell" erkannt und verarbeitet.Code:2022-06-07 07:04:16 INFO plugins.stateengine Init StateEngine (log_level=0, log_directory=var/log/stateengine/) 2022-06-07 07:04:16 INFO plugins.stateengine StateEngine default suntracking offset = 0.0 2022-06-07 07:04:16 INFO plugins.stateengine StateEngine default suntracking lamella open value = 0.0 2022-06-07 07:04:16 INFO plugins.stateengine StateEngine default startup delay = 10 2022-06-07 07:04:16 INFO plugins.stateengine StateEngine default suspension time = 3600 2022-06-07 07:04:16 INFO plugins.stateengine StateEngine default instant_leaveaction = False ... 2022-06-07 07:04:21 INFO plugins.stateengine Init StateEngine items ... 2022-06-07 07:04:21 INFO plugins.stateengine Using StateEngine for 2 items 2022-06-07 07:04:21 INFO plugins.stateengine StateEngine: Additional CLI commands not registered because CLI plugin is not active 2022-06-07 07:04:37 INFO plugins.stateengine manual_item_update_eval 2022-06-07 07:04:37 INFO plugins.stateengine running for item 'Storen.TestY.Automatik.manuell' source 'Eval' caller 'Storen.TestY.AufAb' 2022-06-07 07:04:37 INFO plugins.stateengine Current value of item Storen.TestY.Automatik.manuell is False 2022-06-07 07:04:37 INFO plugins.stateengine get_caller(Eval, Storen.TestY.AufAb): original trigger by admin:None 2022-06-07 07:04:37 INFO plugins.stateengine checking exclude values: ['database:*', 'init:*'] 2022-06-07 07:04:37 INFO plugins.stateengine Checking regex result None 2022-06-07 07:04:37 INFO plugins.stateengine re.compile('database:*', re.IGNORECASE): not matching 2022-06-07 07:04:37 INFO plugins.stateengine Checking regex result None 2022-06-07 07:04:37 INFO plugins.stateengine re.compile('init:*', re.IGNORECASE): not matching 2022-06-07 07:04:37 INFO plugins.stateengine No include limitation. Writing value True
In Zeile 592 sehe ich diesen Eintrag:
Für mich sieht alles ok aus und ich finde keine Fehlermeldungen. Das Item "Storen.TestY.Automatik.suspend_end" bleibt aber leer.Code:2022-06-07 07:05:36.788111 Eval result: 2022-06-07 07:14:39.287747+0200.
Angehängte Dateien
Einen Kommentar schreiben:
-
Hmmm. sehr sonderbar. Habs bei mir grad getestet, soweit kein Problem. Check mal das Debug Log von shng und vom stateengine plugin..?
Würde übrigens das manual_include raus nehmen, das könnte durchaus mit dem exclude kollidieren - du brauchst es auch nicht, weil alles, was nicht im exclude steht, automatisch "include" ist.
Einen Kommentar schreiben:
-
Danke für diese Variante. Werde ich ausprobieren. Der Suspend-Modus klappt soweit, aber ich kann über das Item "Storen.TestY.Automatik.suspend_end" die End-Zeit des Suspend nicht sehen:
p11.jpg
In der grafischen Darstellung der Stateengine sehe ich diese Endzeit. Das Item bleibt leer (auch die darunterliegenden Items). Die Suspend-Zeit läuft wie vordefiniert ab.
Muss ich in meinem Beispiel oben noch etwas ergänzen, damit ich die Endzeit in diesem Item sehen kann ?
Ich bin auf dem aktuellen Develop (smarthomeNG und Plugin).
Einen Kommentar schreiben:
-
Du könntest das auch so lösen, damit auch wirklich alle relevanten Items die Stateengine triggern
Siehe auch das Beispiel hier: https://www.smarthomeng.de/starting-...toblind-pluginCode:rules: eval_trigger: - merge_unique* - Storen.Trigger
Einen Kommentar schreiben:
-
Habe den Fehler gefunden. Im Abschnitt "Storen.Test.Automatik.rules.eval_trigger muss "- ..manuell" ergänzt werden (siehe Zeile mit "# !!!!!!"). Nach dieser Anpassung wechselt die State-Engine zuverlässig in den Suspend-Modus.
Code:Storen: Trigger: type: bool name: Gemeinsamer Trigger für alle Storen enforce_updates: yes cycle: 60 = 1 # Ausloesung Trigger jede Minute Test: AufAb: type: bool enforce_updates: on visu_acl: rw value: false cache: true Position: type: num visu_acl: rw Automatik: struct: - stateengine.general - stateengine.state_lock - stateengine.state_suspend - stateengine.state_release manuell: eval_trigger: - Storen.Test.AufAb rules: se_plugin: active eval_trigger: - Storen.Trigger - ..manuell # !!!!!! se_log_level: 2 se_item_position: ...Position Default: type: foo name: Test Default se_action_position: - 'function: set' - 'to: 0' enter: type: foo
Einen Kommentar schreiben:
-
Perfekt. Das war genau der Fehler. Ich habe die Angaben aus der Doku https://smarthomeng.de/user/plugins/...iguration.html übernommen und nicht gemerkt, dass diese Zeile mit "handlers" überall drin war, auch in meinem allgemeinen "plugins".Zitat von Msinn Beitrag anzeigenCode:plugins: handlers: [shng_details_file] level: WARNING plugins.stateengine: level: INFO
Bleibt mein Problem mit dem Suspend in der State-Engine.
Einen Kommentar schreiben:
-
Da musst Du schon mehr verraten, als die 4 Zeilen.Zitat von manhartm Beitrag anzeigenIn der logging.yaml habe ich diesen Eintrag drin:
Sobald ich diese Zeilen aktiviere, habe ich diese doppelten Einträge im Log.Code:loggers: plugins.stateengine: handlers: [shng_details_file] level: INFO
Das ist aber nicht mein Problem, sondern warum die Items die State-Engine nicht triggern.
Meine Vermutung (aus Mangel an Informationen natürlich ein Schuss ins Blaue: Du hast auch einen Logger plugins, von dem bereits ein Handler Handler geerbt wird. Also etwa so:
handlers: ist eine Liste, die vom übergeordneten Logger geerbt wird und wo die angegebenen Handler appended werden.Code:loggers: plugins: handlers: [shng_details_file] level: WARNING plugins.stateengine: handlers: [shng_details_file] level: INFO
Durch die Vererbung schickt der Logger plugins.stateengine dann den Logeintrag 2x an den Handler shng_details_file.
Das Problem ist dann weg, wenn Du die handlers Zeile weg lässt:
Wie gesagt: Ein Schuß ins BlaueCode:loggers: plugins: handlers: [shng_details_file] level: WARNING plugins.stateengine: level: INFO
Einen Kommentar schreiben:
-
Ich habe versucht die Sache zu vereinfachen, um herauszufinden, warum ich bei einer manuellen Betätigung nicht in den Suspend-Modus gelange:
Datei "blinds.yaml" im Verzeichnis "items":
Angehängt in der Datei p1.png ist der Anfang der State-Engine grafisch dargestellt.Code:Storen: Trigger: type: bool name: Gemeinsamer Trigger für alle Storen enforce_updates: yes #Wichtig! cycle: 60 = 1 # Ausloesung Trigger jede Minute Test: AufAb: type: bool enforce_updates: on visu_acl: rw value: false cache: true Position: type: num visu_acl: rw Automatik: struct: - stateengine.general - stateengine.state_lock - stateengine.state_suspend - stateengine.state_release manuell: eval_trigger: - Storen.Test.AufAb rules: se_plugin: active eval_trigger: - Storen.Trigger se_log_level: 2 se_item_position: ...Position Default: type: foo name: Test Default se_action_position: - 'function: set' - 'to: 0' # Behang ganz hochfahren enter: type: foo
In der ZIP-Datei findet sich das detaillierte Log "2022-06-04-Storen_Test_Automatik_rules.log" für dieses Item oben. Da steige ich leider bei den Details nicht wirklich durch.
In "smarthome-details.log" steht nach der Aktivierung des Items "Storen.Test.AufAb" folgendes:
Somit stösst das Item zwar etwas an (smarthome-details.log), aber im Detail-Log des Items sehe ich diesen Trigger nicht und damit wird auch der Modus "suspend" nicht aktiviert.Code:2022-06-04 19:03:31 INFO plugins.stateengine Init StateEngine items 2022-06-04 19:03:31 INFO plugins.stateengine Using StateEngine for 1 items 2022-06-04 19:03:31 INFO plugins.stateengine StateEngine: Additional CLI commands not registered because CLI plugin is not active 2022-06-04 19:03:56 INFO plugins.stateengine manual_item_update_eval 2022-06-04 19:03:56 INFO plugins.stateengine running for item 'Storen.Test.Automatik.manuell' source 'Eval' caller 'Storen.Test.AufAb' 2022-06-04 19:03:56 INFO plugins.stateengine Current value of item Storen.Test.Automatik.manuell is False 2022-06-04 19:03:56 INFO plugins.stateengine get_caller(Eval, Storen.Test.AufAb): original trigger by admin:None 2022-06-04 19:03:56 INFO plugins.stateengine checking exclude values: ['database:*', 'init:*'] 2022-06-04 19:03:56 INFO plugins.stateengine Checking regex result None 2022-06-04 19:03:56 INFO plugins.stateengine re.compile('database:*', re.IGNORECASE): not matching 2022-06-04 19:03:56 INFO plugins.stateengine Checking regex result None 2022-06-04 19:03:56 INFO plugins.stateengine re.compile('init:*', re.IGNORECASE): not matching 2022-06-04 19:03:56 INFO plugins.stateengine No include limitation. Writing value True
Was mache ich falsch ?
Einen Kommentar schreiben:
-
Wenn ich in der Visu eines der Items "Storen.EG.Anbau_Links.AufAb" und "Storen.EG.Anbau_Links.Step" betätige, dann wechselt das Item "Storen.EG.Anbau_Links.Automatik.manuell" jeweils seinen Zustand. Somit funktioniert der Trigger grundsätzlich.
Das Item "Storen.EG.Anbau_Links.Automatik.suspend" hingegen ändert sich nicht. Warum ?
Ich bin mit smarthomeNG und den plugins auf dem aktuellen Develop für meine Tests.
Einen Kommentar schreiben:
-
In der logging.yaml habe ich diesen Eintrag drin:
Sobald ich diese Zeilen aktiviere, habe ich diese doppelten Einträge im Log.Code:loggers: plugins.stateengine: handlers: [shng_details_file] level: INFO
Das ist aber nicht mein Problem, sondern warum die Items die State-Engine nicht triggern.
Einen Kommentar schreiben:
-
Ich habe für einen Storen eine State-Engine aufgebaut. Diese ist aktuell noch nicht mit dem KNX verbunden, sondern ich teste nur mit SmartVisu.
Die Items in "blinds.yaml":
Das Struct "stateengine_default_blind" in struct.yaml:Code:Storen: Trigger: type: bool name: Gemeinsamer Trigger für alle Storen enforce_updates: yes cycle: 60 = 1 EG: Anbau_Links: AufAb: type: bool name: Raffstore auf/ab fahren enforce_updates: on visu_acl: rw value: false cache: true Step: type: bool name: Raffstore Schritt fahren/stoppen enforce_updates: on visu_acl: rw value: false cache: true Lock: type: bool visu_acl: rw cache: true value: false Position: type: num visu_acl: rw database@mysqldb: init Automatik: struct: - stateengine.general - stateengine.state_lock - stateengine.state_suspend - stateengine.state_release - stateengine_default_blind manuell: type: bool eval_trigger: - Storen.EG.Anbau_Links.AufAb - Storen.EG.Anbau_Links.Step se_manual_include: - Visu:* se_manual_exclude: # - 'KNX:1.1.12' # Hier die physikalische Adresse des Schalt/Jalousieaktors angeben! - Init:* rules: se_plugin: active se_startup_delay: 5 eval_trigger: - Storen.Trigger - Meteo.* se_log_level: 2
Die State-Engine funktioniert soweit mit der Helligkeit und mit dem Sonnenwinkel. Auch das Sperren klappt.Code:stateengine_default_blind: settings: mindestdauer_helligkeit: type: num cache: True initial_value: 300 # [Sekunden] pos_soll: # Hoehe Storen, eingestellt in der Visu type: num visu_acl: rw cache: true initial_value: 0 rules: se_item_brightness: Meteo.Solar # Item für Helligkeit aussen se_item_temperature: Meteo.Temp_Outside # Item für Temperatur aussen se_item_solar200: Meteo.Solar.sol200 # Item das anzeigt, ob der Solarwert aussen mehr als 200 W/qm beträgt se_item_solar400: Meteo.Solar.sol400 # Item das anzeigt, ob der Solarwert aussen mehr als 400 W/qm beträgt se_item_position: ...Position # Item für Behanghöhe se_mindelta_hoehe: 10 # Keine Änderung der Behanghöhe wenn Abweichung kleiner 10 se_item_lock: ...Lock # ueberschreibt 'se_item_lock' in 'stateengine.state_lock' mit eigenem Item eval_trigger: - ...Lock - ..pos_soll - ..suspend - ..release - ..manuell Storen_Unten: name: Sonnenschutz se_action_position: - 'function: set' - "to: eval:se_eval.get_relative_itemvalue('..settings.pos_soll'.format(se_eval.get_relative_itemvalue('..state_name').lower()))" enter: # Einstieg in "Sonnenschutz": Wenn # - das Flag Solarwert > 400 W/qm seit mindestens 30 Sekunden gesetzt ist se_value_solar400: true se_agemin_solar400: item:..settings.mindestdauer_helligkeit se_min_sun_altitude: 10 se_min_sun_azimut: 85 se_max_sun_azimut: 207 se_min_temperature: 0 enter_hysterese: # Hysterese für Helligkeit: Wenn # ... wir bereits in "Sonnenschutz" sind se_value_laststate: var:current.state_id # .... das Flag Solarwert > 200 W/qm gesetzt ist se_value_solar200: true se_min_sun_altitude: 10 se_min_sun_azimut: 85 se_max_sun_azimut: 207 # Anmerkung: Hier keine erneute Prüfung der Temperatur, damit Temperaturschwankungen nicht # zum Auf-/Abfahren der Raffstores führen enter_delay: # Verzögerter Ausstieg nach Unterschreitung der Mindesthelligkeit: Wenn # ... wir bereits in "Sonnenschutz" sind se_value_laststate: var:current.state_id # .... das Flag Solarwert > 200 W/qm nicht (!) gesetzt ist, aber diese Änderung nicht mehr als 1 Minute her ist se_value_solar200: false se_agemax_solar200: 60 se_min_sun_altitude: 10 se_min_sun_azimut: 85 se_max_sun_azimut: 207 # Anmerkung: Auch hier keine erneute Prüfung der Temperatur, damit Temperaturschwankungen nicht # zum Auf-/Abfahren der Raffstores führen # Zustand "Tag" Default: type: foo name: Tag (statisch) # Aktionen: # - Behang ganz hochfahren se_action_position: - 'function: set' - 'to: 0' enter: type: foo
Ich habe die beiden Items "Storen.EG.Anbau_Links.AufAb" und "Storen.EG.Anbau_Links.Step" in SmartVisu eingerichtet. Wenn ich eines dieser Items betätige, geht die State-Engine leider nicht in den Suspend-Modus. Im Detail-Log finde ich keinen Eintrag, der durch diese Items aus der Visu getriggert worden ist. In "smarthome-details.log" finde ich diesen Eintrag:
Warum da alle Zeilen doppelt drin sind, verstehe ich auch nicht. Die übrigen Einträge in diesem Log sind normal.Code:2022-06-04 15:59:20 INFO plugins.stateengine manual_item_update_eval 2022-06-04 15:59:20 INFO plugins.stateengine manual_item_update_eval 2022-06-04 15:59:20 INFO plugins.stateengine running for item 'Storen.EG.Anbau_Links.Automatik.manuell' source 'Eval' caller 'Storen.EG.Anbau_Links.AufAb' 2022-06-04 15:59:20 INFO plugins.stateengine running for item 'Storen.EG.Anbau_Links.Automatik.manuell' source 'Eval' caller 'Storen.EG.Anbau_Links.AufAb' 2022-06-04 15:59:20 INFO plugins.stateengine Current value of item Storen.EG.Anbau_Links.Automatik.manuell is False 2022-06-04 15:59:20 INFO plugins.stateengine Current value of item Storen.EG.Anbau_Links.Automatik.manuell is False 2022-06-04 15:59:20 INFO plugins.stateengine get_caller(Eval, Storen.EG.Anbau_Links.AufAb): original trigger by smartVISU:192.168.10.51 2022-06-04 15:59:20 INFO plugins.stateengine get_caller(Eval, Storen.EG.Anbau_Links.AufAb): original trigger by smartVISU:192.168.10.51 2022-06-04 15:59:20 INFO plugins.stateengine checking exclude values: ['Init:*'] 2022-06-04 15:59:20 INFO plugins.stateengine checking exclude values: ['Init:*'] 2022-06-04 15:59:20 INFO plugins.stateengine Checking regex result None 2022-06-04 15:59:20 INFO plugins.stateengine Checking regex result None 2022-06-04 15:59:20 INFO plugins.stateengine re.compile('Init:*', re.IGNORECASE): not matching 2022-06-04 15:59:20 INFO plugins.stateengine re.compile('Init:*', re.IGNORECASE): not matching 2022-06-04 15:59:20 INFO plugins.stateengine checking include values: ['Visu:*'] 2022-06-04 15:59:20 INFO plugins.stateengine checking include values: ['Visu:*'] 2022-06-04 15:59:20 INFO plugins.stateengine Checking regex result None 2022-06-04 15:59:20 INFO plugins.stateengine Checking regex result None 2022-06-04 15:59:20 INFO plugins.stateengine re.compile('Visu:*', re.IGNORECASE): not matching 2022-06-04 15:59:20 INFO plugins.stateengine re.compile('Visu:*', re.IGNORECASE): not matching 2022-06-04 15:59:20 INFO plugins.stateengine No include values matching. Writing value False 2022-06-04 15:59:20 INFO plugins.stateengine No include values matching. Writing value False
Was mache ich falsch, dass das Auslösen der Items in der Visu keine Trigger in der State-Engine auslösen ?
Einen Kommentar schreiben:
-
das ist nicht so ganz ohne größeren Aufwand möglich, da ich noch vom alten Autoblind "umgezogen" bin - bei Gelegenheit müsste ich alles mal neu + sauber machen.Zitat von Onkelandy Beitrag anzeigenDu solltest fürs Suspend unbedingt die structs nutzen, die mitgeliefert werden.
hab die Zeile geändert:Zitat von Onkelandy Beitrag anzeigenGenerell weist der Fehler darauf hin, dass du zwar ein agemax drin hast, aber keine Angabe, welchen Wert das manuell Item haben soll. Ein se_value_manuell: True sollte die Warnung beheben.
inCode:se_agemax_manuell: var:item.suspend_time se_value_suspend: 'True'
Danke - ohne Deinen Hinweis wäre ich nicht (so schnell) drauf gekommen.Code:se_agemax_suspend: var:item.suspend_time se_value_suspend: 'True'
Einen Kommentar schreiben:

Einen Kommentar schreiben: