Ich möchte ein Item in x Minuten auf True setzen und nach y Minuten soll es wieder auf False fallen. Mit den Timer-Funktionen komme ich nicht weiter, weil es ja nur eine Schaltfunktion ausführen kann. Gibt es da irgendwas anderes um das einfach zu lösen?
Ankündigung
Einklappen
Keine Ankündigung bisher.
Item verzögert ein- bzw. ausschalten
Einklappen
X
-
Naja. Ich will ja nicht nur verzögert ausschalten, sondern auch einschalten. Und die Werte idealerweise aus einer Logik setzen. Dann wahrscheinlich mit 2 Hilfitems? Leichter gehts nicht oder?Zitat von Onkelandy Beitrag anzeigenDu kommst mit dem Timer schon weiter. Musst einfach ein Hilfsitem machen, das verzögert ausschaltet. Dieses Hilfsitem wird getriggert, sobald das eigentliche Item aktiviert wird. Also über on_update oder eval_trigger. Der eval Ausdruck wäre dann sowas wie sh.item.timer(60,0)
Wäre diese universelle Zeitschaltuhr eine Option?
Kommentar
-
Zitat von Onkelandy Beitrag anzeigenWenn du eh ne Logik nutzt, dann implementiere dort den timer ohne Hilfsitems.Wie kriege ich denn 2 Timer eines Items in der Logik?Code:# ausschalten und in 30 Sekunden anschalten sh.item.schalten(False).timer(30, True) # ??????? sh.item.schalten(False).timer(60, False)
Kommentar
-
Wie erwartet, geht das aber nicht, weil anscheinend der 2. Timer, den ersten überschreibt, was auch das Ursprungsproblem in meinem Thread war...Zitat von Onkelandy Beitrag anzeigenOhne (False)
Das Licht schaltet hier nie ein. Wenn ich die 2. Zeile auskommentiere geht es.Code:sh.EG.Diele.DALI.Decke.R.schalten.timer(10, True) sh.EG.Diele.DALI.Decke.R.schalten.timer(20, False)
Kommentar
-
Das kann gut sein, ja, da kommt dann aber das angesprochene Hilfsitem z.B. schalten_hilf zum Zug
Am besten nimmst du dort ein
rein. Oder wenn du es als Child von Decke.R.schalten machst, kannst du auch relatives Item wie folgt referenzieren:Code:enforce_updates: True on_update: EG.Diele.DALI.Decke.R.schalten = False
Code:enforce_updates: True on_update: .. = False
Und setzt den Timer in der Logik:
Code:sh.EG.Diele.DALI.Decke.R.schalten_hilf.timer(20, True)
Kommentar
-
Würde ich gerne tun, ich habe das allerdings zum Teil doch etwas anders gelöst. Das heißt ich kann zwar verzögert einschalten, aber das abschalte relisiere ich über den Aktor selbst. In dem ich die Dauer übermittlere. Sonst war mir das zu viel mit mehrerenm Items. Ich glaube das hilft dann keinen hier weiter oder?Zitat von bmx Beitrag anzeigenVielleicht kannst Du Deine Lösung ja mal dokumentieren damit andere was davon haben. Vielleicht als kleines How-To für die Webseite?
Der Ansatz war aber wichtig.
Kommentar
-
Gut, dann poste ich das mal. Ich nutze das für meine Garten-Bewässerung, dazu gibt es auch eine Logik, die aber noch nicht fertig ist.
Sinn und Zweck war hier die Bewässung meines Gartens, nicht per App, sondern automatisch. Und das funktioniert soweit auch, aber ist noch nicht fertig, da auch mein Garten noch nicht fertig ist. Mittels KNX ist ein Schaltaktor angebunden, der auf Treppenlicht eingeschaltet ist. Dort habe ich 30 Minuten eingestellt. Das ist dann quasi das Limit, falls hier was abstürzt. Den Aktor kann ich schalten bzw. auch eine Dauer übergeben. Hier übergebe ich die Beregnungs-Dauer in Minuten.
Hier also die Items:
Dazu meine dazugehörige Logik:Code:Nordost: schalten: type: bool knx_dpt: 1 knx_send: 11/0/0 knx_cache: 11/1/0 visu_acl: rw # Beregnungsdauer in Minuten Dauer: type: num knx_dpt: 5 knx_send: 11/2/0 knx_cache: 11/2/0 enforce_updates: yes visu_acl: rw sperren: type: bool cache: yes visu_acl: rw # Sperrzeit in Stunden Dauer: type: num enforce_updates: yes cache: yes visu_acl: rw on_update: - ..self = True if value > 0 else False - ..self = sh...self.timer(value*60*60, False) if value > 0 else None
Dabei wird die Logik mittels crontab "0 2,6,10,14,18,22 * *" aufgerufen. Bei mir alle 4 Stunden. Ich denke aber darüber nach das stündlich aufzurufen, da ich jetzt sowieso die Stunden in der Liste eintrage. Ich muss aber erst mal suchen, wie man den crontab jede Stunde aufruft. :-) Das kann man dann mit beliebig vielen Beregnern erweitern. Der Wind ist noch nicht umgesetzt. Mittels timer kann ich hier eine Startvorwahl treffen.Code:jetzt = sh.now() stunde = jetzt.hour # Stunden zu denen bewässert werden soll Nordost_Stunden = [6, 14, 22] # Dauer der Bewässerung in Minuten Nordost_Dauer = 20 # Startvorwahl der Bewässerung in Minuten Nordost_Start = 0 Nordost_Wind_Limit = 10 Nordost_Wind_Skip = 1 if not sh.Aussen.Garten.Bewaesserung.sperren(): if not sh.Aussen.Garten.Bewaesserung.Nordost.sperren() and stunde in Nordost_Stunden: sh.Aussen.Garten.Bewaesserung.Nordost.Dauer.timer(Nordost_Start * 60, Nordost_Dauer)
Der Grund ist, warum ich die Einstellungen in der Logik vornehmen möchte und nicht in den Items ist, dass man bei veränderten Logiken SmartHomeNG nicht neustarten muss. Bei den Items schon.
Kommentar


Kommentar