Ankündigung

Einklappen
Keine Ankündigung bisher.

Stateengine Plugin Support

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

  • EIB@Home
    antwortet
    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


    Einen Kommentar schreiben:


  • arnix
    antwortet
    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:


  • Msinn
    antwortet
    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.

    Einen Kommentar schreiben:


  • arnix
    antwortet
    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:


  • Onkelandy
    antwortet
    Poste doch mal das ganze Item inklusive rules. Und.. was passiert denn nach dem "Geisterbefehl"?

    Einen Kommentar schreiben:


  • arnix
    antwortet
    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

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    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.

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    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.

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    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:


  • Onkelandy
    antwortet
    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:


  • Onkelandy
    antwortet
    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:


  • schloessl
    antwortet
    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.

    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.
    Wenn ich mir die Werte über Items im Admin ansehe, sind diese i.O.

    Zu Deinem Punkt 4 von gestern
    Ich dachte an das LogFile beim Ablauf
    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
    gerade bei invertierten Werten würde es die Übersicht erleichtern.

    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 Dateien
    Zuletzt geändert von schloessl; 03.08.2019, 14:28.

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    Damit kommen wir schon weiter:
    Problem 1: - 'to: eval:sh.stateengine_eval.sun_tracking()'
    Auf die Schnelle hab ich in der Doku nur die (korrekte) Syntax gefunden: 'to: eval:stateengine_eval.sun_tracking()' - also OHNE sh.
    Falls du irgendwo was mit sh. gelesen hast, bitte Link schicken, dann muss ich das ausbessern.


    Problem 2: WARNING: Problem casting 'hmblind4.vo.mindesdauer_helligkeit'
    Da fehlt ein t!

    Problem 3: Im Zustand Nachführen:
    se_item_temperature: item:hmblind4.wetterstation.temperatur
    se_item_brightnessG435k: hmblind4.wetterstation.brightnessG435k
    Zwei Fehler: In Zeile 1 muss das item: weg, wie schon erwähnt. Außerdem haben beide Zeilen nichts im Zustand verloren. Die gehören unter "rules", nicht in den Zustand. Daraus resultiert auch der Fehler zum "enter is not a valid function"

    Problem 4: Die besagten Items höhe und Lamelle existieren schlichtweg nicht. Das kannst du einfach im Admininterface nachschauen. Du überschreibst raffstore. Wenn du höhe, Lamelle, etc. einfach direkt vor das "Automatik" setzt, läuft alles. Dass das nun mit einer alten Plugin Version läuft, kann eigentlich nicht sein - es hat mit dem Plugin nichts zu tun. Wenn ein Item(baum) in einem ANDEREN File ergänzt wird, funktioniert das. Im gleichen yaml File wird die erste Definition überschrieben.

    Problem 5: Ich würde empfehlen, pro Zustand ein struct zu erstellen, gleich mit passenden settings (bzw. vo bei dir). Dadurch wärst du deutlich flexibler und immer auf der sicheren Seite.

    Zu deinen anderen Fragen:

    Zitat von schloessl Beitrag anzeigen
    Im Trace sieht man z.B. se_brightness: vo_set:brightness, aber leider nicht den wahren Wert.
    Ist es möglich hier noch den Value = xx zusätzlich auszugeben?
    Ich vermute, du meinst den Beginn des Logs? Hier den Wert anzugeben, macht keinen Sinn, da er sich ja bei der Evaluierung des Status ändern kann. Bei der Evaluierung wird der Wert ja aus dem Item gelesen und auch im Logfile entsprechend bekannt gegeben.


    Zitat von schloessl Beitrag anzeigen
    Hier bin ich unsicher:
    se_action_hoehe: - 'function: set' - 'to: 0' wie setze ich hier ein "vo.hoehe.nacht" ein?
    https://www.smarthomeng.de/user/plug...user_doc6.html werde ich in dem Fall noch klarer spezifizieren.
    Code:
    se_action_hoehe:
      - 'function: set'
      - 'to: item:vo.hoehe.nacht'

    Einen Kommentar schreiben:


  • schloessl
    antwortet
    Danke Onkelandy,
    die Fehler lauf vorherigem Post habe ich ausgebessert und schon wieder "unzählige" Versuche unternommen.

    Das eigentliche Problem "Lamelle fehlt" bleibt bestehen.

    Ich habe einmal die wichtigsten Protokelle in ein Zip gelegt. Meine große Bitte, falls Du einmal Zeit hast schaue einmal wo meine Lamlle und Hoehe verschwindet.
    Da meine Lamellen in der alten Version problemlos laufen, besteht kein Zeitdruck. Also bitte nur bei Gelegenheit.

    Es gibt noch ein paar Warnings mit den Triggern, die ich bis jetzt einfach "übersehen" habe , bis einmal meine Lamellen wieder auftauchen.

    Vorgabewerte habe ich einem Bereich "vo" hinterlegt, die ich im Eisatzprogramm aus einer DB versorge.

    Noch eine Bitte.
    Im Trace sieht man z.B. se_brightness: vo_set:brightness, aber leider nicht den wahren Wert.
    Ist es möglich hier noch den Value = xx zusätzlich auszugeben?

    Hier bin ich unsicher:
    se_action_hoehe: - 'function: set' - 'to: 0' wie setze ich hier ein "vo.hoehe.nacht" ein? stateengine_schloessl.zip
    Angehängte Dateien
    Zuletzt geändert von schloessl; 02.08.2019, 15:01.

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    Das ist etwas zu wenig Info. Worum gehts? Um die lamelle? Wie sieht das ganze hmblind4 Item aus? Gibt es
    hmblind4.raffstore.lamelle?
    Hier ist ein Fehler:
    se_item_hoehe: item:item:hmblind4.raffstore.hoehe

    Mir ist nich ganz klar, was der Punkt nach item: machen soll:
    se_item_brightness: item:.wetterstation.helligkeit

    Im Log lese ich was von se_use. Würde ich nicht nutzen, wenn du structs nutzt.

    Bei der se_item_... ist klar, dass es ein Item ist. Also kein item: voran stellen!!
    Auch das Item
    hmblind4.raffstore.automatik.rules.vo.max_sun_azim ut_vorm macht keinen Sinn. Bitte nochmals zurück zum Start: https://www.smarthomeng.de/user/plug...user_doc3.html
    Siehe auch: https://www.smarthomeng.de/user/plug...user_doc8.html
    Zuletzt geändert von Onkelandy; 31.07.2019, 19:57.

    Einen Kommentar schreiben:

Lädt...
X