Ankündigung

Einklappen
Keine Ankündigung bisher.

Stateengine Plugin Support

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • manhartm
    antwortet
    Ich habe die Version 1.9.2 am Laufen (aktuelle Version aus dem Plugin Github develop).

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    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:


  • manhartm
    antwortet
    Ich benutze bewusst das Test-Item und nicht die komplexere Version mit dem Struct:

    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
    In smarthome-details.log sehe ich nur diese Zeilen mit Bezug zur Stateengine:

    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
    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.

    In Zeile 592 sehe ich diesen Eintrag:

    Code:
    2022-06-07 07:05:36.788111 Eval result: 2022-06-07 07:14:39.287747+0200.
    Für mich sieht alles ok aus und ich finde keine Fehlermeldungen. Das Item "Storen.TestY.Automatik.suspend_end" bleibt aber leer.
    Angehängte Dateien

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    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:


  • manhartm
    antwortet
    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:


  • Onkelandy
    antwortet
    Du könntest das auch so lösen, damit auch wirklich alle relevanten Items die Stateengine triggern
    Code:
    rules:
      eval_trigger:
        - merge_unique*
        - Storen.Trigger
    Siehe auch das Beispiel hier: https://www.smarthomeng.de/starting-...toblind-plugin

    Einen Kommentar schreiben:


  • manhartm
    antwortet
    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:


  • manhartm
    antwortet
    Zitat von Msinn Beitrag anzeigen
    Code:
        plugins:
            handlers: [shng_details_file]
            level: WARNING
    
        plugins.stateengine:
            level: INFO
    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".

    Bleibt mein Problem mit dem Suspend in der State-Engine.

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Zitat von manhartm Beitrag anzeigen
    In der logging.yaml habe ich diesen Eintrag drin:

    Code:
    loggers:
    plugins.stateengine:
    handlers: [shng_details_file]
    level: INFO
    Sobald ich diese Zeilen aktiviere, habe ich diese doppelten Einträge im Log.

    Das ist aber nicht mein Problem, sondern warum die Items die State-Engine nicht triggern.
    Da musst Du schon mehr verraten, als die 4 Zeilen.

    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:

    Code:
    loggers:
        plugins:
            handlers: [shng_details_file]
            level: WARNING
        plugins.stateengine:
            handlers: [shng_details_file]
            level: INFO
    handlers: ist eine Liste, die vom übergeordneten Logger geerbt wird und wo die angegebenen Handler appended werden.

    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:

    Code:
    loggers:
        plugins:
            handlers: [shng_details_file]
            level: WARNING
        plugins.stateengine:
            level: INFO
    Wie gesagt: Ein Schuß ins Blaue

    Einen Kommentar schreiben:


  • manhartm
    antwortet
    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":

    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
    Angehängt in der Datei p1.png ist der Anfang der State-Engine grafisch dargestellt.

    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:

    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
    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.

    Was mache ich falsch ?
    Angehängte Dateien

    Einen Kommentar schreiben:


  • manhartm
    antwortet
    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:


  • manhartm
    antwortet
    In der logging.yaml habe ich diesen Eintrag drin:

    Code:
    loggers:
        plugins.stateengine:
            handlers: [shng_details_file]
            level: INFO
    Sobald ich diese Zeilen aktiviere, habe ich diese doppelten Einträge im Log.

    Das ist aber nicht mein Problem, sondern warum die Items die State-Engine nicht triggern.

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Das Problem liegt vermutlich in der logging.yaml

    Einen Kommentar schreiben:


  • manhartm
    antwortet
    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":

    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
    Das Struct "stateengine_default_blind" in struct.yaml:

    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
    Die State-Engine funktioniert soweit mit der Helligkeit und mit dem Sonnenwinkel. Auch das Sperren klappt.

    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:

    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
    Warum da alle Zeilen doppelt drin sind, verstehe ich auch nicht. Die übrigen Einträge in diesem Log sind normal.

    Was mache ich falsch, dass das Auslösen der Items in der Visu keine Trigger in der State-Engine auslösen ?

    Einen Kommentar schreiben:


  • ivande
    antwortet
    Zitat von Onkelandy Beitrag anzeigen
    Du solltest fürs Suspend unbedingt die structs nutzen, die mitgeliefert werden.
    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 anzeigen
    Generell 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.
    hab die Zeile geändert:
    Code:
    se_agemax_manuell: var:item.suspend_time 
    se_value_suspend: 'True'
    in
    Code:
    se_agemax_suspend: var:item.suspend_time
    se_value_suspend: 'True'
    Danke - ohne Deinen Hinweis wäre ich nicht (so schnell) drauf gekommen.

    Einen Kommentar schreiben:

Lädt...
X