Ankündigung

Einklappen
Keine Ankündigung bisher.

Stateengine Plugin Support

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

    Das mit Lock und Release State ist ja prinzipiell "klar" bzw. easy, weil beide Stati oberhalb von Suspend sind.. Ich hab hier mal einen prove of concept erfolgreich zum Laufen gebracht mit einem se_releasedby Attribut. Das finde ich schlüssig und sehr flexibel und auch sehr einfach zu konfigurieren. Versuche nun, das Ganze noch so hinzubekommen, dass man auch Listen angeben und das Attribut bei beliebigen States einsetzen kann.

    Kommentar


      Cool. Vielleicht teilst Du mal den Code, wenn Du durch bist. Sehe ich mir gerne an...

      Kommentar


        Es ist vollbracht - zieht euch am besten die aktuellste Version von meinem github Repo hier: https://github.com/onkelandy/plugins...ne/stateengine

        Der Code zum se_released_by Feature hat sich leider im Laufe der Tests und anpassungen zu einer Katastrophe entwickelt. Funktionieren müsste es - aber da geh ich nochmals drüber. Falls jemand Tipps hat, wie das alles nobler zu bewerkstelligen wäre, sehr gerne. Ich blick selber nicht mehr ganz durch, da sich die Funktionsweise von se_released_by als doch recht komplex herausgestellt hat.

        Die Doku ist auch aktualisiert, also am besten dort unter 13_sonstiges nachlesen.

        Kommentar


          gama Schon getestet? Hast du Ideen für den Code..? Ich hab mir überlegt, manche Infos in die States als Properties auszulagern, aber richtig was bringt das auch nicht.

          Was vermutlich vernünftig wäre.. beim ersten Start dafür zu sorgen, dass der Suspend nicht gleich aufgelöst werden kann, falls der auflösende Zustand eingenommen werden könnte. Sondern erst beim nächsten Mal..?

          Kommentar


            Nein, leider noch nicht wirklich. Ich hoffe auf diese Woche...

            Kommentar


              Ich habe ein Problem mit dem eingebauten StateEngine-Logging in 1.8.1.
              chalte ich den log_level auf z.B. 2 dann soll ja geloggt werden. Das wird auch versucht, allerdings kommt es dabei immer zu einer Fehlermeldung
              Code:
              2021-02-13 14:35:35 ERROR lib.item.item Item heizenlueften.effiziento.heizstaberlaubt.automatik .rules: problem running <bound method SeItem.update_state of heizenlueften.effiziento.heizstaberlaubt.automatik .rules>: [Errno 2] Datei oder Verzeichnis nicht gefunden: 'var/log/StateEngine/2021-02-13-heizenlueften_effiziento_heizstaberlaubt_automatik _rules.log'
              Traceback (most recent call last):
              File "/usr/local/smarthome/lib/item/item.py", line 1352, in __update
              method(self, caller, source, dest)
              File "/usr/local/smarthome/plugins/stateengine/StateEngineItem.py", line 426, in update_state
              self.__logger.debug("Run queue to update state. Item: {}, caller: {}, source: {}".format(item, caller, source))
              File "/usr/local/smarthome/plugins/stateengine/StateEngineLogger.py", line 176, in debug
              self.log(2, text, *args)
              File "/usr/local/smarthome/plugins/stateengine/StateEngineLogger.py", line 152, in log
              with open(self.__filename, mode="a", encoding="utf-8") as f:
              FileNotFoundError: [Errno 2] Datei oder Verzeichnis nicht gefunden: 'var/log/StateEngine/2021-02-13-heizenlueften_effiziento_heizstaberlaubt_automatik _rules.log'
              Zwischendurch hatte das aber auch einmal funktioniert, da ich im log-File Einträge hatte.

              Nun kann ich nicht kontrollieren, ob die Meldung stimmt, da der Pfad ja relativ ist und ich somit glauben muss, dass in dem Pfad wo das probiert wurde dieser Pfad tatsächlich nicht vorhanden ist. Ich habe daher in die Fehlermeldung eine Ausgabe des current-working-directories eingebaut und siehe da das cwd ist: /usr/local/smarthome/plugins. Dort gibt es tatsächlich kein var-Verzeichnis.

              Ich starte smarthomeng so:
              Code:
               [smarthome@smarthome /usr/local/smarthome]$ python3 bin/smarthome.py -f
              Also im Verzeichnis /usr/local/smarthome, dem Basisverzeichnis. Wer das cwd dann nach /usr/local/smarthome/plugins ändert ist mir unklar.

              Im plugin.yaml von stateengine steht bei der Hilfe zu log_directory:
              Code:
              Die Logdateien der erweiterten Protokollierung werden in das
              hier angegebene Verzeichnis geschrieben.
              Wenn der angegebene Verzeichnisname mit "/" beginnt wird er als
              absoluter Verzeichnisname behandelt. Alle anderen
              Verzeichnisnamen werden als Unterverzeichnisse des smarthomeNG
              Basisverzeichnisses behandelt. Das angegebene Verzeichnis wird
              angelegt, wenn es nicht existiert.
              Wenn hier kein abweichendes Verzeichnis angegeben ist, wird das
              Verzeichnis ``<smarthome_base_directory>/var/log/AutoState/``
              verwendet.
              das liest sich für mich so, als ob geprüft wird ob das erste Zeichen des log_directory ein "/" ist und wenn nicht dann wird das Basisverzeichnis von SmarthomeNG davor gesetzt. Wie man aber an der Fehlermeldung sieht fehlt das Basis-Verzeichnis am Anfang. Im Koding habe ich auch nichts gefunden.

              Schade ist ausserdem dass der Fehler beim Logging zu der Exception und damit zum Abbruch der ganzen Aktion führt ...

              Wie gebe ich nun das Log-Directory relativ zum Basisverzeichnis an?

              Kommentar


                Hi!
                Bezüglich des Pfades ist eigentlich schon ewig nichts geändert worden. Aufgefallen ist mir, dass du vor dem rules überall ein Leerzeichen hast. Kommt das vom Copy Paste oder passt da was in deinem yaml File nicht..? Klappt es bei anderen Items? Wird das Verzeichnis angelegt?

                Wenn du im logging.yaml einen Eintrag für plugins.stateengine.general anlegst, bekommst du dort zum Start auch ein paar Infos zum Log Directory.

                Hast du schon mal probiert, das Directory selbst anzugeben im plugin.yaml?
                Zuletzt geändert von Onkelandy; 13.02.2021, 15:58.

                Kommentar


                  Ich habe noch ein bischen weitergeforscht.

                  Der log_level ist global auf 0. Nur bei einer Stateengine ist der log_level auf 2 gesetzt. In __init__.py:65 sehe ich gerade, dass nur wenn log_level > 0 ein Teil durchlaufen wird, wo das log_directory um base erweitert wird ...

                  Kommentar


                    Ja, genau, das habe ich auch entdeckt Werde das entsprechend fixen. Außerdem hab ich einen Fix implementiert, dass die stateengine auch weiterläuft, sollte die Logdatei nicht (mehr) existieren. Werde ich in einigen Minuten in den Develop Branch der Plugins pushen.
                    Danke fürs Aufdecken.

                    Kannst du das hier bitte testen mit deinem Setup?
                    https://github.com/smarthomeNG/plugins/pull/482
                    Zuletzt geändert von Onkelandy; 13.02.2021, 16:25.

                    Kommentar


                      Vielen Dank! Die Änderung funktioniert.

                      Kommentar


                        Das se_released Feature ist jetzt im develop Branch. Wäre schön, es würde jemand in Bälde testen.

                        Kommentar


                          Ich habe eine merkwürdige Meldung im Log (smarthomeNG 1.8.1, plugin-Version 1.8.2):
                          Code:
                          2021-02-24  07:23:45 WARNING  plugins.stateengine.garage.garage.ladeplatz1.automatik.rules      Item 'Name vom Item' not found!
                          Das ganze kommt von StateEngineItem.py:782. Die dort aufgelöste "item_id" wird (soweit ich das verstanden habe) in StateEngineCondition.py:109 in das Dictionary getan. Dort allerdings via "str(self.__item)", also mit dem Namen.
                          Solange das Item keinen Namen über das Attribut "name" bekommen hat, wird als Name der Pfad verwendet. D.h. sobald man dem Item einen Namen gibt, dann kommt es zu dieser Meldung.

                          Kommentar


                            Das sollte leicht fixbar sein. Hab einen PR auf github gesehen, der aber wieder geschlossen wurde?

                            Kommentar


                              Zitat von Onkelandy Beitrag anzeigen
                              Das sollte leicht fixbar sein. Hab einen PR auf github gesehen, der aber wieder geschlossen wurde?
                              Ja, da hatte ich versucht das zu fixen, da es mir auch einfach erschien. Das war dann aber doch nichts. Ich habe da nicht den rechten Überblick was genau das Problem ist.

                              Kommentar


                                Schau ich mal. Dass dein item doppelt garage, also
                                garage.garage.ladeplatz1.automatik.rules ist Absicht?!

                                Kommentar

                                Lädt...
                                X