Ankündigung

Einklappen
Keine Ankündigung bisher.

Stateengine Plugin Support

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

  • Morg
    antwortet
    Hab ich auch, einmal nach dem Start, ist mir vorher nie aufgefallen. Doku hab ich dir geschickt...

    Einen Kommentar schreiben:


  • paularndt
    antwortet
    Der Fehler kommt bei jedem Start für alle Stateengines.

    Hier ein Beispiel einer releativ einfachen Stateengine die seit Jahren funktioniert:

    Code:
    hauswirtschaftsraum:
    
        licht:
            deckenlampe:
                struct: lampe_schaltbar
                schalten:
                    knx_listen: 2/0/0
                    knx_send: 2/0/0
                    knx_init: 2/0/0
                    
            automatik:
                struct: stateengine.general
            
                rules:
                    se_startup_delay: 30
                    se_item_licht: ...deckenlampe.schalten
                    se_item_tuer: ....tuer
                    se_item_taster: flur_kg.taster.oben_links
                    eval_trigger:
                     - hauswirtschaftsraum.tuer
                     - flur_kg.taster.oben_links
                  
                    AN:
                        type: foo
                        
                        on_enter:
                            se_action_licht:                        
                             - 'function: set'
                             - 'to: value:true'
                        
                        enter_tuer:
                            type: foo
                            se_value_tuer: true
                            se_value_laststate: hauswirtschaftsraum.licht.automatik.rules.AUS
                        
                        enter_taster:
                            type: foo
                            se_value_taster: true
                            se_value_laststate: hauswirtschaftsraum.licht.automatik.rules.AUS
    
                    AUS:
                        type: foo
                        
                        on_enter:
                            se_action_licht:                        
                             - 'function: set'
                             - 'to: value:false'
                        
                        enter:
                            type: foo
                            se_value_tuer: false
                            se_value_taster: false
                            se_value_laststate: hauswirtschaftsraum.licht.automatik.rules.AN​
    Zuletzt geändert von paularndt; 08.01.2023, 11:56.

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    Hmm, sonderbar, den Fehler hatte ich nie. Kommt nur direkt beim Start, aber nicht im laufenden Betrieb oder immer? Auch nach Neustart kommt der Fehler?
    Kannst du mir mal ein möglichst einfaches Stateengine Item von dir posten?

    Einen Kommentar schreiben:


  • paularndt
    antwortet
    Hallo zusammen,

    ich habe heute versucht, von 1.9.2 auf 1.9.3 upzugraden, funktioniert auch alles top, bis auf das Stateengine Plugin. Alle Stateengines werfen diesen Fehler:

    Code:
    2023-01-06  15:32:57 ERROR    plugins.stateengine.kinderzimmer1.rollladen.automatik.rules-Startup Delay Method plugins.stateengine.kinderzimmer1.rollladen.automatik.rules-Startup Delay exception: local variable '_wouldenter' referenced before assignment
    Traceback (most recent call last):
      File "/usr/local/smarthome/lib/scheduler.py", line 659, in _task
        obj(**value)
      File "/usr/local/smarthome/plugins/stateengine/StateEngineItem.py", line 1217, in __startup_delay_callback
        self.update_state(item, "Startup Delay", source, dest)
      File "/usr/local/smarthome/plugins/stateengine/StateEngineItem.py", line 752, in update_state
        self.run_queue()
      File "/usr/local/smarthome/plugins/stateengine/StateEngineItem.py", line 474, in run_queue
        _last_conditionset_id = self.__conditionsets[_wouldenter][0]
    UnboundLocalError: local variable '_wouldenter' referenced before assignment​
    Habe leider bisher nichts dazu im Forum gefunden. Hat jemand eine Idee woran das liegt?

    Viele Grüße und vielen Dank,

    Paul
    Zuletzt geändert von paularndt; 06.01.2023, 16:06.

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    Prinzipiell wenn es klappt ist gut Man muss dann halt neben manuell Item auch das suspend Item in den eval_trigger der stateengine nehmen. Das führt dann wohl zu doppelter Evaluierung, sobald es in den Suspend geht. Der Release State ist aber auch nur ein Hilfskonstrukt, das zwei Evaluierungen hintereinander auslöst.

    Einen Kommentar schreiben:


  • manhartm
    antwortet
    Somit ist es keine gute Idee direkt 'suspend' auf False zu setzen? Hat bei meinem Test so funktioniert.

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    Bestens, werde ich gleich in develop pushen.. Aber anyway, der State bringt dir nur was direkt an 2. Stelle. Dadurch kannst du den suspend beenden, ohne zB zuerst locken zu müssen.

    Einen Kommentar schreiben:


  • manhartm
    antwortet
    Zitat von Onkelandy Beitrag anzeigen
    Da haben wir den Übeltäter.. Release dient als "Zustandsvorlage für Deaktivieren von Suspend und Lock und erneutes Evaluieren der Regeln", sollte also oberhalb der beiden gelistet sein. Allerdings sollte das trotzdem so nicht passieren. Füg bitte mal im plugin.yaml bei Zeilen 1184 und 1185 ein ".date_time" an. Dadurch sollte das Problem behoben sein, egal an welcher Stelle der release state kommt.
    Habe die plugin.yaml so angepasst und stateengine.state_release als 4.Zeile in meinen structs wieder aktiviert. Jetzt wird die Suspendtime auch in diesem Fall angezeigt.

    Danke für die tolle Hilfe !

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    Da haben wir den Übeltäter.. Release dient als "Zustandsvorlage für Deaktivieren von Suspend und Lock und erneutes Evaluieren der Regeln", sollte also oberhalb der beiden gelistet sein. Allerdings sollte das trotzdem so nicht passieren. Füg bitte mal im plugin.yaml bei Zeilen 1184 und 1185 ein ".date_time" an. Dadurch sollte das Problem behoben sein, egal an welcher Stelle der release state kommt.

    Hammas doch noch geschafft.. danke für's Dranbleiben!

    Einen Kommentar schreiben:


  • manhartm
    antwortet
    Habe mich schrittweise vorgearbeitet:

    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      # [1]
                  - stateengine.state_suspend
    #              - stateengine.state_release  # [2]
                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
    Ich habe zuerst beide Zeilen [1] und [2] ausgeschaltet und die Suspend-Zeit wurde korrekt in "Storen.TestY.Automatik.suspend_end" angezeigt. [1] konnte ich dann wieder aktivieren und die Zeit wurde weiter angezeigt. Als ich dann aber [2] auch wieder eingeschaltet habe, war Schluss. Es wurde keine Zeit mehr angezeigt.

    Hoffe das das bei der Eingrenzung weiterhilft.

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    Wir stehen vor einem Rätsel.. Beim Start wird bei mir folgendes geloggt.. bei dir eben ohne date_time hinten dran. Der Ursprung allen Übels.

    Code:
    2022-06-07 00:16:56.307932 Actions to perform on enter or stay:
    2022-06-07 00:16:56.308116 Action 'suspend':
    2022-06-07 00:16:56.308239 function: special
    2022-06-07 00:16:56.308352 name: suspend
    2022-06-07 00:16:56.308471 repeat: True
    2022-06-07 00:16:56.308591 order: 1
    2022-06-07 00:16:56.308710 Special Action: suspend
    2022-06-07 00:16:56.308874 value: [Item: jalousien.eg.osten_buero.automatik.suspend, 'jalousien.eg.osten_buero.automatik.manuell']
    2022-06-07 00:16:56.309003 Action 'suspend_end':
    2022-06-07 00:16:56.309121 name: suspend_end
    2022-06-07 00:16:56.309236 repeat: True
    2022-06-07 00:16:56.309352 order: 3
    2022-06-07 00:16:56.309478 item: jalousien.eg.osten_buero.automatik.suspend_end.date_time
    Die Frage ist nun, wann, wo und warum das verloren geht. Schaust du mal im Admin Interface unter /admin/items/structs und da stateengine.state_suspend..?
    Kannst da n Screenshot machen? Was steht im Admin Interface beim suspend_end Item unter eval_trigger und unter eval..?

    Könnte irgendwo irgendwas dazwischen funken? Kannst du mal mit nur dem einen einzigen Item neustarten und vielleicht auch dort nur stateengine_default und state_suspend structs referenzieren, sonst nichts hinzufügen oder ändern außer dem manuell Item mit dem eval_trigger..?

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • manhartm
    antwortet
    Hier der Screenshot der Stateengine im Suspend-Modus:

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

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:

Lädt...
X