Ankündigung

Einklappen
Keine Ankündigung bisher.

Stateengine Plugin Support

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

  • schloessl
    antwortet
    Hallo Onkelandy,
    ich habe ein Problem und kämpfe schon einige Abende ohne Erfolg.

    Ich habe meine Jalousien auf die neuste Version /Def umgestellt. Alles in einem item.yaml sah schon sehr gut aus. Ich habe danach die "automtik/rules" versucht laut Beispiel in eine /etc/ struct.yaml zu legen.

    "hmblind4" ist "beispiel"

    Ein Auszug:
    Code:
    stateengine_default_raffstore:
        settings:
            mindestdauer_helligkeit:
                type: num
                cache: True
                initial_value: 30   #nur Testzwecke  
     
    ########################################## Nachführen  ###############################################
    #...#...#...#...#     # Zustand "Nachführen der Lamellen zum Sonnenstand bei großer Helligkeit",
        rules:
            type: bool
            name: Automatik Test Fenster
    
            # Relevante Standard-Attribute werden durch den Import der Templates automatisch eingebunden.
            # Item-Referenzen mittels se_item werden durch das oben eigens angelegte Template eingebunden.
            # Erste Zustandsermittlung nach 30 Sekunden
    
    #       #se_item_brightness: hmblind4.wetterstation.helligkeit
            se_item_brightness: item:.wetterstation.helligkeit
    
            # Item für Temperatur außen
    #       #se_item_temperature: hmblind4.wetterstation.temperature
            se_item_temperature: item:.wetterstation.temperature
          
            # Item das anzeigt, ob die Helligkeit aussen mehr als 25kLux beträgt
    #       #se_item_brightnessGt25k: hmblind4.wetterstation.helligkeit.gt25k
            se_item_brightnessGt25k: item:.wetterstation.helligkeit.gt25k
    
         
            # Item das anzeigt, ob die Helligkeit aussen mehr als 43kLux beträgt
    #       #se_item_brightnessGt43k: hmblind4.wetterstation.helligkeit.gt43k
            se_item_brightnessGt43k: item:.wetterstation.helligkeit.gt43k
    
    
            # Item für Behanghöhe ..hoehe
    #       #se_item_hoehe: eg.wozi.test.pos
            se_item_hoehe: item:item:hmblind4.raffstore.hoehe
    #        se_item_hoehe: item:..hoehe:
    Der Aufruf im item:

    Code:
    #items/item.yaml
    #hmblind4:
        #raffstore:
    #...#...#
    #beispiel.raffstore.automatik.settings.suspendduration = 1
    #hmblind4.raffstore.automatik.settings.suspendduration
    #...#...#     
            automatik:
                settings:
                    suspendduration:
                        name: Suspend Dauer
                        type: num
                        initial_value: 10
                        cache: True
                        visu_acl: rw
                        database: init
    #...#...#...#    
                struct:
                  - stateengine.general
                  - stateengine.state_lock
                  - stateengine.state_suspend
                  - stateengine.state_release
                  - stateengine_default_raffstore
    
                manuell:
                  ....
    Das Logfile zeigt::

    Code:
    2019-07-31  18:30:47 WARNING  stateengine      Item 'item:hmblind4.raffstore.lamelle' not found!
    2019-07-31  18:30:47 INFO     stateengine  Init state hmblind4.raffstore.automatik.rules.nachfuehren
    2019-07-31  18:30:47 WARNING  stateengine      Function 'enter' is no valid function! Please check item attribute.
    2019-07-31  18:30:47 WARNING  stateengine      Item 'item:hmblind4.raffstore.lamelle' not found!
    2019-07-31  18:30:47 WARNING  stateengine      Item 'item:hmblind4.raffstore.lamelle' not found!
    2019-07-31  18:30:47 WARNING  stateengine      Item 'item:hmblind4.raffstore.lamelle' not found!
    2019-07-31  18:30:47 ERROR    stateengine  Ignoring state hmblind4.raffstore.automatik.rules.nachfuehren because:  State 'hmblind4.raffstore.automatik.rules.nachfuehren', Condition Set 'enter_hysterese', Condition 'brightnessGt25K' Error: Condition brightnessGt25K: Neither 'item' nor 'eval' given!
    2019-07-31  18:30:47 INFO     stateengine  Init state hmblind4.raffstore.automatik.rules.Nachführen_helligkeit
    2019-07-31  18:30:47 INFO     stateengine  hmblind4.raffstore.automatik.rules.Nachführen_helligkeit.get_absolutepath('..nachfuehren'): Result = 'hmblind4.raffstore.automatik.rules.nachfuehren' (for attribute 'se_use')
    2019-07-31  18:30:47 WARNING  stateengine      Function 'enter' is no valid function! Please check item attribute.
    2019-07-31  18:30:47 WARNING  stateengine     [COLOR=#FF0000] Item 'item:hmblind4.raffstore.lamelle' not found!
    2019-07-31  18:30:47 WARNING  stateengine      Item 'item:hmblind4.raffstore.lamelle' not found!
    2019-07-31  18:30:47 WARNING  stateengine      Item 'item:hmblind4.raffstore.lamelle' not found![/COLOR]
    2019-07-31  18:30:47 INFO     stateengine      hmblind4.raffstore.automatik.rules.Nachführen_helligkeit: Reading se_use hmblind4.raffstore.automatik.rules.nachfuehren. Nevertheless, it is recommended to use struct items instead.
    2019-07-31  18:30:47 WARNING  stateengine      Determined item 'hmblind4.raffstore.automatik.rules.vo.max_sun_azimut_vorm' does not exist.
    2019-07-31  18:30:47 WARNING  stateengine      Determined item 'hmblind4.raffstore.automatik.rules.vo.min_sun_azimut_vorm' does not exist.
    2019-07-31  18:30:47 WARNING  stateengine      Item 'item:hmblind4.raffstore.lamelle' not found!
    2019-07-31  18:30:47 ERROR    stateengine  Ignoring state hmblind4.raffstore.automatik.rules.Nachführen_helligkeit because:  State 'hmblind4.raffstore.automatik.rules.Nachführen_helligkeit', Condition Set 'enter_hysterese', Condition 'brightnessGt25K' Error: Condition brightnessGt25K: Neither 'item' nor 'eval' given!
    2019-07-31  18:30:47 INFO     stateengine  Init state hmblind4.raffstore.automatik.rules.nacht
    2019-07-31  18:30:47 INFO     stateengine      hmblind4.raffstore.automatik.rules.nacht: Reading se_use hmblind4.default.raffstore.nacht. Nevertheless, it is recommended to use struct items instead.
    2019-07-31  18:30:47 WARNING  stateengine      Item 'item:hmblind4.raffstore.lamelle' not found!
    2019-07-31  18:30:47 WARNING  stateengine      Determined item 'hmblind4.raffstore.automatik.rules.wetterstation.helligkeit' does not exist.
    2019-07-31  18:30:47 WARNING  stateengine      Item 'item:hmblind4.raffstore.lamelle' not found!
    2019-07-31  18:30:47 INFO     stateengine  Init state hmblind4.raffstore.automatik.rules.morgens
    Ich habe schon mit " .. " und den ausgeschriebenen Namen probiert, leider kein Erfolg.

    Kannst Du mir bitte einen Hinweis geben, wo mein Problem zu suchen ist. Im Moment blicke ich nicht mehr durch!

    Danke Wolfgang!

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    Hi!
    Also ob jemand den Release Zustand nutzen will oder nicht, bleibt ja jedem selbst überlassen. Wer ihn nicht braucht, implementiert ihn nicht. Ich zB hab beim Schalter keine Lock-Funktion, sondern nur die Release:
    Langes Drücken -> Jalousie fährt, SE geht in Suspend
    Kurzes Drücken -> Jalousie stoppt, SE geht/bleibt in Suspend
    Doppelklick -> Release Status -> Suspend und Lock deaktiviert, normale Evaluierung der SE

    Mit dem Suspend hat's auch nix zu tun. Poste bitte deine Items wie du sie aktuell hast inklusive Logfile mit dem Fehler. Dann schau ich mir das an. Gelöst wird es bestimmt durch die aktuellste Version, die ich oben verlinkt habe. Aber es wäre besser, hier früher anzusetzen und die Wurzel des Problems zu checken.

    Einen Kommentar schreiben:


  • gama
    antwortet
    Hi,

    ich habe mir gestern Abend noch einmal die SE inkl. Beispiele angesehen. Dabei ist mir die Release Funktion aufgefallen, die ich noch nicht implementiert habe und wahrscheinlich verantwortlich ist, dass ich den Suspend / Lock Status nicht mehr verlassen kann.

    Kannst Du evtl. kurz posten, warum diese Funktion eingeführt wurde, bzw. was es damit auf sich hat?
    Verstehe den Zweck nicht ganz...

    Zudem sehe ich ein Problem, wenn die Funktionen außerhalb einer Visu (z.B. über MDT Glastaster mit Display) bedient werden sollen. Aktuell muss ich nur den Status-Text übertragen und ich sehe den Status und wie lange Standby noch läuft. Weiterhin habe ich einen Taster für LOCK. Möchte ich sperren, drücke ich einmal. Einweiteres mal für entsperren - klassisch "toggle". Sollte ich frühzeitig STANDBY verlassen wollen, so geht es auch mit dieser Taste - ich gehe zunächst in den LOCK State und durch einen zweiten Klick in zurück den Automatik Modus. Das ist meiner Ansicht nach SEHR Praxistauglich, wenn man die SE sehr KNX-nah bedienen möchte...

    Evtl. kann man die Taster Funktionen auch auf kurz/lang konfigurieren. Somit würde kurz release = 1 triggern, lang ein lock=1...


    Danke
    Markus
    Zuletzt geändert von gama; 31.07.2019, 10:07.

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    Ich könnte mir lediglich vorstellen, dass das suspend Item nicht als String angegeben ist. Aber das wäre komisch..? Nichts desto trotz sollte das hiermit abgefangen sein:
    https://github.com/onkelandy/plugins/tree/stateengine

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    Hm, also ich kann den Fehler nicht reproduzieren. Wann genau kommt der und wie sieht nun dein Item tatsächlich aus?
    Zuletzt geändert von Onkelandy; 29.07.2019, 21:32. Grund: getestet

    Einen Kommentar schreiben:


  • gama
    antwortet
    Kurze Ergänzung aus dem logging, nachdem ich eine manuelle Verstellung durchgeführt habe:


    Code:
    2019-07-29  16:27:55 ERROR    item         EG.office.window.shutter.auto.fsm Item EG.office.window.shutter.auto.fsm: problem running <bound method SeItem.update_state of EG.office.window.shutter.auto.fsm>: 'Item' object has no attribute 'startswith'
    
    Traceback (most recent call last):
      File "/usr/local/smarthome/lib/item.py", line 2224, in __update
        method(self, caller, source, dest)
      File "/usr/local/smarthome/plugins/stateengine/StateEngineItem.py", line 277, in update_state
        new_state.run_enter(self.__repeat_actions.get())
      File "/usr/local/smarthome/plugins/stateengine/StateEngineState.py", line 131, in run_enter
        self.__actions_enter.execute(False, allow_item_repeat, self.__actions_enter_or_stay)
      File "/usr/local/smarthome/plugins/stateengine/StateEngineActions.py", line 323, in execute
        action.execute(is_repeat, allow_item_repeat)
      File "/usr/local/smarthome/plugins/stateengine/StateEngineAction.py", line 158, in execute
        self._execute(actionname, self._name, repeat_text)
      File "/usr/local/smarthome/plugins/stateengine/StateEngineAction.py", line 631, in _execute
        self.suspend_execute()
      File "/usr/local/smarthome/plugins/stateengine/StateEngineAction.py", line 672, in suspend_execute
        suspend_item = self._abitem.return_item(self.__value[0])
      File "/usr/local/smarthome/plugins/stateengine/StateEngineItem.py", line 593, in return_item
        if not item_id.startswith("."):
    AttributeError: 'Item' object has no attribute 'startswith'

    Einen Kommentar schreiben:


  • gama
    antwortet
    Habs heute mittag kurz getestet: er geht jetzt in suspend, kommt aber nicht mehr raus... ich habe gesehen, dass du einiges umgestellt hast... ich muss da evtl. noch einmal über meinen code.

    Das struct in plugin.yaml hast Du selbt im Einsatz und ist großteils getestet, oder? Dann orientiere ich mich danach...

    Danke
    Markus

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    zieh dir bitte nochmals die aktuellste Version. Jetzt sollte es klappen.

    Einen Kommentar schreiben:


  • gama
    antwortet
    Mache ich gerne. In meiner SE habe ich noch ein paar mehr Zustände:
    TRACKING: wie beschrieben
    ASLEEP: zu
    SUSPEND_SHORT: nachts, weniger zeit
    COOLING: macht dicht wenn es zu warm wird
    COOLING_AWAY: macht dicht, wenn keiner im Haus ist (da braucht niemand das Licht) - kann evtl. mit weiterer condition in COOLING wandern
    PRIVACY: Sichtschutz bei morgen/abend Dämmerung evtl. auch nur wenn licht an ist.
    OPEN: Standard
    FREE: freie Positionierung

    evtl. erweitere ich noch
    VENTILATION: Wenn nachts das Fenster geöffnet ist (Rolloaden Schlitze offen, aber Raum weitestgehend dunkel)
    PROTECTION: Kinderzimmer, wenn die Balkontür aufgeht sichert der Rollanden den Absturz über den franz. Balkon

    Kann ich gerne posten, möchte aber zunächst wieder die volle Funktionalität herstellen - sonst verwirrt es nur...

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    se_name hatte ich tatsächlich nicht getestet. Mach ich noch

    Gerne Beispiele und Ideen hier posten. Ich arbeite auch gerade an einer Live Visualisierung, ein bisschen nach dem Muster von hier:
    Stateengine_Blinds_Simple.png

    Außerdem möchte ich möglichst durchdachte Sonnenstands-Template u.ä. in die plugin.yaml implementieren.
    Zuletzt geändert von Onkelandy; 28.07.2019, 19:19. Grund: Code gecheckt, es geht auch ohne suspend_text=

    Einen Kommentar schreiben:


  • gama
    antwortet
    Mir ist noch etwas aufgefallen:
    Wenn die SE in den manual Modus geht, wird state_name nicht aktualisiert (state_id, conditionset_id, conditionset_name haben hingegen die richtigen Werte).
    Ist das ein Bug oder muss ich im in der neuen Version den Namen gesondert setzen. Bislang wurde des name: Attribut vom Status übernommen...

    Im Log kommt:

    Code:
    2019-07-28  16:20:52 WARNING  StateEngineLogger EG.diningroom.window.shutter.auto.fsm           Problem with currentstate SeState item: EG.diningroom.window.shutter.auto.fsm.SUSPEND_SHORT, id EG.diningroom.window.shutter.auto.fsm.SUSPEND_SHORT.. Error: unorderable types: float() > str()
    
    2019-07-28  16:20:53 WARNING  item         EG.diningroom.window.shutter.auto.fsm Item EG.diningroom.window.shutter.auto.state_name: value "['Ausgesetzt nach Handbetrieb', 'Standby bis 01:35:29']" does not match type str. Via Logic None
    In meiner Item Config setze ich im Zustand SUSPEN den Namen mit
    Code:
    se_name: eval:stateengine_eval.insert_suspend_time("..suspend", "Standby bis %X")
    In Deinem struct-Beispiel wird hingegen in der condition eine gesonderte Variable gesetzt:
    Code:
                        se_action_suspend_end:
                          - 'function: set'
                          - "to: eval:se_eval.insert_suspend_time('..suspend', suspend_text='%X')"
                          - 'repeat: True'
                          - 'order: 2'
    In meiner Anwendung wäre das aktuelle Verfahren (alles in einer in der Namen-Variable zu speichern) sehr sinnvoll, da ich diesen Text per KNX auf die MDT Taster schicke und dort den Status sehen kann...
    Zuletzt geändert von gama; 28.07.2019, 18:45.

    Einen Kommentar schreiben:


  • gama
    antwortet
    Danke... ich habe es mittlerweile begriffen... cool!

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    Ne, das ist eine Zusatzfunktion. Wenn du struct: stateengine.general nutzt, kommt die Meldung auch nicht.
    Beispiele zum Einsatz hab ich.. die werden dann auch mal sauber verschriftlicht

    Ich möchte zB für Sonnenstand nur einen Zustand einführen, aber mehrere Bedingungssets - so ist das sauberer und übersichtlicher. Jetzt würde das aber ohne dem conditionset mit Hysterese für verschiedene Bedingungen nicht wirklich funktionieren. Sprich, ich möchte zum einen eine Hysterese für die Helligkeit, zum anderen für die Temperatur. Die "stay" Conditions Sets richten sich daher nicht nur nach dem letzten state sondern auch letzten condition set.

    Außerdem habe ich Situationen, in denen ich Aktionen nur dann ausführen will, wenn der Zustand wegen eines bestimmten Condition Sets aktiviert wurde. Beispiel: "Sicherheit" ist "Sperrzustand" übergeordnet. Ich möchte aber, dass nach Verlassen des Sicherheitszustands die Sperre wieder aktiviert wird, falls sie das vorher auch war.

    Einen Kommentar schreiben:


  • gama
    antwortet
    Hi,
    nach dem letzten git pull (auf develop) habe ich gesehen, dass se_lastconditionset_item_name und *_id eingeführt wurden.
    Auch im Log kommt
    Code:
    WARNING  StateEngineLogger ...  Problem with attribute 'se_lastconditionset_item_name'.
    Werde aber auch mittels der plugin.yaml nicht schlau was diese Funktion leisten soll. Hast Du ein Beispiel? Ersetzt es (zukünftig)
    Code:
    se_laststate_item_name
    ?

    Einen Kommentar schreiben:


  • Onkelandy
    antwortet
    schloessl Ich habe nun den Blogeintrag mit einem struct Beispiel ergänzt. Hoffe, nun ist alles klar.

    Einen Kommentar schreiben:

Lädt...
X