Ankündigung

Einklappen
Keine Ankündigung bisher.

Zustandsautomaten: Tipps und Tricks

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

    #16
    Zitat von mumpf Beitrag anzeigen
    Hi Jürgen,

    hier ein Beispiel:
    ZustandMitTrigger.PNG

    Gruß, Waldemar
    Hi Waldemar,
    in dem Bild ist noch ein Fehler da müsste nicht Wert drin sten sondern der Itemname Weiter.
    Viele Grüsse
    Jürgen

    Kommentar


      #17
      Hallo,

      da gibt es momentan noch einen Bug, Wenn man einen Itemnahmen einträgt, dann wird das Item bzw der Wert von dem Item verwendet.
      Im nächsten Release kann man 'Item.Pfad' eingeben, dann wird das ganze als String interpretiert.

      Bis bald

      Marcus

      Kommentar


        #18
        Hi Marcus.
        wenn man den Itemnamen einträgt geht es aber...wo ist da der Bug?
        VG Jürgen

        Kommentar


          #19
          Hi,

          heckmannju: Ja, Du hast recht, ich wollte da "Weiter", also den Itemnamen, stehen haben.

          callidomus: Marcus, ist der obige Bug neu? Ich habe das mit trigger-Items schon getestet und eben auch ausprobiert:
          Code:
          2016-12-13 22:47:06,637 [Zero] testing enter-Up conditions of state One:
              EG.KU.Abzug:0 == 0 => Pass
              trigger:EG.KU.Abzug.UpDown == EG.KU.Abzug.UpDown => Pass
              EG.KU.Abzug.UpDown:True == 1 => Pass
          Das Item wurde erkannt. Klappt also. Falls Du den Bug meinst, den ich Dir gemeldet habe, so ist das nicht bei einer trigger condition sondern bei einer value condition, bei der ich keine Möglichkeit habe, zwischen Itemnamen als string und dem Wert den Items zu unterscheiden.

          Gruß, Waldemar
          OpenKNX www.openknx.de

          Kommentar


            #20
            Zitat von Stereofeld Beitrag anzeigen
            Wir kann ich jetzt die Prüfung ausführen lassen? Bzw. alle 10 Minuten oder so, dass müsste ja nicht sekündlich geprüft werden.
            Hi Thomas,

            Du trägst beim Automaten als Trigger drin Item Außenhelligkeit ein, dann wird mit jeder Wertänderung geprüft.

            Gruß Waldemar
            OpenKNX www.openknx.de

            Kommentar


              #21
              Hallo Waldemar,

              Zitat von mumpf Beitrag anzeigen
              Du trägst beim Automaten als Trigger drin Item Außenhelligkeit ein, dann wird mit jeder Wertänderung geprüft.
              ,,, da hätte ich natürlich auch selbst drauf kommen können. Dankeschön.

              Aber ich habe das Gefühl, irgendwas stimmt mit meiner SM trotzdem nicht. Hier der Export-Code:
              Code:
              State;Context;Group;Type;Selector;Property;Aggregator;Comparator;Value
              #Active;1;;;;;;;
              #Date;2016-12-14 09:34:45+01:00;;;;;;;
              #Desc;Licht außen abschalten, falls es hell ist.;;;;;;;
              #Init;0;;;;;;;
              #Loglevel;Info;;;;;;;
              #Name;Licht - Außenbeleuchtung;;;;;;;
              #Selector;smarthome.statemachine.light_outdoor;;;;;;;
              #Trigger;smarthome.info.outdoor.brightness;;;;;;;
              #Type;Machine;;;;;;;
              #Version;1;;;;;;;
              Hell;state;;active;;;;;1
              Hell;state;;value;;;;;1
              Hell;enter;;condition;smarthome.info.outdoor.brightness;;;>=;300
              Hell;enter;;action;smarthome.light.ab.ab1;;;;0
              Dunkel;state;;active;;;;;1
              Dunkel;state;;value;;;;;0
              Dunkel;enter;;condition;year;;;>;0
              Ich habe ein extra Item für die SM angelegt (das könnte ich ja auch für Tag/Nacht verwenden), ansonsten meine ich es so gemacht zu haben, wie du es erklärt hattest. Oder?

              Ich hatte es jetzt über Nacht laufen und heute morgen hing callidomus schon wieder. Vielleicht hat es ja nichts mit der SM zu tun. Aber vorher hatte ich nie solche Probleme.

              Gruß
              Thomas

              Kommentar


                #22
                Hi Thomas,

                ich sehe an dem Zustandsautomaten keinen Fehler. Setz mal den Loglevel auf Debug. Zur Sicherheit (sollte auch so gehen) setze mal Init auf Dunkel statt 0. Wenn smarthome.statemachine.light_outdoor ein extra Item ist, dann brauchst Du auch keine Werte zuzuweisen (schadet auch nicht).
                Hat das Item smarhome.light.ab.ab1 ein enforce_updates (Abhängigkeiten immer aktualisieren) gesetzt? Wenn ja, mach es mal testweise aus.
                Du musst nicht mit dem Test bis zum morgen warten, Du kannst auch im CLI mal brightness auf 400 setzen.

                Letzendlich musst Du mal schauen (und bei bedarf posten), was im core log und im statemachines-Log steht.

                Gruß, Waldemar
                OpenKNX www.openknx.de

                Kommentar


                  #23
                  Hi,

                  ich wollte hier mal eine SM vorstellen, die einerseits schön klein ist und andererseits einige Möglichkeiten aufzeigt, die mit SM gehen.

                  Motivation:
                  Es geht um eine Treppenlichtfunktion. Ich komme bei verschiedenen Automatisierungsversuchen immer wieder in die Situation, dass ich sofort was einschalten will, aber ausschalten will ich erst nach 15 Minuten. Und zwar nachtriggerbar (also wenn in den 15 Minuten erneut eingeschaltet wird, dann wieder erst nach 15 Minuten ausschalten).

                  Technisch formuliert: Wenn das Trigger-Item auf 1 geht, geht das SM-Item sofort auch auf 1, wenn das Trigger-Item 15 Minuten lang auf 0 ist, geht das SM-Item auch auf 0. Ich habe die Funktion "Nachlauf" genannt und die Zeitspanne über ein Attribut nachlauf = x (in Sekunden) parametrisierbar gemacht.

                  Wie ist das mit der SM realisiert:
                  • Meine Hauptidee: Unter ein Trigger-Item von Typ bool (also das Item, was diese Treppenlicht-Funktion auslösen soll) kommt ein (oder mehrere) Kind-Item(s) vom Typ bool, denen die SM zugeordnet wird. Das Kind-Item muss das Attribut nachlauf = x mit der Nachlaufzeit in Sekunden definiert haben.
                  • Die SM hat als Selektor ein "*:nachlauf" angegeben, wodurch sie sich automatisch allen Items zuordnet, die dieses Attribut tragen
                  • Die SM wird vom Parent (..) getriggert
                  • Die SM hat einen Zustand "An" mit einer enter-Start condition, die prüft, ob der Parent (..) == 1 ist. Wenn ja, geht die SM in den Zustand "An", der seinerseits den Wert 1 hat und diesen in das Item schreibt, dem die SM zugeordnet ist (das ist das Kind-Item mit dem nachlauf-Attribut)
                  • Solange die SM in dem "An"-Zustand ist, triggert sie sich alle 30 Sekunden selbst und wertet ihre Zustände aus
                  • Als erstes wird die exit-condition des Zustandes "An" geprüft. Die ist erfüllt, wenn der Parent (..) wieder auf 0 ist und das Alter des Parents (also die Zeit, die der Parent den Wert 0 trägt) >= dem Wert vom Attribut nachlauf ist. In diesem Fall wird der Zustand "An" verlassen und die SM geht in den Zustand "Aus".
                  • Durch das during-30 in der SM hat diese nur die Genauigkeit von +-30 Sekunden, wenn man es genauer haben will, muss man die 30 verkleinern.
                  Damit kann man z.B. so was machen:
                  Code:
                  [Praesenz]
                      type = bool
                      knx_dpt = 1
                      knx_listen = x/y/z
                      desc = Praesenz vom PM, wird nach 30 Sekunden auf 0 gesetzt
                      [[Fuenf]]
                          type = bool
                          desc = gibt an, ob Praesenz in den letzten fuenf Minuten existierte
                          nachlauf = 300
                      [[Fuenfzehn]]
                          type = bool
                          desc = git an, ob Praesenz in den letzten fuenfzehn Minuten exisiterte
                          nachlauf = 900
                  Das ist auch gleich ein Beispiel, wie man eine SM mehreren Items zuordnet. Die untere SM ist einmal dem Item Praesenz.Fuenf zugeordnet und einmal dem Item Praesenz.Fuenfzehn.

                  Durch relative Adressierung kann die SM direkt so übernommen werden und muss nicht weiter angepasst werden. Ich habe sie auch nochmal als .zip (.csv durfte ich nicht hochladen) angehängt.

                  Code:
                  State;Context;Group;Type;Selector;Property;Aggregator;Comparator;Value
                  #Active;1;;;;;;;
                  #Date;2016-12-27 11:21:37+01:00;;;;;;;
                  #Delay;20;;;;;;;
                  #Desc;Parent war true in den letzten 'nachlauf' Sekunden;;;;;;;
                  #Loglevel;Debug;;;;;;;
                  #Name;Nachlauf;;;;;;;
                  #Selector;*:nachlauf;;;;;;;
                  #Trigger;..;;;;;;;
                  #Type;Machine;;;;;;;
                  #Version;1;;;;;;;
                  An;state;;active;;;;;1
                  An;state;;desc;;;;;Parent ist true
                  An;state;;value;;;;;1
                  An;enter;Start;condition;..;;;==;1
                  An;during;30;action;evaluate;;;;
                  An;exit;Start;condition;..;;;==;0
                  An;exit;Start;condition;..;age;;>=;:nachlauf
                  Aus;state;;active;;;;;1
                  Aus;state;;desc;;;;;Parent ist länger als 'nachlauf' Sekunden false
                  Aus;state;;value;;;;;0
                  Aus;enter;;condition;year;;;>=;0
                  Gruß, Waldemar

                  Nachlauf.zip
                  OpenKNX www.openknx.de

                  Kommentar

                  Lädt...
                  X