Hallo zusammen,
habe mal ein Script gebastelt und best. Geräte automatisch auszuschalten, rein über Events gesteuert ohne Programmierung etc.
Aktuell für Z-Wave, befehl kann aber unten einfach angepasst werden:
<?php /* BESCHREIBUNG ----------------------------------------------------------------
Dies ist ein generisches Script um Geräte automatisch nach einer
vorgegebenen Zeit wieder auszuschalten.
Um die Funktionalität zu nutzen, Ereignisse an diesem Script festmachen.
ZB: Leuchte1->status = true. Also wenn Leuchte1 angeschaltet wurde.
Der Ereignissname muss manuell gepflegt bzw. angepasst werden und folgende
Form haben:
{beliebiger Name},{Timout in Minuten}, {Channel für Ausschalten, optional}
Beispiel
Leuchte Flur, 3, 2
oder
Leuchte Garage, 10
Das Script legt dann unter der Trigger Insatz ein Ereignis an (Name kann
unten konfiguriert werden) und aktiviert dieses mit dem Ausschalt Befehl.
Aktuell für Z-Wave, kann aber leicht für andere Geräte angepasst werden.
------------------------------------------------------------------------------*/
/* CONFIGURATION -------------------------------------------------------------*/
$c_EVENT_NAME = "(Auto Power Off)";
/*----------------------------------------------------------------------------*/
if($_IPS['SENDER'] == "Variable"){
// AuslösendeInstanz und Event herausfinden und Parameter aus Namen extrahieren.
$l_inst = IPS_GetParent($_IPS['VARIABLE']);
$s_event = $_IPS['EVENT'];
$s_name = IPS_GetName($s_event);
$s_name_a = explode(",",$s_name);
$l_POWEROFF = intval($s_name_a[1]);
// Prüfen ob Multichannel
if(!@empty($s_name_a[2])){
// Multi Switch
$l_multi = intval($s_name_a[2]);
} else {
$l_multi = 1;
}
echo "POWEROFF Script Trigger: ".IPS_GetName($l_inst)." Off: ". $l_POWEROFF."
";
// Ausschaltzeit berechnen
$l_POWEROFF = time() + ($l_POWEROFF * 60);
// Prüfen ob bereits altes Event exisitert und ID lesen.
$l_subitems_a = IPS_GetChildrenIDs($l_inst);
$e_id = 0;
foreach($l_subitems_a as $z => $id){
$l_detail = IPS_GetObject($id);
if($l_detail["ObjectType"] == 4){ // Prüfen ob Sub-Item Ereignis ist
if($l_detail["ObjectName"] == $c_EVENT_NAME){
$e_id = $id;
}
}
}
// Fals kein altes Ereignis gefunden wurde, neues anlegen.
if($e_id == 0){
$e_id = IPS_CreateEvent(1);
IPS_SetParent($e_id,$l_inst);
IPS_SetName($e_id,$c_EVENT_NAME);
}
// Ereigniszeit setzen
IPS_SetEventCyclic($e_id,1,0,0,0,0,0);
IPS_SetEventCyclicTimeBounds($e_id, $l_POWEROFF, 0);
IPS_SetEventCyclicDateBounds($e_id, $l_POWEROFF, 0);
IPS_SetEventActive($e_id,true);
// Befehl für Ereignis festlegen und setzen
if($l_multi == 1){
// Hier Z-WAVE, Anpassen für andere Geräte
$code = " ZW_SwitchMode($l_inst,false);
echo 'Auto Off $l_inst';
";
} else {
// Hier Z-WAVE, Anpassen für andere Geräte
$code = " ZW_SwitchModeEx($l_inst, false, $l_multi);
echo 'Auto Off $l_inst';
";
}
IPS_SetEventScript($e_id, $code);
}
?>
Beispiel: