Hallo,
hier mein Code zur Timer Behandlung:
Aufruf der Funktion:
TimerDelay($_IPS['INSTANCE'],$_IPS['INSTANCE2'], $_IPS['DURATION'], $SC_Name);
die Funktion:
function TimerDelay($id, $id2, $time, $name){
$sekunden=intval(substr($time, 0,-3));
$msekunden=substr($time, -3, 3);
$timerid = IPS_GetObjectIDByName($id." ".$id2." ".$name, $_IPS['SELF']);
#echo "Timer: ".$timerid."
";
if ($timerid ==0){
$newtimer = IPS_CreateEvent(1);
IPS_SetParent($newtimer, $_IPS['SELF']);
IPS_SetName($newtimer, $id." ".$id2." ".$name);
IPS_Sleep(intval($msekunden));
IPS_SetEventCyclic($newtimer, 0, 0, 0, 0, 1, $sekunden);
IPS_SetEventCyclicDateFrom($newtimer, 0, 0, 0);
IPS_SetEventCyclicDateTo($newtimer, 0, 0, 0);
IPS_SetEventCyclicTimeFrom($newtimer, (int)date("H"), (int)date("i"), (int)date("s"));
IPS_SetEventCyclicTimeTo($newtimer, 0, 0, 0);
IPS_SetEventActive($newtimer, true); //Ereignis aktivieren
}
else
{
IPS_Sleep(intval($msekunden));
IPS_SetEventCyclic($timerid, 0, 0, 0, 0, 1, $sekunden);
IPS_SetEventCyclicDateFrom($timerid, 0, 0, 0);
IPS_SetEventCyclicDateTo($timerid, 0, 0, 0);
IPS_SetEventCyclicTimeFrom($timerid, (int)date("H"), (int)date("i"), (int)date("s"));
IPS_SetEventCyclicTimeTo($timerid, 0, 0, 0);
IPS_SetEventActive($timerid, true); //Ereignis aktivieren
}
}
und reagieren (deaktivieren) auf das Timer Event:
case "TimerEvent":
IPS_SetEventActive($_IPS['EVENT'], false); //Ereignis deaktivieren
$timer = IPS_GetName($_IPS['EVENT']);
$_IPS['INSTANCE'] = intval(substr($timer,0,5));
$_IPS['INSTANCE2'] = intval(substr($timer,6,5));
HM_WriteValueBoolean($_IPS['INSTANCE2'], "STATE" , False);
HM_WriteValueBoolean($_IPS['INSTANCE'], "STATE" , False);
break;
Das aktivieren/deaktivieren klappt per Script … habe nur jetzt beim Debuggen bemerkt, dass die Fehlermeldung beim manuellen Versuch kommt.
Vorschläge wie man es besser/anders macht sind gerne Willkommen
Gruß Michael