Machst mich neugierig- poste doch mal ein Beispiel wo es nicht funktioniert
Hast du das schon gelesen? https://www.smarthomeng.de/itemvorlagen-nutzen-structs
Ankündigung
Einklappen
Keine Ankündigung bisher.
Stateengine Plugin Support
Einklappen
X
-
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
Einen Kommentar schreiben:
-
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.
Einen Kommentar schreiben:
-
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.
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?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'
Danke schon mal für die Hilfe.
Viele Grüße
Marco
Einen Kommentar schreiben:
-
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
Einen Kommentar schreiben:
-
Eigene structs sollen in die etc/structs.yaml
Wie im Log steht:
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.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
Die Doppelung bei Dir rührt vermutlich daher, dass Du eine struct selbst angelegt hast, die auch bereits in einem Plugin definiert ist.
- Likes 1
Einen Kommentar schreiben:
-
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!
Einen Kommentar schreiben:
-
Poste doch mal das ganze Item inklusive rules. Und.. was passiert denn nach dem "Geisterbefehl"?
Einen Kommentar schreiben:
-
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
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 gesetztCode:se_item_height: Rollladen.Erdgeschoss.Esszimmer.Wintergarten.Position se_item_fahren: Rollladen.Erdgeschoss.Esszimmer.Wintergarten.Fahren
Nun sollten eigentlich nur noch Befehle von den Schaltern (11.1.*) oder der Visu zu Suspend führen.Code:se_manual_include: - knx:11.1.* - Visu:*
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:
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!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
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
Einen Kommentar schreiben:
-
schloessl Schau dir mal https://github.com/smarthomeNG/plugi...e563fa8c56b73d an.
Dassollte 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.Code:self._log_debug("Currently eval results in {}", self.__get_eval())
Einen Kommentar schreiben:
-
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:
Das Ganze sieht dann in etwa so aus..:Code:mkdir plugins/stateengine/webif/static/img/visualisations
Screenshot 2019-10-13 at 06.41.01.pngZuletzt geändert von Onkelandy; 13.10.2019, 05:41.
Einen Kommentar schreiben:
-
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.
Einen Kommentar schreiben:
-
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: ....
Einen Kommentar schreiben:
-
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
Einen Kommentar schreiben:
-
Danke Onkelandy,
Deine Antwort war prompt und klar. Ich habe die Bugs ausgebessert und schon einmal einen großen Fortschritt erzielt.
Stateengine läuft jetzt wenigsten durch und die Feinheiten können bearbeitet werden.
Herzlichen Dank!
Deine Lösung geht weit in die Tiefen des Systems hinein, somit bleiben bei mir noch Lücken.
Den Bereich "Lamellen" hade ich jetzt vor" Automatik" gesetzt, läuft natürlich.
Leider gehen seitdem die Übernahmen aus meinen Vorgaben nicht mehr. Ich habe die auch einmal vor "Automatik" kopiert, leider das gleich Ergebnis.
Wenn ich mir die Werte über Items im Admin ansehe, sind diese i.O.Code:2019-08-03 14:16:23 WARNING stateengine Problem casting 'hmblind4.vo.min_sun_azimut_vorm' to <function cast_num at 0x69e40738>: Not possible to cast. 2019-08-03 14:16:23 WARNING stateengine Problem casting 'hmblind4.vo.max_sun_azimut_vorm' to <function cast_num at 0x69e40738>: Not possible to cast. 2019-08-03 14:16:23 WARNING stateengine Problem casting 'hmblind4.vo.min_sun_altitude' to <function cast_num at 0x69e40738>: Not possible to cast. 2019-08-03 14:16:23 WARNING stateengine Problem casting 'hmblind4.vo.set_temp' to <function _cast_num at 0x7607af60>: Not possible to cast. 2019-08-03 14:16:23 WARNING stateengine Problem casting 'hmblind4.vo.min_sun_azimut_vorm' to <function cast_num at 0x69e40738>: Not possible to cast. 2019-08-03 14:16:23 WARNING stateengine Problem casting 'hmblind4.vo.max_sun_azimut_vorm' to <function cast_num at 0x69e40738>: Not possible to cast. 2019-08-03 14:16:23 WARNING stateengine Problem casting 'hmblind4.vo.min_sun_altitude' to <function cast_num at 0x69e40738>: Not possible to cast. 2019-08-03 14:16:23 WARNING stateengine Problem casting 'hmblind4.vo.set_hoehe_schatt' to <function _cast_num at 0x7607af60>: Not possible to cast.
Zu Deinem Punkt 4 von gestern
Ich dachte an das LogFile beim Ablauf
gerade bei invertierten Werten würde es die Übersicht erleichtern.Code:2019-08-03 14:16:23.957345 Condition 'sun_azimut': 2019-08-03 14:16:23.958225 eval: plugins.stateengine.StateEngineCurrent.get_sun_azimut 2019-08-03 14:16:23.958532 min = 100 from item: hmblind4.vo.min_sun_azimut_vorm 2019-08-03 14:16:23.958774 max = 200 from item: hmblind4.vo.max_sun_azimut_vorm oder ähnlich
Zu Deinem Punkt 5 von gestern: wie sieht das aus
im Item unter "Automatik"
struct:
. die üblichen Statengine....
dann
Stateengine_rules_morgens
. Stateengine_rules_abends
usw.
und in der #etc/struct.yaml
stateengine_default_raffstore:
<...>
statengine_rules_morgens:
<...>
stateengine_rules_abends:
<...>
Anbei noch einmal die gekürzten Logs.
Danke für Deine Geduld!!!
state.zip
Angehängte DateienZuletzt geändert von schloessl; 03.08.2019, 14:28.
Einen Kommentar schreiben:


Einen Kommentar schreiben: