Seite 1 von 3

Cux Timer

Verfasst: 23.04.2017, 21:42
von ftpgonzo
Nabend, ist es möglich einen CuxTimer zu erstellen der Zb von 120 runterzählt,bei einen bestimmten Ereigniss pausiert und dann wieder weiterläuft ?

Sperre und Stop als Auswahlmöglichkeiten kommen da wohl nicht in Frage .....



danke :mrgreen:

Re: Cux Timer

Verfasst: 23.04.2017, 21:46
von JRiemann
Nein! Eine Pausenfunktion gibt es nicht.
Per TIMER-GET könnte man aber die Restlaufzeit auslesen und dann bei Bedarf mit diesem Wert den Timer neu setzen.
Das funktioniert aber nur per Befehlszeile. Dabei müsste einer der Skript-Spezis helfen.

Re: Cux Timer

Verfasst: 23.04.2017, 21:58
von ftpgonzo
dachte ich mir schon :( mal gucken ob es da ne möglichkeit gibt .... :D

danke

Re: Cux Timer

Verfasst: 24.04.2017, 11:07
von Cash
ich habe es nicht getestet aber es sollte so gehen.

Auslesen:

Code: Alles auswählen

var tmpa = dom.GetObject("CUxD.CUX2800001:10.TIMER_GET").State();
dom.GetObject("CUxD.CUX2800001:10.TIMER_SET").State(tmpa);
Setzen:

Code: Alles auswählen

var tmpa;
dom.GetObject("CUxD.CUX2800001:10.TIMER_SET").State(tmpa);
Das Problem sind zwei Kleinigkeiten. Du musst einen Trigger finden. Z. B. durch öffnen der Tür wird die erste Script Zeile ausgeführt.
Somit ist in der Variable tmpa die Restzeit vom Timer.
Der nächste Trigger wenn Tür geschlossen setzt den Timer wieder mit tmpa. Wichtig ist dabei natürlich das die Variable nicht durch ein anderes Programm überschrieben wurde.

Deshalb würde ich eine Systemvariable anlegen und dort Zwischenspeichern.

Code: Alles auswählen

var tmpa = dom.GetObject("CUxD.CUX2800001:10.TIMER_GET").State();
dom.GetObject("CCU SV Systemvariable").State(tmpa);
dom.GetObject("CUxD.CUX2800001:10.TIMER_SET").State(0);
zum setzen dann:

Code: Alles auswählen

var tmpa = dom.GetObject("CCU SV Systemvariable").Value();
dom.GetObject("CUxD.CUX2800001:10.TIMER_SET").State(tmpa);
Evtl beim setzen vorher noch per if abfragen ob die Systemvariable überhaupt gefüllt ist.
Wichtig nach dem auslesen ist natürlich den Timer zu stopen deshalb ein TIMER_SET mit 0.

Ich verwende das bei mir aber nicht. Ich verwende so etwas ähnliches. Ich lasse mich über sehr hohe oder sehr niedrige Temperaturen in den Zimmern per Push warnen. Am Anfang kam dann öfter die Pushnachrichten wenn die Temperatur um den Schwellenwert war.
Deshalb setze ich nun einen Timer bei der ersten Temperaturwarnung mit 10800 Sekunden (= 3 Stunden).
Vor dem Versenden frage ich dann ab ob der Timer gerade nicht läuft. Wenn er nicht läuft setze ich den Timer und verschicke die Pushnachricht:

Code: Alles auswählen

! Angabe in Minuten wie lange keine erneute Temperaturwarnung für den Raum kommen soll
integer tmpA = dom.GetObject("SV T Temperaturwarnung").Value()*60;
if(!dom.GetObject("CUxD.CUX2800001:10.WORKING").State()) {
dom.GetObject("CUxD.CUX2800001:10.TIMER_SET").State(tmpA);
....

Re: Cux Timer

Verfasst: 24.04.2017, 16:37
von uwe111
Ich habe Deinen Beitrag editiert, da das Auslesen vom aktuellen TIMER_GET-Datenpunkt mittels .State() und nicht .Value() erfolgen muss.

Viele Grüße

Uwe

Re: Cux Timer

Verfasst: 24.04.2017, 20:29
von ftpgonzo
Das hört sich ja mal nach einer Lösung an , sofern ich das hier umsetzten kann :lol:

Hintergrund ist der das meine Kids zuviel im www surfen, da ich keine festen Zeiten setzten möchte (was ja auch intern im Router geht) dachte ich mir ich mach dies über einen Timer ala Cux etc. Jetzt extra einen Hotspot einrichten und Splash page wäre ja blödsinn ...

Ich werde mir die Anletung mal morgen genauer anschauen und Testen

ich gebe bescheid :)

Re: Cux Timer

Verfasst: 24.04.2017, 21:01
von Cash
Sofern die Kids über einen PC der an einer Steckdose von Homematic hängt sollte es gehen...

Wenn die ipads oder so was nutzen fehlt Dir der Trigger. Ich würde das über die Kindersicherung vom Router lösen, wenn ich sowas wirklich machen wollte. Was ich nicht machen würde

Re: Cux Timer

Verfasst: 24.04.2017, 21:47
von ftpgonzo
Nein da sind keine Steckdosen.Das möchte ich ja via Ping lösen, ich habe einen dd-wrt und tomato router laufen .. leider kann ich bei beiden nur den Zeitraum einstellen ... keinen Timer ....(oder via script , was ich noch nicht gefunden habe)

Re: Cux Timer

Verfasst: 15.05.2017, 07:59
von dtp
Am WE hat mich der CUxD-Timer auch etwas geärgert. Hatte nämlich gedacht, dass TIMER_STOP den Timer anhält, ohne ihn auf Null zu setzen. De facto wird der Timer zwar angehalten, aber auch auf Null gesetzt. In Verbindung mit "TIMER_GET kleiner oder gleich 0 bei Aktualisierung" führt das dann zu einem ungewollten Auslösen. Nun könnte man zwar TIMER_EVENT als Trigger abfragen, da ja bei TIMER_STOP kein Event ausgelöst wird, aber vor der Anwendung von TIMER_EVENT wird ja explizit gewarnt.

Im Moment löse ich mein Problem durch die Verwendung der Timer-Sperr- und Entsperrfunktion. Funktioniert auch; aber ist das auch so gewollt?

Und noch was. Ich fände es toll, wenn man direkt per ioBroker einen Timer-Datenpunkt auslesen könnte, der den aktuellen Timer-Wert enthält. In der CUxD-Übersicht wird ja der aktuelle Timer-Wert angezeigt, nur leider lässt er sich nicht per ioBroker auslesen. Derzeit behelfe ich mir dabei, einfach im ioBroker per Javascript einen eigenen Countdown herunterzuzählen, der von TIMER_SET getriggert wird. Nur leider laufen die beiden Timer nicht immer sehr synchron. Oder gibt es da doch noch eine andere Möglichkeit, den aktuellen Timer-Wert kontinuierlich auszulesen? Ein sekündliches Aufrufen von

Code: Alles auswählen

var Time = dom.GetObject("CUxD.CUX2800001:1.TIMER_GET").State();
erscheint mir irgendwie suboptimal.

Gruß,

Thorsten

Re: Cux Timer

Verfasst: 15.05.2017, 08:58
von Xel66
dtp hat geschrieben:...erscheint mir irgendwie suboptimal.
Wäre vielleicht einen Featurerequest an Uwe111 wert. Vorschlag TIMER_PAUSE. Damit könnte man den aktuellen Stand einfrieren und durch Starten wieder weiterlaufen lassen. Habe zwar keinen Anwendungsfall dafür, aber würde das Problem umgehen. Ich benutze zwar auch TIMER_STOP an verschiedensten Stellen und löse meine Aktionen mit TIMER_GET aus, aber ich bin bisher noch nicht darüber gestolpert. Kann natürlich sein, dass meine sonstigen Randbedingungen zu dem Zeitpunkt anders sind... Ich habe gerade mal nachgeschaut. Ich habe das vermutlich intuitiv anders gemacht. Bei manchen Aktionen stetze ich den Timer verzögert auf STOP und bei anderen als erstes. Je nachdem, ob der Timer mir in die Suppe spucken würde.

Gruß Xel66