Zufallabweichung in Minuten

Hallo,
ich habe keine Ahnung vom Skripten, habe mir jedoch nun ein funktionierendes Skript gebastelt, das innerhalb eines Ablaufplans nach einer Erfassung durch eine Kamera, das Skript startet. Das Skript löst mit Zeitversatz eine Hue Szene aus, die nach 55 Sekunden wieder ausgeht.

Kamera erfasst eine Bewegung → Die Lichtszene (Hue Szene mit Modul V2 von Kai) geht nach 9 Sekunden an und nach 55 Sekunden wieder aus.

<?php

//Neun Sekunden warten
IPS_Sleep(9000);

RequestAction(12956, "9661201a-2679-4598-bf36-70d1d0f7bebd");

//55 Sekunden warten
IPS_Sleep(55000);

RequestAction(42724, false);

Gibt es eine Möglichkeit per Skript eine „Zufallsabweichung in Minuten“ bei der zweiten Zeitangabe, von beispielsweise ± 15 Sekunden einzubauen?

Viele Grüße
marvus

Versuche es damit:

$rds=rand(1000, 10000);  						// erstellt Zufallszahl zwischen 1.000 und 10.000
IPS_Sleep($rds);

VG!

1 „Gefällt mir“

Das funktioniert. Vielen Dank :slight_smile:

Guten Morgen.

Mit IPS_Sleep einen PHP Thread 55 Sekunden zu blockieren ist meistens keine gute Idee. Sieh Dir einmal dieses Beispiel aus der Dokumentation über die Verwendung eines Script-Timers an (klick).

Gruesse.

1 „Gefällt mir“

Danke für den Hinweis. Da hast du sicherlich recht.
Aus deinem Link werde ich leider nicht schlau. Hast du denn für mich einen php Schnipsel, den ich einfügen kann und der ebenso einfach funktioniert?

Viele Grüße
Marvus

Na gleich das erste Beispiel: " … EIN GERÄT EINSCHALTEN UND NACH 60 SEKUNDEN WIEDER AUSSSCHALTEN"

Ich habe jetzt mal versucht das erste Beispiel mit „rand“ umzusetzen, was leider nicht gelingt. Bist du so nett und schaust mal drüber?
Ich möchte ja nach wie vor noch eine Zufallsvariable beim Ein- und Ausschalten in einem gewissen Bereich haben. Das Licht geht nicht im gewünschten Zeitbereich an und es geht überhaupt nicht aus. :sob:

<?php

if($_IPS['SENDER'] == "TimerEvent")
{
    //Aus Befehl
    RequestAction(42724, false);

    //Timer ausschalten
    IPS_SetScriptTimer($_IPS['SELF'], $rds=rand(10000, 20000)); // erstellt Zufallssekunden zwischen 10 und 20
} else {
    //An Befehl
    RequestAction(12956, "9661201a-2679-4598-bf36-70d1d0f7bebd");

    //Timer anschalten
    IPS_SetScriptTimer($_IPS['SELF'], $rds=rand(8000, 13000));  // erstellt Zufallssekunden zwischen 8 und 13
}

Sicherlich nicht schön, da auf dem Phone:

if($_IPS['SENDER'] == "TimerEvent")
{
    //Aus Befehl
    RequestAction(42724, false);

    //Timer ausschalten
    IPS_SetScriptTimer($_IPS['SELF'], 0);
} else {
    //An Befehl
    RequestAction(12956, "9661201a-2679-4598-bf36-70d1d0f7bebd");

    //Timer anschalten
    $rds=rand(8, 13);  // erstellt Zufallssekunden zwischen 8 und 13
IPS_SetScriptTimer($_IPS['SELF'], $rds);
}

Das Skript könntest Du mit einem Ablaufplan auslösen, der 9 SEK wartet nach Auslöser durch die Variable, oder durch ein 2. Skript mit Timer (vgl. dazu etwa hier)…

Danke, ich habe es jetzt erstmal so wie CarnivoreD es schreibt umgesetzt. Über den Ablaufplan habe ich eine „Warte-Zeit“ eingebaut. Natürlich hätte ich lieber eine leichte zufällige Abweichung beim Anschalten des Lichtes. Das mit dem Sript habe ich aber nicht hinbekommen.
Dazu fehlt mir, wie das Script genau aussehen soll. Zudem habe ich beim Einfügen des Hilfsscripts in das Ausgangsscript immer in genau dieser Zeile einen Fehler bekommen.

Falls jemand noch die Muße hat, mir die fehlenden Schritte zu erklären, würde ich mich freuen. So wie es jetzt ist, ist es aber auch erstmal ok. Das andere wäre halt nicht ganz so berechenbar und mit der Stoppuhr überführbar :wink:

Das Prinzip ist das gleiche, Du musst doch gar nicht viel anpassen! Das Skript, das das zweite Skript aufruft, wäre wir folgt, wobei 12345 die ID des aufzurufenden Skriptes ist:


if($_IPS['SENDER'] == "TimerEvent")
{
    //Zweite Skript aufrufen
    IPS_RunScript(12345);

    //Timer ausschalten
    IPS_SetScriptTimer($_IPS['SELF'], 0);
} else {
    
    //Timer anschalten
    $rds=rand(8, 13);  // erstellt Zufallssekunden zwischen 8 und 13
    IPS_SetScriptTimer($_IPS['SELF'], $rds);
}