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.
Ankündigung
Einklappen
Keine Ankündigung bisher.
Stateengine Plugin Support
Einklappen
X
-
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
-
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'
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
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.
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
-
Ja, genau, das habe ich auch entdecktWerde 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/482Zuletzt geändert von Onkelandy; 13.02.2021, 16:25.
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!
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
-
Zitat von Onkelandy Beitrag anzeigenDas sollte leicht fixbar sein. Hab einen PR auf github gesehen, der aber wieder geschlossen wurde?
Kommentar
Kommentar