Trigger OnValue ?

Hallo

ich lasse mich durch IPS wecken, dafür habe ich bisher ein script auf die uhrzeit triggern lassen (OnChange), so nach dem Motto wenn Uhrzeit gleich Weckzeit dann mach das…

Dies bedeutet ja aber das dass Script bei jeder Änderung der Uhrzeit ausgeführt wird, was ja nicht Sinnvoll ist.

Nun dachte ich das ich das per Trigger OnValue lösen/ändern könnte aber dort muss ich ja das Value eintragen.
Ich möchte aber das dass Value aus der Variablen „Weckzeit“ geholt wird und dann eben wenn die Uhrzeit = Weckzeit das Script ausgeführt wird.

Ist das irgendwie möglich, ich habe einfach keinen Plan wie ich das hinbekomen kann.
Wenn mir jemand einen Tip geben kann wäre ich sehr Dankbar :rolleyes:

Nimm doch einfach den TimerWizard.

Du kannst auch per Script neue Wecker erstellen.


//Nächster Tag, 8:00
$weckzeit=date("d.m.y H:i", mktime(8, 0, 0, date("m"), date("d")+1));

//Alten Wecker löschen
TWZ_DeleteItem("Wecker");

//Neuen Wecker erstellen
 TWZ_CreateItem("Wecker", true, "Once", Array("datetime"=>$weckzeit),  "Macro", Array("scriptname"=>"MeinWeckScript"));
  

paresy

Hallo Horst,

Du kannst auch dieses kleine Script mit einer 3-zeiligen Funktion verwenden:


//******************************************************************************
// Script sekundengenau zeitgesteuert starten
// ==========================================
//
// Parameter:
// $time_to_start : Startzeitpunkt im UNIX Timestamp-Format
// $script_to_run : Script das gestartet werden soll
//
//
// Beispiele für Startzeiten:
// (alle mktime-Parameter sind Ineteger-Werte)
//
// $time_to_start = mktime($stunde, $minute, $sekunde, $monat, $tag, $jahr);
//
// 26.03.07 13:42:17
// $time_to_start = mktime(13, 42, 17, 3, 26, 7);
//
// 13:42:17
// $time_to_start = mktime(13, 42, 17);
//
//
//------------------------ ! ! !  WICHTIG  ! ! ! -------------------------------
//
// das zu startende Script muss seinen eigenen ScriptTimer löschen, da es sonst
// periodisch gestartet wird:
// IPS_SetScriptTimer(<eigener Name>, 0);
//
//------------------------------------------------------------------------------
function Run_at($time_to_start, $script_to_run)
{
 $starttime = $time_to_start - time();       // Zeit bis zum Start in Sekunden
 if ($starttime<=0) $starttime += 24*60*60;  // falls zu spät, starte 24h später
 IPS_SetScriptTimer($script_to_run, $starttime);
}
//******************************************************************************

Die Erklärung steht im Script.

Im Gegensatz zum TimerWizard funtioniert dieses Script sekundengenau!

Gruß
HJH

Danke paresy und hjh,

werde es am Wochenende mal probieren.

:confused:
Frage zur Schriptausführung „OnValue“: Ich möchte ein script bei Änderung einer Variable von False auf True genau einmal ausführen. Geht das mit „OnValue“, True? Oder wird das script dann mehrmals ausgeführt, solange die Variable auf True steht? Entspricht das dann einer Flankenerkennung (Rise/Fall)?

Es wird immer ausgeführt, wenn der Wert dem Sollwert entspricht. Heißt, dass das Script nochmal ausgeführt wird, wenn der PIRI erneut sendet.

paresy

Das beantwortet nicht so ganz meine Frage. Konkret wird bei mir die Variable 2 s auf True gesetzt (Wago, Taster an DI). Das Script soll nur einmal laufen. Oder läuft es alle XX ms mehrmals bis die Variable wieder false ist? Oder beim Update der Variable nochmal?


Oder beim Update der Variable nochmal?

Genau. Es muss immer ein Event da sein. Beim WAGO Modul wird die Variable automatisch alle 60sek geupdated bzw bei Wertwechsel.

paresy

Das ist aber ungünstig. In diesem Fall würde das Script zweimal laufen: 1. wenn die Variable sich ändert, 2. nach 60-X Sekunden (Update d. Var.)

Die Variable wird nach 120 s wieder false gesetzt, mit 60 s funktioniert es nicht zuverlässig.

Um das zu verhindern müsste ich dann ja in jedes script ein „Zeitsperre“ einbauen :mad: