Möchte Euch kurz mien kleines Script vorstellen, das gestern Abend enstanden ist.
Habe in IPS eine Variable (BOOLEAN), ob wir aktuell im Urlaub sind. Urlaub = TRUE, kein Urlaub = FALSE.
Anhand des Status möchte ich natürlich, dass bestimmte Dinge nicht mehr geschehen, zb. Kaffeemaschine an, Router an etc.
Dieses Script deaktiviert Ereignisse von angegebenen Instanzen abhängig vom Urlaub.
(Bereits nicht aktive Ereignisse vor Urlaub werden danach nat. auch nicht aktiviert)
<?
/* Urlaubs script -------------------------------------------------------
Dieses Script deaktiviert Ereignisse wenn man im Urlaub ist.
Bei beendetem Urlaub werden die Ereignisse wieder in den Urspr.
Zustand gesetzt.
-------------------------------------------------------------------------*/
/* ---- BEGIN CONFIG ----------------------------*/
// Wenn Urlaubsmodus, dann die Ereignisse für folgende Objekte deaktivieren.
$c_geraete[] = 48388 /*[Objekte\Funksteckdosen\Steckdose 1 (Kaffeemaschine)]*/;
$c_geraete[] = 58082 /*[Objekte\Sonstige Objekte\Dimmer (Schlafzimmer)]*/;
$c_geraete[] = 19522 /*[Scripts\Leuchten Scripts\Schlafzimmer Sonnenaufgang]*/;
$c_geraete[] = 49862 /*[Scripts\Leuchten Scripts\Schlafzimmer Ausschalten täglich]*/;
$c_geraete[] = 31390 /*[Objekte\FS20\FS20 Steckdose (Media Center)\Mediacenter Power]*/;
// Urlaubsvariable (TRUE/FALSE)
$c_urlaub = 53059 /*[Objekte\Sonstige Objekte\Urlaubsmodus]*/;
//Nur Zyklische Ereignisse
$c_cyclic_only = true;
/* ---- END CONFIG ----------------------------*/
$l_urlaub = getvalue($c_urlaub);
$l_nactive = "";
if(!$l_urlaub)$l_nactive = getvalue(CreateVariableByName($_IPS['SELF'],"Urlaub Aktiv Status",3));
echo "Urlaubsmodus ".GetValueFormatted($c_urlaub)."
";
foreach($c_geraete as $l_objid){
$l_childs = IPS_GetChildrenIDs($l_objid); // Kinder Objekte einer INstanz etc. lesen
foreach($l_childs as $l_cobjid){
$l_detail = IPS_GetObject($l_cobjid);
if($l_detail["ObjectType"] == 4){ // Wenn Ereignis (4)
$l_eventinfo = IPS_GetEvent($l_cobjid);
if(($c_cyclic_only && $l_eventinfo["EventType"] == 1) || (!$c_cyclic_only)){
// Neuer Status definiieren
if($l_urlaub){
//Wegspeichern, welche Ereignisse nicht aktiv sind
if(!$l_eventinfo["EventActive"])$l_nactive .= $l_cobjid.",";
$l_status = false;
} else {
// Wenn Event vorher nicht aktiv war, jetzt auch nicht aktivieren, sonst ja.
$l_status = (in_array($l_cobjid, explode(",", $l_nactive)))? false : true;
}
// Event Aktivieren oder Deaktivieren
IPS_SetEventActive($l_cobjid, $l_status);
$txt_status = ($l_status)?"Aktiviert":"Deaktiviert";
echo IPS_GetName($l_objid)."->".IPS_GetName($l_cobjid).": ".$txt_status."
";
} // Zyklische
}
}
}
// speichern
if($l_urlaub){
setvalue(CreateVariableByName($_IPS['SELF'],"Urlaub Aktiv Status",3), $l_nactive);
}
//.............................................................................
function CreateVariableByName($id, $name, $type, $profile = "")
{
# type: 0=boolean, 1 = integer, 2 = float, 3 = string;
global $IPS_SELF;
$vid = @IPS_GetVariableIDByName($name, $id);
if($vid === false)
{
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
}
return $vid;
}
?>