Ankündigung

Einklappen
Keine Ankündigung bisher.

Stateengine Plugin Support

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

    #31
    Zum Log nochmals. Da steht doch alles drin?!?
    Code:
    2019-08-03 16:35:54.363604       Check condition set 'enter_temperatur'
    2019-08-03 16:35:54.373510               Condition 'temperatur': Checking all relevant stuff
    2019-08-03 16:35:54.385745                       Checking eval: se_eval.get_relative_itemvalue('..settings.suntrack.force_temperatur').
    2019-08-03 16:35:54.388228                               Executing method 'get_relative_itemvalue(..settings.suntrack.force_temperatur)'
    2019-08-03 16:35:54.399911                               Testing for relative item declaration ..settings.suntrack.force_temperatur
    2019-08-03 16:35:54.402758                               Return '28' for item jalousien.og.osten_wohnen.automatik.settings.suntrack.force_temperatur
    2019-08-03 16:35:54.406526                       Condition 'temperatur': min=[28] max=[None] negate=False current=25.9
    2019-08-03 16:35:54.417146                               Checking minvalue 28 and maxvalue None
    2019-08-03 16:35:54.420197                               too low -> not matching

    Kommentar


      #32
      Zu Punkt 5: Ja, genau so wie du geschrieben hast. Das struct könnte dann so aussehen:
      Code:
      stateengine_nacht_raffstore:
          vo:
              nacht:
                  setting_x:
                      type: num
                  .....
      
          rules:
              se_item_hoehe: ..hoehe
      
              nacht:
                  enter:
                     ...
                  on_enter_or_stay:
                     ....

      Kommentar


        #33
        Nun zum eigentlichen "cast" Problem:
        Du hast Einträge wie se_min_time: hmblind4.vo.max_time_morgens

        Das heißt, als Wert wird der String 'hmblind4.vo.max_time_morgens' herangezogen. Du musst ein item: voran stellen, damit der Wert vom Item geholt wird!
        Ich habe den Logeintrag zu dem Problem noch optimiert, aber generell solltest du echt mal deine YAMl durchchecken, das ist alles sehr inkonsistent und chaotisch.

        Kommentar


          #34
          Seit dem Pluginrelease 1.6.1 gibt es nun im WebInterface auch eine Visualisierung zur Stateengine. Feedback willkommen!

          Leider hatte ich verabsäumt, das entsprechende Verzeichnis automatisch anzulegen. Daher müsste folgender Befehl noch im shng Verzeichnis ausgeführt werden:
          Code:
          mkdir plugins/stateengine/webif/static/img/visualisations
          Das Ganze sieht dann in etwa so aus..:
          Screenshot 2019-10-13 at 06.41.01.png
          Zuletzt geändert von Onkelandy; 13.10.2019, 05:41.

          Kommentar


            #35
            schloessl Schau dir mal https://github.com/smarthomeNG/plugi...e563fa8c56b73d an.

            Das
            Code:
            self._log_debug("Currently eval results in {}", self.__get_eval())
            sollte zu deinem Log-Wunsch, den Wert aus dem Eval direkt anzuzeigen passen. Ich brauche das nun de facto für die Grafik im Webinterface, im Startlog kann es aber wohl auch nicht schaden.

            Kommentar


              #36
              Guten Abend,

              Meine Stateengine-Version ist 1.6.2.

              Ich hoffe, mir kann jemand helfen. Ich habe vor Wochen meine Stateengine, die einzig zur Führung der Rollladen dient, etwas umgestellt. Ich habe als Fahrbefehl für die Rollladen auf "fahren" umgestellt, nicht mehr auf "Position". Also
              Code:
              se_item_height: Rollladen.Erdgeschoss.Esszimmer.Wintergarten.Position
              se_item_fahren: Rollladen.Erdgeschoss.Esszimmer.Wintergarten.Fahren
              Problematisch ist, dass diesselbe GA auch die manuelle Sperre "Suspend" auslösen soll . Eigentlich habe ich es so verstanden, dass die Stateengine von selber differenzieren kann, ob der Befehl von ihr kommt oder nicht und es damit nicht zu einem selbstausgelösten Suspend kommt. Aber das hat bei mir nie so richtig funktioniert. Ich habe daher nach vielen Versuchen ein manual_include gesetzt
              Code:
              se_manual_include:
                   - knx:11.1.*
                   - Visu:*
              Nun sollten eigentlich nur noch Befehle von den Schaltern (11.1.*) oder der Visu zu Suspend führen.

              Und nun das mir Unerklärliche: Mir ist jetzt erst klar geworden, dass die Suspends von den Tastern ausgelöst werden. Aus irgendeinem Grund registriert die Stateengine nach dem (von ihm selber ausgelösten) Fahrbefehl einen weitern Fahrbefehl vom Schalter. Das sieht dann so aus:
              Code:
              2019-12-18 19:55:02.349461 Leaving Autoblind_Rollladen.Erdgeschoss.Esszimmer.Wintergarten.rules.suspend ('ausgesetzt'). Condition set was: Autoblind_Rollladen.Erdgeschoss.Esszimmer.Wintergarten.rules.suspend.enter_stay
              2019-12-18 19:55:02.388136     Running action 'suspend_end'
              2019-12-18 19:55:02.402124     Action 'suspend_end': Set 'Autoblind_Rollladen.Erdgeschoss.Esszimmer.Wintergarten.suspend_end' to ''.
              2019-12-18 19:55:02.446983     Running action 'suspend'
              2019-12-18 19:55:02.448981     Action 'suspend': Set 'Autoblind_Rollladen.Erdgeschoss.Esszimmer.Wintergarten.suspend' to 'False'.
              2019-12-18 19:55:02.481839 Entering Autoblind_Rollladen.Erdgeschoss.Esszimmer.Wintergarten.rules.nachts_wintergarten ('Rollladen Nacht_EG') based on conditionset Stateengine_allgemein.Vorgaben.nachts_eg.enter_5 ('enter_5')
              2019-12-18 19:55:02.551563     Running action 'suspend'
              2019-12-18 19:55:02.558434     Action 'suspend': Set 'Autoblind_Rollladen.Erdgeschoss.Esszimmer.Wintergarten.suspend' to 'False'.
              2019-12-18 19:55:02.572121     Running action 'fahren'
              2019-12-18 19:55:02.596045     Action 'fahren': Set 'Rollladen.Erdgeschoss.Esszimmer.Wintergarten.Fahren' to 'True'.
              2019-12-18 19:55:04.114474 Update state of item Automatik Rollladen Esszimer Wintergarten =================
              2019-12-18 19:55:04.116082 Update triggered by Eval (item=Autoblind_Rollladen.Erdgeschoss.Esszimmer.Wintergarten.rules source=Autoblind_Rollladen.Erdgeschoss.Esszimmer.Wintergarten.manuell dest=None)
              2019-12-18 19:55:04.117760 Eval initially triggered by knx (item=Rollladen.Erdgeschoss.Esszimmer.Wintergarten.Fahren source=11.1.16:ga=2/2/80)
              2019-12-18 19:55:04.119285 Checking eval: se_eval.get_relative_itemproperty('..settings.suspendduration', 'value') * 60.
              2019-12-18 19:55:04.120554     Executing method 'get_relative_itemproperty(..settings.suspendduration, value)'
              2019-12-18 19:55:04.121141     Testing for relative item declaration ..settings.suspendduration
              2019-12-18 19:55:04.122251     Item property value from Autoblind_Rollladen.Erdgeschoss.Esszimmer.Wintergarten.settings.suspendduration is: 60
              2019-12-18 19:55:04.122952 Last state: Autoblind_Rollladen.Erdgeschoss.Esszimmer.Wintergarten.rules.nachts_wintergarten ('Rollladen Nacht_EG')
              2019-12-18 19:55:04.124288 Testing for relative item declaration ..conditionset_id
              Was mich umso mehr irritiert: Ich habe zum Testen den Taster vom Bus genommen, aber dennoch registriert die Stateengine diesen Befehl. Als der oben im Protokoll stehende Fahrbefehl (2019-12-18 19:55:04.117760) registriert wurde, war der Taster mit der physikalischen Adresse 11.1.6 gar nicht am Bus!

              Ich stehe vor Rätseln.

              Dieses Verhalten tritt immer nur dann ein, wenn vorher ein wirklicher Suspend-Zustand stattgefunden hat. Also nicht generell, wenn die Stateengine Fahrbefehle gibt, das funktioniert soweit ohne Loop. Aber wenn jemand über Bedienen des Tasters ein Suspend bewirkt, wird der Suspend korrekt eine Stunde später wieder aufgelöst und dann folgt auf den von der Stateengine ausgelösten Fahrbefehl der gezeigter Geister-Tastenbefehl.

              Bevor ich das manual_include gesetzt hatte, hatte ich denselben Effekt noch mit einem Schaltbefehl aus der "source:unbekannt". Es war genau dasselbe wie oben dargestellt, da wußte ich auch nicht, wo der herkam. Den konnte ich aber über das manual_include ausschließen.

              Aber woher kommt der Schalterbefehl, den niemand abgegeben hat?

              Hat jemand eine Idee?

              Grüße

              Kommentar


                #37
                Poste doch mal das ganze Item inklusive rules. Und.. was passiert denn nach dem "Geisterbefehl"?

                Kommentar


                  #38
                  Hallo Onkelandy,

                  danke! Ich habe heute gesehen, dass die Structs bei mir doppelt angelegt sind. Was daran lag, dass ich mir eine eigene struct.yaml gemacht habe und dann die struct-joined aber wieder aufgetaucht ist, obwohl ich sie gelöscht hatte.

                  Vermutlich lag da der Fehler, denn jetzt funktioniert es.

                  Kannst Du mir sagen, was es mit der struct-joined auf sich hat und wo ich eigene structs anlegen kann, wenn nicht in einer eigenen struct.yaml?

                  Vielen Dank jedenfalls!

                  Kommentar


                    #39
                    Eigene structs sollen in die etc/structs.yaml

                    Wie im Log steht:
                    Code:
                    2019-12-21  17:06:51 WARNING  lib.item             load_itemdefinitions(): For testing the joined item structs are saved to /usr/local/shng_dev/etc/structs_joined.yaml
                    werden die structs, nachdem alle structs geladen sind (aus der etc/structs.yaml und allen geladenen Plugins) als etc/structs_joined.yaml gespeichert, damit man nachvolziehen kann, welche structs geladen sind, und wie die Struktur aussieht.

                    Die Doppelung bei Dir rührt vermutlich daher, dass Du eine struct selbst angelegt hast, die auch bereits in einem Plugin definiert ist.
                    Viele Grüße
                    Martin

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

                    Kommentar


                      #40
                      Ah, super, danke für die Eklärung. Ich habe die Zeile im Login gelesen, aber ich konnte mir unter "joined item structs" nichts vorstellen.

                      Viele Grüße

                      Kommentar


                        #41
                        Hallo Zusammen.

                        Ich bin gerade dabei, meine alte Autoblind Version auf die StateEngine zu portieren. Bisher hatte ich je Hausseite eine Vorlage, die ich dann im jeweiligen Zustand mit se_use übernommen habe. Nachdem ich zunächst mit dem struct: Befehl nicht viel anfangen konnte, bin ich nach einigen Stunden Kampf mittlerweile mehr als begeistert. Ich habe mehrere eigene structs: schon angelegt und im Test.

                        Hierzu eine Frage zur konkreten Verwendung von struct: als Vorlage für die StateEngine. Im Beispiel 2 wird empfohlen, nicht die struct:-Vorlage zu verwenden, wenn man die einzelnen Zustände ändern oder erweitern will, sondern dann quasi wieder über se_use den einzelnen Zustand zu übernehmen und abzuwandeln. Das habe ich auf der Südseite genauso auch gemacht. Angefixt durch die Mega-Zeitersparnis habe ich dann leider zu schnell entschieden, nur 1 struct-Vorlage für alle 4 Hausseiten zu nutzen. Stolpere jetzt aber darüber, dass ich doch ein paar Zustände anders ausprägen möchte.

                        Jetzt die eigentliche Frage: Kann ich meine default struct-Vorlage verwenden und dann im jeweiligen Item auch einzelne Zustände überschreiben, oder soll ich davon lieber die Finger lassen? Ist grundsätzlich nicht schlimm. Dann baue ich meine Vorlagen um. Besonders gut gefällt mir der Hinweis weiter oben, vielleicht sogar pro Zustand eine eigene Vorlage zu verwenden.

                        Der 2. Punkt der mir aufgefallen ist. Bei mir funktioniert die grafische Darstellung des Zustands nicht.
                        Code:
                        2020-03-10 08:50:08 ERROR plugins.stateengine Problem getting graph for KG.Buero.Rollo.automatik.rules. Error: [Errno 2] Datei oder Verzeichnis nicht gefunden: '/usr/local/smarthome/plugins/stateengine/webif/static/img/visualisations/KG.Buero.Rollo.automatik.rules.svg'
                        Den einzigen Hinweis, den ich gefunden habe, mit dem fehlenden Verzeichnis ist in meiner Version nicht zutreffend. Da sind die Verzeichnisse alle schon da. Oder muss ich konkret noch irgendetwas anlegen?

                        Danke schon mal für die Hilfe.
                        Viele Grüße
                        Marco


                        Kommentar


                          #42
                          Der Satz "Es wird explizit auf Template-Imports via struct verzichtet." sollte nicht als Empfehlung gesehen werden, sondern einfach nur sagen, dass in dem Beispiel keine structs zum Einsatz kommen (weil se_use früher halt der Standard war). Ich empfehle definitiv, structs zu nutzen, ist viel flexibler. Und ja, du kannst die auch überschreiben! Mach ich bei mir auch ständig.
                          Im Release 1.7 wird sich noch einiges zu dem Thema structs tun, da können auch sub-structs genutzt werden. Also fröhliches Structen!

                          Die Fehlermeldung ist übel. Ist der Ordner im Besitz von smarthome:users und hat RW Access? Hast du das Problem bei jedem Item schätze ich?

                          Was passiert, wenn du ein File mit dem gewünschten Namen anlegst, wird es überschrieben? Achte auch hier auf die Rechte.

                          Kommentar


                            #43
                            Hi Onkelandy.

                            Vielen Dank. Ordner Rechte prüfe ich heute Abend. Getestet habe ich bisher nur 1 Item.

                            Habe mich im Moment wohl etwas verstruct 🤔. Und wollte zuviel. Im Moment klappt also gar nichts. Ich bekomme die selben Casting Fehler wie schloessl bzw. hab schon gefühlt 10 Methoden versucht, meine globalen Vorgabewerte in den notwendigen Zuständen abzufragen. Ziel für heute ist, die Wünsche und Ideen zurück zu schrauben und erstmal eine lauffähige Version zu bekommen, dabei gehe ich jetzt auf 1 struct pro Zustand. Dann werde ich am Ende nur für die Beschattung je Seite eine abweichende struct definieren müssen.

                            Viele Grüße
                            Marco

                            Kommentar


                              #44
                              Machst mich neugierig- poste doch mal ein Beispiel wo es nicht funktioniert

                              Hast du das schon gelesen? https://www.smarthomeng.de/itemvorlagen-nutzen-structs
                              Zuletzt geändert von Onkelandy; 12.03.2020, 14:46.

                              Kommentar


                                #45
                                So. Ich hab jetzt mal ein bisschen was zusammen gestellt. Leider habe ich mehrfach umgebaut und getüftelt, so dass es schwer fällt, alle getesteten Kombinationen noch zusammen zu bringen. Hab im Zip-File jetzt mal den letzten Stand zusammen gestellt. Ausgangspunkt ist immer noch die "Herausforderung", die items dynamisch pro Seite zu benutzen. Davon habe ich mich im aktuellen Stand zum Teil verabschiedet, jedoch klappt es auch in diesem Versuch nicht.

                                Code:
                                stateengine.clouding.sueden:
                                rules:
                                # Item das anzeigt, ob die Helligkeit außen mehr als 25kLux beträgt
                                se_item_brightnessGTminK: Zentral.Wetterdaten.Helligkeit.Sueden.GTminK
                                # Item das anzeigt, ob die Helligkeit außen mehr als 43kLux beträgt
                                se_item_brightnessGTmaxK: Zentral.Wetterdaten.Helligkeit.Sueden.GTmaxK
                                
                                #voherige Versuche...
                                #se_item_testMinTemp: "eval:sh.return_item(se_eval.get_variable('Zentral .Beschattung.Setup.Sueden.MinTemp'))"
                                #se_item_testerMinTemp: eval:se_eval.get_variable('Zentral.Beschattung.Set up.Sueden.MinTemp')
                                
                                Clouding:
                                type: foo
                                name: Tag (beschatten)
                                
                                
                                # 'Einstieg in "Beschattung Sueden": Wenn'
                                enter:
                                # '- das Flag "Helligkeit > 43kLux" seit mindestens 600 Sekunden gesetzt ist'
                                se_value_brightnessGTmaxK: 'true'
                                se_agemin_brightnessGTmaxK: Zentral.Beschattung.Setup.Sueden.MinAgeBrightness
                                # '- es draußen mindestens 24° hat'
                                se_min_temperature: Zentral.Beschattung.Setup.Sueden.MinTemp #item:....settings.MinTemp # 24
                                se_value_doclouding: 'true'
                                Führt dann zu folgenden Meldungen:


                                Code:
                                2020-03-15 15:56:26 WARNING plugins.stateengine.EG.Wohnzimmer.Rollo.automatik. rules Problem casting 'Zentral.Beschattung.Setup.Sueden.MinTemp' to <function _cast_num at 0x7fc4b01bbf28>: Not possible to cast: .
                                2020-03-15 15:56:26 WARNING plugins.stateengine.EG.Wohnzimmer.Rollo.automatik. rules Problem casting 'Zentral.Beschattung.Setup.Sueden.MinAgeBrightness ' to <function cast_num at 0x7fc4ac0249d8>: Not possible to cast: Can't cast Zentral.Beschattung.Setup.Sueden.MinAgeBrightness to int!.
                                2020-03-15 15:56:56 WARNING plugins.stateengine.EG.Wohnzimmer.Rollo.automatik. rules Neither value nor min/max given. This might result in unexpected evalutions. Min None, max None, value None
                                Update noch zur grafischen Darstellung. Rechte waren alle korrekt. Ich hab aber übersehen, dass das Verzeichnis "visualizations" hatte tatsächlich gefehlt. Nach Anlegen kam die Fehlermeldung, dass graphviz nicht gefunden wurde. Das habe ich dann über
                                Code:
                                sudo pip3 install graphviz
                                installiert. Hat aber noch nicht endgültig zum Erfolg geführt. Jetzt bin ich mit meinem Latein am Ende.

                                Code:
                                2020-03-12  22:02:48 ERROR    plugins.stateengine Problem getting graph for EG.Wohnzimmer.Rollo.automatik.rules. Error: GraphViz's executables not found
                                Danke und Viele Grüße
                                Marco


                                Angehängte Dateien

                                Kommentar

                                Lädt...
                                X