Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
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.
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.
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.
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.
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
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar