Ankündigung

Einklappen
Keine Ankündigung bisher.

Stateengine Plugin Support

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

    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.

    Kommentar


      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

      Kommentar


        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
        Viele Grüße
        Martin

        There is no cloud. It's only someone else's computer.

        Kommentar


          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.

          Kommentar


            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

            Kommentar


              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

              Kommentar


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

                Kommentar


                  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.

                  Kommentar


                    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

                    Kommentar


                      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.

                      Kommentar


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

                        Kommentar


                          Poste bitte nochmals einen aktuellen Screenshot aus der Webinterface Visualisierung von dem Item - denn da müsste eigentlich stehen, dass nicht .._end, sondern das Unteritem date_time aktualisiert wurde.

                          Kommentar


                            Hier der Screenshot der Stateengine im Suspend-Modus:

                            Screenshot 2022-06-08 at 17-00-18 stateengine Plugin.png

                            Kommentar


                              Check bitte mal das plugin.yaml vom stateengine Plugin. Da muss einfach was beim gitten schief gelaufen sein..
                              Das hier sollte im state_suspend (nach den settings) stehen:
                              Code:
                              rules:
                                se_item_suspend: ..suspend
                                se_item_suspend_visu: ..suspend.visu
                                se_item_suspend_end: ..suspend_end.date_time
                                se_item_suspend_start: ..suspend_start.date_time
                                se_item_suspend_active: ..settings.suspend_active
                                se_suspend_time: item:..settings.suspendduration.seconds

                              Kommentar


                                In meinem plugin.yaml sieht dieser Abschnitt so aus:

                                Code:
                                        rules:
                                            se_item_suspend: ..suspend
                                            se_item_suspend_visu: ..suspend.visu
                                            se_item_suspend_end: ..suspend_end.date_time
                                            se_item_suspend_start: ..suspend_start.date_time
                                            se_item_suspend_active: ..settings.suspend_active
                                            se_suspend_time: item:..settings.suspendduration.seconds
                                
                                            eval_trigger:
                                                - ..manuell
                                Also identisch.

                                Ich habe zur Sicherheit direkt von Github via Download die Plugins aus dem Develop direkt heruntergeladen und mit der Datei plugin.yaml auf meinem Raspberry Pi verglichen. Die beiden Dateien sind exakt identisch.

                                Kommentar

                                Lädt...
                                X