Ankündigung

Einklappen
Keine Ankündigung bisher.

Stateengine Plugin Support

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

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

    Kommentar


      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.

      Kommentar


        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!

        Kommentar


          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 !

          Kommentar


            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.

            Kommentar


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

              Kommentar


                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.

                Kommentar


                  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.

                  Kommentar


                    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?

                    Kommentar


                      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.

                      Kommentar


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

                        Kommentar


                          Ich kann den Fehler hier komischerweise nicht reproduzieren. Kannst du bitte mal die develop Version ziehen und nochmals testen? Vielleicht haben wir Glück

                          Kommentar


                            Wir haben leider kein Glück ;-(. Habe es mit dem aktuellen develop Stand für das Stateengine Plugin versucht. Keine Veränderung. Der Fehler wird einmal beim Start für alle Stateengines geworfen und sie laufen alle nicht.

                            Kommentar


                              Bin mit Morg da dran.. frag mich eh grad, was ich mit den zwei Zeilen bewirken wollte bzw. ob da jemals was Gescheites rauskommen kann
                              Ändere die Zeilen bitte mal wie folgt, dann funzt es zumindest.

                              Code:
                                                      try:
                                                          _last_conditionset_id = self.__conditionsets[_wouldenter][0]
                                                          _last_conditionset_name = self.__conditionsets[_wouldenter][1]
                                                      except:
                                                          pass

                              Kommentar


                                wollte in mein bestehendes Projekt, welches schon länger läuft mit struct eine Ergänzung einfügen und komme seit 2 Tagen nicht auf den Fehler drauf: expected string or bytes-like object


                                log:
                                Code:
                                2024-07-03 12:44:46.156430 Init state Dg.Wohnzimmer.Jalousie.Terrasse.AutoBlind.rules.Schiebetuer
                                2024-07-03 12:44:46.157878     Struct stateengine_jalousie_spezial.Default.Schiebetuer created.
                                2024-07-03 12:44:46.158718     Reading struct stateengine_jalousie_spezial.Default.Schiebetuer. It is a valid struct for the state configuration.
                                2024-07-03 12:44:46.161389     Added 3 action(s) based on se_use stateengine_jalousie_spezial.Default.Schiebetuer. 0 on_enter, 0 on_stay , 3 on_enter_or_stay, 0 on_leave
                                2024-07-03 12:44:46.161762     Added 1 condition set(s) based on se_use: stateengine_jalousie_spezial.Default.Schiebetuer
                                2024-07-03 12:44:46.163661 ERROR: Ignoring state Dg.Wohnzimmer.Jalousie.Terrasse.AutoBlind.rules.Schiebetuer because: expected string or bytes-like object​
                                dg.yaml
                                Code:
                                               AutoBlind:
                                                    struct:
                                                        - stateengine_jalousie_default
                                                        - stateengine.general
                                                        - stateengine_jalousie_spezial
                                                    rules:
                                                        type: bool
                                                        se_plugin: active
                                                        name: Dg Wohnzimmer Terasse
                                                        eval_trigger:
                                                            - Dg.Trigger
                                                            - Dg.Wohnzimmer.Jalousie.Terrasse.AutoBlind.manuell
                                                            - Dg.Wohnzimmer.Jalousie.Terrasse.AutoBlind.retrigger
                                                            - Dg.Wohnzimmer.Jalousie.Terrasse.AutoBlind.suspend
                                                            - Dg.Wohnzimmer.Jalousie.Terrasse.AutoBlind.automatik
                                                            - Dg.Wohnzimmer.Jalousie.Terrasse.AutoBlind.beschatten
                                                            - Dg.Wohnzimmer.Jalousie.Terrasse.AutoBlind.beschattenFuerZeit
                                                            - Dg.Wohnzimmer.Jalousie.Terrasse.Position_gueltig
                                                            - Dg.Wohnzimmer.Jalousie.Terrasse.ReferenzFahren
                                                            - Dg.Wohnzimmer.Status.Schlafen
                                                            - Wetterstation.WindWarnung
                                                            - Wetterstation.WindAlarm
                                                            - Dg.Wohnzimmer.Schiebetuer.Status
                                                        eval: True
                                                        se_item_schiebetuer: .....Schiebetuer.Status
                                                        se_repeat_actions: true
                                                        se_laststate_item_id: ..state_id
                                                        se_laststate_item_name: ..state_name
                                                        se_suspend_time: "eval:se_eval.get_relative_itemvalue('...Parameter.ZeitManuell') * 60"
                                                        Schiebetuer:
                                                            se_use: struct:stateengine_jalousie_spezial.Default.Schiebetuer
                                global_structs.yaml
                                Code:
                                stateengine_jalousie_default:
                                    rules:
                                        se_item_Brightness_ost_gt43k: Wetterstation.Helligkeit.Ost_gt43k​
                                        ....
                                        Tag:
                                            type: foo
                                            name: Tag
                                            se_set_suspend: 'False'
                                            se_set_Position: 'item: ...Parameter.Tag.Position'
                                            se_set_Lamellenposition: 'item: ...Parameter.Tag.Lamellenposition'
                                            enter:
                                                se_value_TagAktive: 'True'
                                                se_min_sun_altitude: 0
                                                se_min_Daemmerung: 200
                                                se_min_time: 'item: ...Parameter.Tag.Uhrzeit'​
                                           ...
                                
                                stateengine_jalousie_spezial:
                                    Default:
                                        Schiebetuer:
                                            type: foo
                                            name: Schiebetuer
                                            enter:
                                                se_value_schiebetuer: True
                                                se_value_automatik: True
                                            se_set_suspend: False
                                            se_set_Position: 0
                                            se_set_Lamellenposition: 0​

                                Kommentar

                                Lädt...
                                X