Ereignisse variabel/zufällig auslösen

Hallo alle zusammen,

für eine kleine Simulation steuere ich eine HomeMativ Funksteckdose über IPS an. Und zwar jeden Tag zu festen Zeiten. Also einen 2-zeiligen Skripit mit der On-Time geschrieben und diesen per Ereigniss auslösen. Nun würde ich gerne die Zeit des Ereignisses, gerne zufällig varrieren lassen. Also beispielseise nicht immer um Punkt 12 die Dose anmachen sondern bspw. 12Uhr± eine halbe Stunde.

Weiß da jemand eine gute Lösung?

Danke schon einmal

Schon mal die Suche benutzt?
rand() sollte dir weiter helfen :wink:

Gruß
Jens

Hallo,

würde nach jedem Start die Zeit des Ereignisses neu berechnen: 12:00 + Zufallszahl (siehe oben).
Zeit setzten siehe http://www.ip-symcon.de/service/dokumentation/befehlsreferenz/ereignisverwaltung/ips-seteventcyclictimefrom/

Gruß, Peter

Dass ich mit „rand“ zufallszahlen erzeugen kann weiß ich, schon klar. Mich verwirrt hier der Zusammenhang zwischen Skript und Ereigniss.
Wenn ich
„IPS_SetEventCyclicTimeFrom ( integer $EreignisID , integer $Stunde , integer $Minute , integer $Sekunde )“
in den zu auslösenden skript einfüge, wofür dann noch das Ereigniss, auf welches ich in dem Befehl aber hinweise?

oder kommt
IPS_SetEventCyclicTimeFrom ( integer $EreignisID , integer $Stunde , integer $Minute , integer $Sekunde )
in ein neues Skript welches das andere auslöst??? wohl kaum oder?

Hallo,
ich versteh das Problem nicht so ganz. Evtl. wäre ein Screenshot aus dem Objektbaum hilfreich.
Ich versuche es trotzdem mal.
Es gibt ein Script, das durch ein TimerEvent gestartet wird (z.B. um 12:00 Uhr).
Am Ende des Scripts kommen noch zwei Befehle, die den TimerEvent auf den nächsten Tag mit Uhrzeit 12:00 + x Min. neu stellt. Das Script startet dann am nächsten Tag mit der Zufallszeit und stellt den TimerEvent wieder neu.

Gruß, Peter

Also doch falsch verstanden. Ich habe das jetzt so umgesetzt, dass ich einmal ein Skript habe welches den Schalter um 12:45 für 62sekunden auslöst (Screenshot: Skript: 62s). Den Auslösezeitpunkt möchte ich aber variieren für zwischen 12:00 und 14:30.
Dazu habe ich jetzt ein ZWEITES skript geschrieben(zufall62s) welches das Ereignis neu setzt und zwar wie folgt:

<?

$randh=rand(12,14);
$rands=rand(0,59);
$randm=1;
if($randh<14)
$randm=rand(0,59);
else
$randm=rand(0,30);

IPS_SetEventCyclicTimeFrom(27816, $randh, $randm, $rands);

?>

Also muss ich diesen Code in den anderen Skript schreiben und den neuen weg lassen? ODer würde das so auch gehen? Mir würde jetzt nur ein Befehl fehlen welcher am ende des skriptes „62s“ den neuen skript aktiviert; aber ich glaube von denen hier:
http://www.ip-symcon.de/service/dokumentation/befehlsreferenz/skriptverwaltung/
passt keiner oder? MAcht aber an sich nichts, ich kann ja eigentlich den zweiten skirpt ja periodisch nachts aufrufen um die Zeiten des Ereignises neu und zufällig zu definieren

Danke schonmal für eure Hilfen

PS: Ich habe das zweite Skript mal probelaufen lassen, folgende Fehlermeldung kam: Fatal error: Call to undefined function IPS_SetEventCyclicTimeFrom() in C:\IP-Symcon\scripts\25128.ips.php on line 12

wie kann „IPS_SetEventCyclicTimeFrom()“ denn undefiniert sein?!?!?

Hallo,

der Befehl geht erst ab IPS 3.1!

Für ältere Versionen kannst du das mit

IPS_SetEventCyclicTimeBounds(27816, mktime($randh, $randm, $rands), 0);

ersetzen.
Die Befehle könntest du an das 62s anhängen. Da kann aber passieren, dass die neue Zeit nach der aktuellen Uhrzeit liegt und somit das Script an diesem Tag nochmal startet.
Entweder mit
IPS_SetEventCyclicDateBounds(27816, time()+86400, 0);
auch das Datum auf den Folgetag setzen oder wie du schon vorhattest, das Script separat zu lassen und zyklisch nachts laufen lassen.

Gruß, Peter