Script für verschiedene Betriebsarten (Standard,Urlaub, Langschläfer, etc)

Hallo zusammen,

da ich meine Jalousien und die Kaffeemaschine per IPS und Ereignissen steuere, stand ich vor dem Problem, dass zb. während des Urlaubs alle nicht relevanten Ereignisse deaktiviert werden sollen. Ggf. nur Ereignisse für Urlaub aktiviert werden.

Daraus entstand folgendes Script über’s Wochenende.

[i]Das Script aktiviert bzw. deaktiviert bestimmte Ereignisse abhängig von der ‚Betriebsart‘. Die Ereignisse werden ganz einfach mit dem entsprechenden Hashtag im Namen versehen - zb. #URLAUB oder #STANDARD.
Über eine Variable mit ensprechendem Profil (wird alles autom. angelegt) kann man dann im Webfront mit einem Klick alle notwendigen Ereignisse aktivieren bzw. deaktivieren.

Konfiguriert bzw. angepasst nach Bedarf müssen:
-> Das Variablenprofil Home_Mode (wird nach erstem Start autom. angelegt)
-> im Script die Zuordung vom Integerwert der Variable zum Hashtag
-> Die relevanten Ereignisse mit einem Hashtag versehen.
[/i]

<?
/* Home Mode Script -------------------------------------------------------
Dieses Script deaktiviert oder aktiviert bestimmte Ereingisse im IPS System
anhand von bestimmten Tags (#).
Damit werden bestimmte Ereignisse zb. im Urlaub deaktiviert und es sind
verschiedene Betriebs-Modi möglich.

Beispiel: Ereignisname:  "Morgens 8:00 Uhr Kaffee an #STD"
Anhand des Hastags #STD wird definiert, dass dieses Ereignis im Home-Mode
Standard (0 --> #STD) aktiv ist.
Wird der Home Mode auf (1-> Urlaub #UB) gesetzt, wird dieses ereignis deaktiviert.
Weiterhin werden dann alle Ereignisse mit #UB auf aktiv gesetzt wenn der
Home Mode auf Urlaub gesetzt wird, zb. Simulation Licht etc.

Mit den Tags lassen sich die Ereignisse also einfach bestimmten Modus zu-
ordnen und aktivieren bzw. deaktivieren.
Es sind beliebige Home Modes zulässig.
Bitte einfach Variablenprofil anpassen und unten stehende Tabelle nutzen um
HashTags den Variablenwerten des Profils zuzuordnen.

Hashtags dürfen nur Großbuchstaben enthalten und müssen mind. 2 Zeichen lang
sein.
-------------------------------------------------------------------------*/

/* ---- BEGIN CONFIG ----------------------------*/
 // Mapping von Home Mode zu Hashtags
 $ModeToTag[0] = "#STD";
 $ModeToTag[1] = "#UB";
 $ModeToTag[2] = "#LS";
 
 //Nur Zyklische Ereignisse
 $c_cyclic_only = true;
 /* ---- END CONFIG ----------------------------*/

 // Änderungen per WebFront abarbeiten und Wert setzen.
 if($_IPS["SENDER"] == "WebFront")SetValue($_IPS["VARIABLE"], $_IPS["VALUE"]);

 // Prüfen ob Home Mode Variable exisitert
 $c_home_mode = CheckHomeModeVar();
 $homeMode = $ModeToTag[getValue($c_home_mode)];

// echo "Home Modus ".GetValueFormatted($c_home_mode)."
";
 // Hasttag Elemente aktivieren oder deaktivieren
 $obj_all = IPS_GetObjectList(); // ALLE IPS Objekte lesen
 foreach($obj_all as $z => $id){

	$l_detail = IPS_GetObject($id);
	// Prüfen ob Ereignis und ob Hash vorkommt
   if(($l_detail["ObjectType"] == 4) &&
			( preg_match('(#[A-Z]{2,} )', $l_detail["ObjectName"]." ")>0)){ // Leerzeichen weil sonst der preg nicht funktioniert
		// Wenn aktueller HomeMode dann aktivieren, sonst deaktivieren
		$status = (strpos(strtoupper($l_detail["ObjectName"]), strtoupper($homeMode)) > 0)?true:false;
		IPS_SetEventActive($id,$status);
		$txt_status = ($status)?"Aktiviert":"Deaktiviert";
//   	echo IPS_GetName($l_detail["ParentID"])."->".$l_detail["ObjectName"].":".$txt_status."
";
   }
}

function CheckHomeModeVar(){
 $l_hmid = @IPS_GetVariableIDByName("Home Mode", $_IPS['SELF']);
 $name = "Home_Mode";
 if($l_hmid === false){
   // zuerst Variablenprofil anlegen
   if(!@IPS_GetVariableProfile($name)){
      IPS_CreateVariableProfile($name,1);
      IPS_SetVariableProfileAssociation($name, 0, "Standard", "", -1);
      IPS_SetVariableProfileAssociation($name, 1, "Urlaub", "", -1);
      IPS_SetVariableProfileAssociation($name, 2, "Langschläfer", "", -1);
   }
 }
 $vid = CreateVariableByName($_IPS['SELF'],"Home Mode", 1, "Home_Mode");
 IPS_SetVariableCustomAction ( $vid , $_IPS['SELF'] );
 return $vid;
}

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;
}


?>