Variablen für Schaltzeitpunkte im CuxD-Multi-Timer verwenden?
Verfasst: 23.11.2018, 20:05
Guten Abend,
für eine Abwesenheitssimulation (AWS), die eine weitestgehend realistische Abfolge der Beleuchtungen realisiert, möchte ich den CuxD-Timer verwenden. Dazu möchte ich je Leuchte einige Einschaltzeitpunkte und die Dauer des Einschaltens definieren. Beide Werte sollen täglich pro Einschaltzeitpunkt variieren und deshalb als Variable definiert werden.
Den Schaltzeitpunkt um einen festen Wert zu verzögern ist mir nicht geglückt:
lt. Handbuch: S. 86 gilt: TIMER_SET string
„hh:mm:ss“ - auslösen um hh:mm:ss (absolut)
„+sss“ - akt. Timer um sss Sekunden erhöhen
dom.GetObject("CUxD.CUX2800001:1.TIMER_SET").State("18:18:00 +20"); !oder
dom.GetObject("CUxD.CUX2800001:1.TIMER_SET").State("18:24:00+20");
Der TIMER PRESET Eintrag sieht mit 18:18:00+20 richtig aus, aber keine Verzögerung der Auslösung
Alle anderen Versuche führen ebenfalls nicht weiter, meistens zu Syntax-Fehlern, z.B.:
dom.GetObject("CUxD.CUX2800001:1.TIMER_SET").State("12:59:00" "+20"); ! Syntax-Fehler
dom.GetObject("CUxD.CUX2800001:1.TIMER_SET").State("12:59:00"/"20"); ! keine Verzögerung, keine weitere Auslösung
Was mache ich falsch?
---------------------------------------------------------------------------------------------------------------------------
Mit dem nächsten Versuch, den Schaltzeitpunkt um einen Zufallswert zu verzögern war ich erfolgreicher:
lt. Handbuch S. 86 gilt: TIMER_SET string
„hh:mm:ss“ - auslösen um hh:mm:ss (absolut)
Erweiterung um Zufallswert:
„... rnnn*zzz“ - zufälliges Auslösen zwischen
<timer_set> und <timer_set>+nnn*zzz Sekunden. nnn
ist die zufällige Anzahl der Zeitschritte mit der Länge
zzz.
dom.GetObject("CUxD.CUX2800001:1.TIMER_SET").State("19:16:00r10*5"); ! ok
! r10 = random Anzahl von Schritten, um die das Auslösen verzögert wird, hier 10 mal
! * (multipliziert) mit der "Schrittdauer", hier 5 sec
Das funktioniert und stimmt auch mit dem Eintrag bei TIMER_PRESET überein
-------------------------------------
Nun ergibt das Ganze natürlich erst Sinn, wenn mehrere Schaltzeitpunkte, d.h. der CuxD Multi-Timer eingesetzt wird.
lt. Handbuch S. 86 gilt: TIMER_SET string
Erweiterung um mehrere Timer-Bereiche:
Mehrere TIMER_SET Strings können getrennt durch
einen Schrägstrich / nacheinander gestartet werden.
Im Forum steht dankenswerterweise statt des / immer | womit es auch funktioniert:
dom.GetObject("CUxD.CUX2800001:1.TIMER_SET").State("19:23:00r10*4|19:24:00r10*5|19:25:00r10*3|19:26:00r10*2");
Die Schaltzeitpunkte wurden mit +16, +50, +27, +18 sec Verzögerung ausgeführt, das sieht gut aus
--------------------------------------------------------------------------------------------
Jetzt sollen die Schaltzeitpunkte und Zufallswerte für die Verzögerungen als Variable eingesetzt werden, zunächst für einen Schaltzeitpunkt:
string random = "r8"; ! Maximale Anzahl Schritte der Verzögerung
string schritt = "*10"; ! Schrittlänge in sec inkl. Multiplikationszeichen *
object schalt = "19:45:00"; !Schaltzeitpunkt (frühester)
dom.GetObject("CUxD.CUX2800001:1.TIMER_SET").State(schalt #random #schritt);
WriteLine(schalt #random #schritt); ! ok 1, 0, 7 Schritte mal 10 sec Verzögerung
Ausgabe
19:45:00r8*10 ! stimmt mit TIMER_PRESET überein, scheint zu funktionieren
--------------------------------------------------------------------------------------
Für einen Schaltzeitpunkt scheint das kein Problem zu sein. Beim Einsatz mehrerer Schaltpunkte (z.B. 3) im Multi-Timer scheitere ich allerdings:
string random1 = "r8"; ! Maximale Anzahl Schritte der Verzögerung
string random2 = "r20"; ! Maximale Anzahl Schritte der Verzögerung
string random3 = "r6"; ! Maximale Anzahl Schritte der Verzögerung
string schritt = "*10"; ! Schrittlänge in sec
object schalt1 = "19:54:00"; !Auslösezeitpunkt (frühester)
object schalt2 = "19:55:00"; !Auslösezeitpunkt (frühester)
object schalt3 = "19:56:00"; !Auslösezeitpunkt (frühester)
dom.GetObject("CUxD.CUX2800001:1.TIMER_SET").State(schalt1 #random1 #schritt|schalt2 #random2 #schritt|schalt3 #random3 #schritt);
WriteLine(schalt1 #random1 #schritt); ! im TIMER_PRESET: 19:54:00r819*1
WriteLine(schalt2 #random2 #schritt);
WriteLine(schalt3 #random3 #schritt); ! keine
Ausgabe
19:54:00r8*10
19:55:00r20*10
19:56:00r6*10
Während in der Ausgabe des Skripts sinnvolle Werte angezeigt werden, wird im TIMER_PRESET der WebUI ziemlicher Unsinn angezeigt, z.B. hier 19:54:00r819*1 ! Verschiedene weitere Versuche haben leider auch keine brauchbaren Ergebnisse gezeigt.
Falls das wichtig ist, getestet habe ich mit folgendem "Programm":
Was mache oder denke ich falsch, oder ist der Multi-Timer nicht dafür geeignet mit Variablen zu arbeiten?
Über sachdienliche Hinweise würde ich mich sehr freuen!
Viele Grüße
Werner07
für eine Abwesenheitssimulation (AWS), die eine weitestgehend realistische Abfolge der Beleuchtungen realisiert, möchte ich den CuxD-Timer verwenden. Dazu möchte ich je Leuchte einige Einschaltzeitpunkte und die Dauer des Einschaltens definieren. Beide Werte sollen täglich pro Einschaltzeitpunkt variieren und deshalb als Variable definiert werden.
Den Schaltzeitpunkt um einen festen Wert zu verzögern ist mir nicht geglückt:
lt. Handbuch: S. 86 gilt: TIMER_SET string
„hh:mm:ss“ - auslösen um hh:mm:ss (absolut)
„+sss“ - akt. Timer um sss Sekunden erhöhen
dom.GetObject("CUxD.CUX2800001:1.TIMER_SET").State("18:18:00 +20"); !oder
dom.GetObject("CUxD.CUX2800001:1.TIMER_SET").State("18:24:00+20");
Der TIMER PRESET Eintrag sieht mit 18:18:00+20 richtig aus, aber keine Verzögerung der Auslösung
Alle anderen Versuche führen ebenfalls nicht weiter, meistens zu Syntax-Fehlern, z.B.:
dom.GetObject("CUxD.CUX2800001:1.TIMER_SET").State("12:59:00" "+20"); ! Syntax-Fehler
dom.GetObject("CUxD.CUX2800001:1.TIMER_SET").State("12:59:00"/"20"); ! keine Verzögerung, keine weitere Auslösung
Was mache ich falsch?
---------------------------------------------------------------------------------------------------------------------------
Mit dem nächsten Versuch, den Schaltzeitpunkt um einen Zufallswert zu verzögern war ich erfolgreicher:
lt. Handbuch S. 86 gilt: TIMER_SET string
„hh:mm:ss“ - auslösen um hh:mm:ss (absolut)
Erweiterung um Zufallswert:
„... rnnn*zzz“ - zufälliges Auslösen zwischen
<timer_set> und <timer_set>+nnn*zzz Sekunden. nnn
ist die zufällige Anzahl der Zeitschritte mit der Länge
zzz.
dom.GetObject("CUxD.CUX2800001:1.TIMER_SET").State("19:16:00r10*5"); ! ok
! r10 = random Anzahl von Schritten, um die das Auslösen verzögert wird, hier 10 mal
! * (multipliziert) mit der "Schrittdauer", hier 5 sec
Das funktioniert und stimmt auch mit dem Eintrag bei TIMER_PRESET überein
-------------------------------------
Nun ergibt das Ganze natürlich erst Sinn, wenn mehrere Schaltzeitpunkte, d.h. der CuxD Multi-Timer eingesetzt wird.
lt. Handbuch S. 86 gilt: TIMER_SET string
Erweiterung um mehrere Timer-Bereiche:
Mehrere TIMER_SET Strings können getrennt durch
einen Schrägstrich / nacheinander gestartet werden.
Im Forum steht dankenswerterweise statt des / immer | womit es auch funktioniert:
dom.GetObject("CUxD.CUX2800001:1.TIMER_SET").State("19:23:00r10*4|19:24:00r10*5|19:25:00r10*3|19:26:00r10*2");
Die Schaltzeitpunkte wurden mit +16, +50, +27, +18 sec Verzögerung ausgeführt, das sieht gut aus
--------------------------------------------------------------------------------------------
Jetzt sollen die Schaltzeitpunkte und Zufallswerte für die Verzögerungen als Variable eingesetzt werden, zunächst für einen Schaltzeitpunkt:
string random = "r8"; ! Maximale Anzahl Schritte der Verzögerung
string schritt = "*10"; ! Schrittlänge in sec inkl. Multiplikationszeichen *
object schalt = "19:45:00"; !Schaltzeitpunkt (frühester)
dom.GetObject("CUxD.CUX2800001:1.TIMER_SET").State(schalt #random #schritt);
WriteLine(schalt #random #schritt); ! ok 1, 0, 7 Schritte mal 10 sec Verzögerung
Ausgabe
19:45:00r8*10 ! stimmt mit TIMER_PRESET überein, scheint zu funktionieren
--------------------------------------------------------------------------------------
Für einen Schaltzeitpunkt scheint das kein Problem zu sein. Beim Einsatz mehrerer Schaltpunkte (z.B. 3) im Multi-Timer scheitere ich allerdings:
string random1 = "r8"; ! Maximale Anzahl Schritte der Verzögerung
string random2 = "r20"; ! Maximale Anzahl Schritte der Verzögerung
string random3 = "r6"; ! Maximale Anzahl Schritte der Verzögerung
string schritt = "*10"; ! Schrittlänge in sec
object schalt1 = "19:54:00"; !Auslösezeitpunkt (frühester)
object schalt2 = "19:55:00"; !Auslösezeitpunkt (frühester)
object schalt3 = "19:56:00"; !Auslösezeitpunkt (frühester)
dom.GetObject("CUxD.CUX2800001:1.TIMER_SET").State(schalt1 #random1 #schritt|schalt2 #random2 #schritt|schalt3 #random3 #schritt);
WriteLine(schalt1 #random1 #schritt); ! im TIMER_PRESET: 19:54:00r819*1
WriteLine(schalt2 #random2 #schritt);
WriteLine(schalt3 #random3 #schritt); ! keine
Ausgabe
19:54:00r8*10
19:55:00r20*10
19:56:00r6*10
Während in der Ausgabe des Skripts sinnvolle Werte angezeigt werden, wird im TIMER_PRESET der WebUI ziemlicher Unsinn angezeigt, z.B. hier 19:54:00r819*1 ! Verschiedene weitere Versuche haben leider auch keine brauchbaren Ergebnisse gezeigt.
Falls das wichtig ist, getestet habe ich mit folgendem "Programm":
Was mache oder denke ich falsch, oder ist der Multi-Timer nicht dafür geeignet mit Variablen zu arbeiten?
Über sachdienliche Hinweise würde ich mich sehr freuen!
Viele Grüße
Werner07