IP-Symcon - Wie kann ich... 2.0

<?
// Parameter eintragen, dann Gerät aufwecken, falls mit Batterie betrieben, und dann das Skript ausführen

$ParameterListe = array(1,2,3); // hier die gewünschten Parameter eintragen, die ausgegeben werden sollen
$InstanzID = 12345; // Hier die Instanz-ID des Z-Wave Gerät eintragen

foreach ($ParameterListe as $Parameter) {
	$Wert = @ZW_ConfigurationGetValue($InstanzID, $Parameter);
	echo "Z-WAVE ABFRAGE // Parameter #$Parameter = $Wert
";
	IPS_Sleep(250);
}
?>
<?
// Parameter + Wert eintragen, dann den Aktor aufwecken (falls mit Batterie betrieben), kurz danach das Skript ausführen

$ParameterListe = array(1,2,3,4,5,6);   // Hier den/die gewünschten Parameter eintragen
$WerteListe = array(99,1,10,55,10,60);  // Hier den/die zugehörigen Werte eintragen
$InstanzID = 12345; // Hier die Instanz-ID des Z-Wave Aktor eintragen

$i = 0;
foreach ($ParameterListe as $ParameterX) {
	$WertX = $WerteListe[$i];
	$result = @ZW_ConfigurationSetValue($InstanzID, $ParameterX, $WertX);
	if ($result === true) {
		echo "Parameter #$ParameterX wurde erfolgreich auf den Wert -$WertX- gesetzt!"."
";
	}
	else {
	   echo "Parameter #$ParameterX - FEHLER - Der Wert konnte nicht gesetzt werden!
";
	}
	$i++;
	IPS_Sleep(300);
}
?>
<?
$Sekunden = 199999;
$Ausgabe = SekundenUmrechnen($Sekunden);

echo "Tage: " . $Ausgabe['tag'] . "
";
echo "Stunden: " . $Ausgabe['std'] . "
";
echo "Minuten: " . $Ausgabe['min'] . "
";



function SekundenUmrechnen($Sekunden){
   $Tage  = floor($Sekunden / (3600*24));
   $Stunden  = floor($Sekunden / 3600 % 24);
   $Minuten  = floor($Sekunden / 60 % 60);
   return array("min"=>$Minuten,"std"=>$Stunden,"tag"=>$Tage);
}
?>
<?
$Such_ID = 12345; // Objekt-ID der Variable auf die ein Event "zielt/lauscht/reagiert"
$Ereignisse = IPS_GetEventListByType(0); // Alle "ausgelösten Ereignisse"

foreach ($Ereignisse as $Ereignis) {
   if (IPS_GetEvent($Ereignis)['TriggerVariableID'] == $Such_ID) {
      $ParentID = IPS_GetParent($Ereignis);
      $ParentName = IPS_GetName($ParentID);
		echo "Variable gefunden in Event-ID: ".$Ereignis." // Parent Objekt: ".$ParentName."
";
   }
}
?>
<?
/*
Variablen-Typ
0	Legt eine Variable vom Typ Boolean an
1	Legt eine Variable vom Typ Integer an
2	Legt eine Variable vom Typ Float an
3	Legt eine Variable vom Typ String an
*/

$Variablen_ID = CreateVariableByName($_IPS['SELF'], "Test-Variable", 1, "", "");  // Legt eine Integer Variable mit Namen "Test-Variable" unter diesem Skript an (ohne Variablenprofil oder Action-Skript)
echo "Die erstellte Variable hat die Objekt-ID $Variablen_ID";



function CreateVariableByName($ParentID, $VarName, $VarTyp, $VarProfile = "", $VarActionScript = "") {
	$VarID = @IPS_GetVariableIDByName($VarName, $ParentID);
   if($VarID === false) {
		$VarID = IPS_CreateVariable($VarTyp);
      IPS_SetParent($VarID, $ParentID);
      IPS_SetName($VarID, $VarName);
      IPS_SetInfo($VarID, "This variable was created by script #".$_IPS["SELF"]);
      if($VarProfile !== "") {
			IPS_SetVariableCustomProfile($VarID, $VarProfile);
		}
		if($VarActionScript !== "") {
			IPS_SetVariableCustomAction($VarID, $VarActionScript);
		}
	}
   return $VarID;
}
?>
<?
/*
Event-Typ
0	Bei Variablenaktualisierung
1	Bei Variablenänderung
2	Bei Grenzüberschreitung. Grenzwert wird über IPS_SetEventTriggerValue festgelegt
3	Bei Grenzunterschreitung. Grenzwert wird über IPS_SetEventTriggerValue festgelegt
4	Bei bestimmtem Wert. Wert wird über IPS_SetEventTriggerValue festgelegt
*/

CreateEventTrigger("Test-Event", 12345, $_IPS['SELF'], 1);  // Legt ein Trigger-Event (bei Variablenänderung) für die Variable mit der Objekt-ID 12345 an (damit dieses Skript hier ausgeführt wird, wenn die Variable sich ändert)



function CreateEventTrigger($EventName, $VarID, $ParentID, $EventTyp) {
	$eid = @IPS_GetEventIDByName($EventName, $ParentID);
	if (is_numeric($eid) == false) {
		$eid = IPS_CreateEvent(0);
		IPS_SetEventTrigger($eid, $EventTyp, $VarID);
		IPS_SetParent($eid, $ParentID);
		IPS_SetName($eid, $EventName);
		IPS_SetEventActive($eid, true);
	}
}
?>
<?
SetTimerByName_InSekunden($_IPS['SELF'], "TimerIn5Sekunden", 5);  // Legt einen Timer für dieses Skript an, welcher das Skript in 5 Sekunden ausführt

// Der Timer würde das Skript alle 5 Sekunden erneut aufrufen, bis man den Timer, z.B. wie folgt, wieder deaktiviert
if ($_IPS['SENDER'] == "TimerEvent") {
   SetTimerByName_InSekunden($_IPS['SELF'], "TimerIn5Sekunden", false);
}



function SetTimerByName_InSekunden($parentID, $name, $Sekunden) {
	Global ${$_IPS['SELF']};
   $eid = @IPS_GetEventIDByName($name, $parentID);
   if($eid === false) {
	   $eid = IPS_CreateEvent(1);
      IPS_SetParent($eid, $parentID);
      IPS_SetName($eid, $name);
      IPS_SetInfo($eid, "this timer was created by script #".$_IPS['SELF']);
   }
   if ($Sekunden === false) {
      IPS_SetEventActive($eid, false);
   	return $eid;
   }
   else {
   	IPS_SetEventCyclicTimeFrom($eid, intval(date("H", time() + $Sekunden)), intval(date("i", time() + $Sekunden)), intval(date("s", time() + $Sekunden)));
   	IPS_SetEventActive($eid, true);
   	return $eid;
	}
}
?>
<?
SetTimerByName_UhrzeitStunde($_IPS['SELF'], "TimerUm20Uhr", 20);  // Legt einen Timer für dieses Skript an, welcher das Skript um 20 Uhr ausführt

// Der Timer würde das Skript jeden Tag um 20 Uhr erneut aufrufen, bis man den Timer, z.B. wie folgt, wieder deaktiviert
if ($_IPS['SENDER'] == "TimerEvent") {
   SetTimerByName_UhrzeitStunde($_IPS['SELF'], "TimerUm20Uhr", false);
}



function SetTimerByName_UhrzeitStunde($parentID, $name, $Stunde) {
	Global ${$_IPS['SELF']};
   $eid = @IPS_GetEventIDByName($name, $parentID);
   if($eid === false) {
	   $eid = IPS_CreateEvent(1);
      IPS_SetParent($eid, $parentID);
      IPS_SetName($eid, $name);
      IPS_SetInfo($eid, "this timer was created by script #".$_IPS['SELF']);
   }
   if ($Stunde === false) {
      IPS_SetEventActive($eid, false);
   	return $eid;
   }
   else {
   	IPS_SetEventCyclicTimeFrom($eid, $Stunde, 0, 0);
   	IPS_SetEventActive($eid, true);
   	return $eid;
	}
}
?>

hoch:

<?
$MaximalerWert = 10;


$i = 0;
for ($i; $i < $MaximalerWert; $i++) {
	echo "Hochzählen1: $i"."
";
}


echo "

";


$i = 1;
for ($i; $i <= $MaximalerWert; $i++) {
	echo "Hochzählen2: $i"."
";
}
?>

runter:

<?
$MinimalerWert = 0;


$i = 10;
for ($i; $i > $MinimalerWert; $i--) {
	echo "Runterzählen1: $i"."
";
}

echo "

";

$i = 10;
for ($i; $i >= $MinimalerWert; $i--) {
	echo "Runterzählen2: $i"."
";
}
?>
<?
$array[0] = array("HOST_NAME"=>"server1", "SERVICE_NAME"=>"ips1");
$array[1] = array("HOST_NAME"=>"server2", "SERVICE_NAME"=>"ips2");
//print_r($array);


$i = 0;
foreach ($array as $key) {
	$hostname = $array[$i]["HOST_NAME"];
	echo "Hostname$i = $hostname"."
";
	$servicename = $array[$i]["SERVICE_NAME"];
	echo "Servicename$i = $servicename"."
";
	$i++;
}
?>
<?
$array = array("Tobias", "Michael", "Markus");
//print_r($array);


$i = 1;
foreach ($array as $wert) {
	$AusgabeWert = $wert;
	echo "Wert$i = $AusgabeWert"."
";
	$i++;
}
?>

Wenn man z.B. an einem Skript mehrere Trigger-Events hat, dann kann so bestimmten, dass bei einem bestimmten Event, als Auslöser für den Skript-Start, bestimmte Befehle ausgeführt werden sollen.

<?
$ObjektIDvomEvent = 12345;

if (@$_IPS['EVENT'] == $ObjektIDvomEvent) {
	// Befehle ausführen, wenn das Event mit der ID 12345, der Trigger für dieses Skript war
}
else {
	// Dieses Skript wurde NICHT durch das Event mit der ID 12345 ausgeführt
}
?>

Kurz-Version, bei der bei Bewegungserkennung an einem Bewegungsmelder eine Lampe eingeschaltet werden soll und wenn keine Bewegung mehr ist, dann die Lampe wieder ausschalten:

<?
// Ereignisse hinzufügen > Variablenänderung der Variablen von Bewegungsmelder1 und Bewegungsmelder2

$Bewegungsmelder1 = GetValue(12345);  // Bool Variable, welche Bewegung mit TRUE anzeigt
$Bewegungsmelder2 = GetValue(56789);  // Bool Variable, welche Bewegung mit TRUE anzeigt


if (($Bewegungsmelder1 === true) OR ($Bewegungsmelder2 === true)) {  // Wenn bei einem Bewegungsmelder Bewegung erkannt wurde
	// Bewegung > LAMPE(N) EINSCHALTEN
}
else {
	// Keine Bewegung > LAMPE(N) AUSSCHALTEN
}
?>

Lang-Version, bei der die Lampe(n) nur unter bestimmten Bedingungen eingeschaltet werden sollen:

<?
// Ereignis-Trigger hinzufügen > Variablenänderung der Variablen von Bewegungsmelder1 und Bewegungsmelder2

$Bewegungsmelder1 = GetValue(12345);  // Bool Variable, welche Bewegung mit TRUE anzeigt
$Bewegungsmelder2 = GetValue(56789);  // Bool Variable, welche Bewegung mit TRUE anzeigt
$Nacht = GetValue(11111);   // Bool Variable, welche den Zustand NACHT mit TRUE anzeigt
$Dunkel = GetValue(22222);  // Bool Variable, welche den Zustand DUNKEL mit TRUE anzeigt
$VariablenID_ZeitpunktLetzterBewegung = 55555;  // Hier die Onjekt-ID einer String Variable eintragen, in welcher Datum und Uhrzeit der letzten erkannte Bewegung gespeichert werden


if (($Bewegungsmelder1 === true) OR ($Bewegungsmelder2 === true)) {  // Wenn bei einem Bewegungsmelder Bewegung erkannt wurde
   if (($Nacht === true) OR ($Dunkel === true)) {  // Wenn es Nacht oder Dunkel ist

      // Werktags zw. 18.00 und 22.59 Uhr die Lampe einschalten, sonst nicht
		if (((date("H") >= 18) AND (date("H") < 23)) AND ((Date("w") >= 1) AND (Date("w") <= 5))) {
			// LAMPE(N) EINSCHALTEN
		}
		else {
			// KEINE AKTION
  		}
	}

	// Zeitpunkt der letzten Bewegung in Variable abspeichern
	$timestamp = time();
	$Datum = date("d.m.Y - H:i", $timestamp);
	$Zeitpunkt = $Datum. " Uhr";
	SetValueString($VariablenID_ZeitpunktLetzterBewegung, $Zeitpunkt);
}
else {
   // LAMPE(N) AUSSCHALTEN
}
?>

Version mit Timer - Hier wird die Lampe bei Bewegungserkennung eingeschaltet, dann ein Timer erstellt, welcher das Skript nach 120 Sekunden erneut aufruft und dann die Lampe wieder ausschaltet. Wird innerhalb der 120 Sekunden eine neue Bewegung erkannt, dann verlängert sich der Timer wieder auf 120 Sekunden. Erst wenn keine Bewegung mehr erkannt wird und 120 Sekunden vergangen sind, dann wird das Licht ausgeschaltet.

<?
// Ereignisse hinzufügen > Variablenänderung der Variablen von Bewegungsmelder1 und Bewegungsmelder2

$Bewegungsmelder1 = GetValue(12345);  // Bool Variable, welche Bewegung mit TRUE anzeigt
$Bewegungsmelder2 = GetValue(56789);  // Bool Variable, welche Bewegung mit TRUE anzeigt


if ($_IPS['SENDER'] != "TimerEvent") {
	if (($Bewegungsmelder1 === true) OR ($Bewegungsmelder2 === true)) {  // Wenn bei einem Bewegungsmelder Bewegung erkannt wurde
	    // Bewegung > LAMPE(N) EINSCHALTEN
	    IPS_SetScriptTimer($_IPS['SELF'], 120); // Timer mit 120 Sekunden aktivieren
	}
}
else {
   IPS_SetScriptTimer($_IPS['SELF'], 0);  // Timer deaktivieren
   // LAMPE(N) AUSSCHALTEN
}
?>

Dieses Skript legt 4 Variablen an, mit welchen man sieht, ob heute/morgen ein Feiertag/Wochenende/Werktag/Arbeitstag ist. Die Feiertage sind für Hessen gültig, für andere Bundesländer muss das Skript gegebenenfalls angepasst werden.
Nachdem das Skript einmal von Hand gestartet wurde, werden die 4 Variablen und der Timer angelegt. Jede Nacht um 0.01 Uhr wird das Skript durch den Timer aufgerufen und aktualisiert dann die entsprechenden Variablen.
> Skript habe ich mir aus verschiedenen Beiträgen, hier aus dem Forum, zusammengestellt.

<?
$jahr = date('Y');
$ostersonntag = date('Y-m-d',easter_date($jahr));
$ostermontag = date('Y-m-d',easter_date($jahr)+60*60*24*1);
$himmelfahrt = date('Y-m-d',easter_date($jahr)+60*60*24*39); // 39 Tage nach Ostersonntag
$pfingstsonntag = date('Y-m-d',easter_date($jahr)+60*60*24*49); // 49 Tage nach Ostersonntag
$pfingstmontag = date('Y-m-d',easter_date($jahr)+60*60*24*50);
$fronleichnam = date('Y-m-d',easter_date($jahr)+60*60*24*60); // 2. Donnerstag nach Ostersonntag
$arr_feiertage[$jahr.'-01-01']    = 'Neujahr';
$arr_feiertage[$ostersonntag]     = 'Ostersonntag';
$arr_feiertage[$ostermontag]      = 'Ostermontag';
$arr_feiertage[$jahr.'-05-01']    = 'Staatsfeiertag';
$arr_feiertage[$himmelfahrt]      = 'Christi Himmelfahrt';
$arr_feiertage[$pfingstsonntag]   = 'Pfingstsonntag';
$arr_feiertage[$pfingstmontag]    = 'Pfingstmontag';
$arr_feiertage[$fronleichnam]     = 'Fronleichnam';
$arr_feiertage[$jahr.'-12-25']    = 'Christtag';
$arr_feiertage[$jahr.'-12-26']    = 'Stefanitag';
$arr_feiertage[$jahr.'-10-03']    = 'Tag der deutschen Einheit';

$today = date('Y-m-d');
$tomorrow = date("Y-m-d", time()+86400);

$VarIDheute = @IPS_GetVariableIDByName("Feiertag - Heute", $_IPS["SELF"]);
if($VarIDheute === false) {
	$VarIDheute = IPS_CreateVariable(0);
   IPS_SetParent($VarIDheute, $_IPS["SELF"]);
   IPS_SetName($VarIDheute, "Feiertag - Heute");
   IPS_SetInfo($VarIDheute, "This variable was created by script #".$_IPS["SELF"]);
}

$VarIDmorgen = @IPS_GetVariableIDByName("Feiertag - Morgen", $_IPS["SELF"]);
if($VarIDmorgen === false) {
	$VarIDmorgen = IPS_CreateVariable(0);
   IPS_SetParent($VarIDmorgen, $_IPS["SELF"]);
   IPS_SetName($VarIDmorgen, "Feiertag - Morgen");
   IPS_SetInfo($VarIDmorgen, "This variable was created by script #".$_IPS["SELF"]);
}


// HEUTE
if(array_key_exists($today, $arr_feiertage)) {
	SetValue($VarIDheute, true);
}
else {
	SetValue($VarIDheute, false);
}

// MORGEN
if(array_key_exists($tomorrow, $arr_feiertage)) {
	SetValue($VarIDmorgen, true);
}
else {
	SetValue($VarIDmorgen, false);
}





$today = date("N");
$tomorrow = date("N", time()+86400);

$FeiertagHeute = GetValue($VarIDheute);
$FeiertagMorgen = GetValue($VarIDmorgen);


if (($today == 6) OR ($today == 7)) {
   $VarIDArbeitstagHeute = @IPS_GetVariableIDByName("Arbeitstag - Heute", $_IPS["SELF"]);
	if($VarIDArbeitstagHeute === false) {
		$VarIDArbeitstagHeute = IPS_CreateVariable(0);
	   IPS_SetParent($VarIDArbeitstagHeute, $_IPS["SELF"]);
	   IPS_SetName($VarIDArbeitstagHeute, "Arbeitstag - Heute");
	   IPS_SetInfo($VarIDArbeitstagHeute, "This variable was created by script #".$_IPS["SELF"]);
	}
	SetValue($VarIDArbeitstagHeute, false);
}
elseif ($today <= 5) {
   if ($FeiertagHeute == true) {
		$VarIDArbeitstagHeute = @IPS_GetVariableIDByName("Arbeitstag - Heute", $_IPS["SELF"]);
		if($VarIDArbeitstagHeute === false) {
			$VarIDArbeitstagHeute = IPS_CreateVariable(0);
		   IPS_SetParent($VarIDArbeitstagHeute, $_IPS["SELF"]);
		   IPS_SetName($VarIDArbeitstagHeute, "Arbeitstag - Heute");
		   IPS_SetInfo($VarIDArbeitstagHeute, "This variable was created by script #".$_IPS["SELF"]);
		}
		SetValue($VarIDArbeitstagHeute, false);
	}
	else {
	   $VarIDArbeitstagHeute = @IPS_GetVariableIDByName("Arbeitstag - Heute", $_IPS["SELF"]);
		if($VarIDArbeitstagHeute === false) {
			$VarIDArbeitstagHeute = IPS_CreateVariable(0);
		   IPS_SetParent($VarIDArbeitstagHeute, $_IPS["SELF"]);
		   IPS_SetName($VarIDArbeitstagHeute, "Arbeitstag - Heute");
		   IPS_SetInfo($VarIDArbeitstagHeute, "This variable was created by script #".$_IPS["SELF"]);
		}
		SetValue($VarIDArbeitstagHeute, true);
	}
}


if (($tomorrow == 6) OR ($tomorrow == 7)) {
	$VarIDArbeitstagMorgen = @IPS_GetVariableIDByName("Arbeitstag - Morgen", $_IPS["SELF"]);
	if($VarIDArbeitstagMorgen === false) {
		$VarIDArbeitstagMorgen = IPS_CreateVariable(0);
	   IPS_SetParent($VarIDArbeitstagMorgen, $_IPS["SELF"]);
	   IPS_SetName($VarIDArbeitstagMorgen, "Arbeitstag - Morgen");
	   IPS_SetInfo($VarIDArbeitstagMorgen, "This variable was created by script #".$_IPS["SELF"]);
	}
	SetValue($VarIDArbeitstagMorgen, false);
}
elseif ($tomorrow <= 5) {
   if ($FeiertagMorgen == true) {
		$VarIDArbeitstagMorgen = @IPS_GetVariableIDByName("Arbeitstag - Morgen", $_IPS["SELF"]);
		if($VarIDArbeitstagMorgen === false) {
			$VarIDArbeitstagMorgen = IPS_CreateVariable(0);
		   IPS_SetParent($VarIDArbeitstagMorgen, $_IPS["SELF"]);
		   IPS_SetName($VarIDArbeitstagMorgen, "Arbeitstag - Morgen");
		   IPS_SetInfo($VarIDArbeitstagMorgen, "This variable was created by script #".$_IPS["SELF"]);
		}
		SetValue($VarIDArbeitstagMorgen, false);
	}
	else {
	   $VarIDArbeitstagMorgen = @IPS_GetVariableIDByName("Arbeitstag - Morgen", $_IPS["SELF"]); 
	   if($VarIDArbeitstagMorgen === false) {
			$VarIDArbeitstagMorgen = IPS_CreateVariable(0);
		   IPS_SetParent($VarIDArbeitstagMorgen, $_IPS["SELF"]);
		   IPS_SetName($VarIDArbeitstagMorgen, "Arbeitstag - Morgen");
		   IPS_SetInfo($VarIDArbeitstagMorgen, "This variable was created by script #".$_IPS["SELF"]);
		}
		SetValue($VarIDArbeitstagMorgen, true);
	}
}

SetTimerByName_UhrzeitStunde($_IPS['SELF'], "Timer_0Uhr", 0, 1);


function SetTimerByName_UhrzeitStunde($parentID, $name, $Stunde, $Minute) {
	Global ${$_IPS['SELF']};
   $eid = @IPS_GetEventIDByName($name, $parentID);
   if($eid === false) {
	   $eid = IPS_CreateEvent(1);
      IPS_SetParent($eid, $parentID);
      IPS_SetName($eid, $name);
      IPS_SetInfo($eid, "this timer was created by script #".$_IPS['SELF']);
   }
  	IPS_SetEventCyclicTimeFrom($eid, $Stunde, $Minute, 0);
  	IPS_SetEventActive($eid, true);
  	return $eid;
}
?>

Dieses Skript liest die Anzahl aller HomeMatic-Instanzen und der zugehörigen Variablen aus:

<?
$InstanzenListe = IPS_GetInstanceListByModuleID("{EE4A81C6-5C90-4DB7-AD2F-F6BBD521412E}");
$InstanzCount = 0;

foreach ($InstanzenListe as $InstanzID) {
	$InstanzCount++;
	$Childs[] = IPS_GetChildrenIDs($InstanzID);
}

$Variablen = flatten($Childs);
$Variablen = count(array_unique($Variablen));

echo "Es wurden $InstanzCount HomeMatic Instanzen gefunden!
";
echo "Es wurden $Variablen Variablen in den HomeMatic Instanzen gefunden!
";


function flatten(array $array) {
    $return = array();
    array_walk_recursive($array, function($a) use (&$return) { $return[] = $a; });
    return $return;
}
?>
<?
if ($_IPS['SENDER'] == "Execute") {
   $VariablenID = CreateVariableByName($_IPS['SELF'], "Skript-Counter", 1, "", "");
	$Counter = GetValue($VariablenID) + 1;
	SetValue($VariablenID, $Counter);
}


function CreateVariableByName($ParentID, $VarName, $VarTyp, $VarProfile = "", $VarActionScript = "") {
    $VarID = @IPS_GetVariableIDByName($VarName, $ParentID);
   if($VarID === false) {
        $VarID = IPS_CreateVariable($VarTyp);
      IPS_SetParent($VarID, $ParentID);
      IPS_SetName($VarID, $VarName);
      IPS_SetInfo($VarID, "This variable was created by script #".$_IPS["SELF"]);
      if($VarProfile !== "") {
            IPS_SetVariableCustomProfile($VarID, $VarProfile);
        }
        if($VarActionScript !== "") {
            IPS_SetVariableCustomAction($VarID, $VarActionScript);
        }
    }
   return $VarID;
}
?>
<?
/*   Variable "Anwesenheit_Wohnung" kann folgende Zustände haben
0 = Person1 und Person2 sind abwesend
1 = Person1 ist anwesend, Person2 ist abwesend
2 = Person1 ist abwesend, Person2 ist anwesend
3 = Person1 und Person2 sind anwesend
*/

$Person1_Var = 12345;  // Hier die BOOL-Variable von Person1 eintragen (TRUE = Anwesend, FALSE = Abwesend)
$Person2_Var = 56789;  // Hier die BOOL-Variable von Person2 eintragen (TRUE = Anwesend, FALSE = Abwesend)
$Person1 = GetValue($Person1_Var);
$Person2 = GetValue($Person2_Var);


// Trigger-Events anlegen, damit dieses Skript immer ausgeführt wird, wenn die
// Anwesenheits-Variablen von Person1 oder Person2 sich ändern
CreateEventTrigger("EVENT_Anwesenheit_Person1", $Person1_Var, $_IPS['SELF'], 1);
CreateEventTrigger("EVENT_Anwesenheit_Person2", $Person2_Var, $_IPS['SELF'], 1);


// Je nach Anwesenheit-Abwesenheit wird die Anwesenheits-Variable auf die entsprechende Zahl gesetzt
if (($Person1 == true) AND ($Person2 == false)) {
	$AnwesenheitsVar_ID = CreateVariableByName($_IPS['SELF'], "Anwesenheit_Wohnung", 1, "", "");
	SetValue($AnwesenheitsVar_ID, 1);
}
elseif (($Person1 == false) AND ($Person2 == true)) {
	$AnwesenheitsVar_ID = CreateVariableByName($_IPS['SELF'], "Anwesenheit_Wohnung", 1, "", "");
	SetValue($AnwesenheitsVar_ID, 2);
}
elseif (($Person1 == true) AND ($Person2 == true)) {
	$AnwesenheitsVar_ID = CreateVariableByName($_IPS['SELF'], "Anwesenheit_Wohnung", 1, "", "");
	SetValue($AnwesenheitsVar_ID, 3);
}
elseif (($Person1 == false) AND ($Person2 == false)) {
	$AnwesenheitsVar_ID = CreateVariableByName($_IPS['SELF'], "Anwesenheit_Wohnung", 1, "", "");
	SetValue($AnwesenheitsVar_ID, 0);
}



function CreateVariableByName($ParentID, $VarName, $VarTyp, $VarProfile = "", $VarActionScript = "") {
    $VarID = @IPS_GetVariableIDByName($VarName, $ParentID);
   if($VarID === false) {
        $VarID = IPS_CreateVariable($VarTyp);
      IPS_SetParent($VarID, $ParentID);
      IPS_SetName($VarID, $VarName);
      IPS_SetInfo($VarID, "This variable was created by script #".$_IPS["SELF"]);
      if($VarProfile !== "") {
            IPS_SetVariableCustomProfile($VarID, $VarProfile);
        }
        if($VarActionScript !== "") {
            IPS_SetVariableCustomAction($VarID, $VarActionScript);
        }
    }
   return $VarID;
}


function CreateEventTrigger($EventName, $VarID, $ParentID, $EventTyp) {
    $eid = @IPS_GetEventIDByName($EventName, $ParentID);
    if (is_numeric($eid) == false) {
        $eid = IPS_CreateEvent(0);
        IPS_SetEventTrigger($eid, $EventTyp, $VarID);
        IPS_SetParent($eid, $ParentID);
        IPS_SetName($eid, $EventName);
        IPS_SetEventActive($eid, true);
    }
}
?>
<?
/* Beim Skript-Inhalt dürfen vorne keine Leerzeichen sein,
die werden sonst mit in das Ziel-Skript geschrieben!

Das Ziel-Skript könnte dann über den Namen an anderer Stelle eingebunden werden
z.B. mit:    include 'TestSkript.ips.php';
*/

$ZielSkript_Name = "TestSkript";
$ParentID = $_IPS['SELF'];

$Script_ID = @IPS_GetScriptIDByName($ZielSkript_Name, $ParentID);


if ($Script_ID === false) {
	fopen("$ZielSkript_Name.ips.php","w");
	$Script_Path = "$ZielSkript_Name.ips.php";
	$Script_ID = IPS_CreateScript(0);
	$Script = IPS_GetScript($Script_ID);
	unlink(IPS_GetKernelDir() . '/scripts/' . $Script['ScriptFile']);
	IPS_SetScriptFile($Script_ID, $Script_Path);
   IPS_SetParent($Script_ID, $ParentID);
	IPS_SetName($Script_ID, $ZielSkript_Name);
	$Script_Inhalt =
'<?
// Hier steht der Inhalt vom Ziel-Skript
echo "Ich bin ein neues Skript!";
?>';
IPS_SetScriptContent($Script_ID, $Script_Inhalt);
}
else {
	echo "Das Skript mit dem Namen '$ZielSkript_Name' existiert bereits!";
}
?>
<?
// Koordination seines Wohnortes eintragen  (kann man z.B. hier ermitteln > http://www.erlebnis-tipps.de/getLatLng.php)
$latitude = 50.53;       // Breitengrad
$longitude = 12.29;    // Längengrad

// Skripte eintragen, welche bei Sonnenaufgang und/oder Sonnenuntergang ausgeführt werden sollen
$Scripte_Sonnenaufgang = array(11111, 22222);
$Scripte_Sonnenuntergang = array(22222, 33333, 55555);



/*** AB HIER NICHTS MEHR ÄNDERN ***/
$timestamp = time();
$Sonnenaufgang = date_sunrise($timestamp, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 90+50/60, date("O")/100);
$Sonnenuntergang = date_sunset($timestamp, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 90+50/60, date("O")/100);

$Sonnenaufgang_Stunde = (int)date("G", $Sonnenaufgang);
$Sonnenaufgang_Minute = (int)date("i", $Sonnenaufgang);

$Sonnenuntergang_Stunde = (int)date("H", $Sonnenuntergang);
$Sonnenuntergang_Minute = (int)date("i", $Sonnenuntergang);


// Timer unter den jeweiligen Skripten erstellen
foreach ($Scripte_Sonnenaufgang as $ScriptID_Sonnenaufgang) {
	SetTimerByName_UhrzeitStundeMinute($ScriptID_Sonnenaufgang, "EVENT_Sonnenaufgang", $Sonnenaufgang_Stunde, $Sonnenaufgang_Minute);
}

foreach ($Scripte_Sonnenuntergang as $ScriptID_Sonnenuntergang) {
	SetTimerByName_UhrzeitStundeMinute($ScriptID_Sonnenuntergang, "EVENT_Sonnenuntergang", $Sonnenuntergang_Stunde, $Sonnenuntergang_Minute);
}


// Skript jede Nacht um 0.05 Uhr starten, damit die Timer für Sonnenaufgang/-untergang aktualisiert werden
SetTimerByName_UhrzeitStundeMinute($_IPS['SELF'], "EVENT_ZeitenUpdate", 0, 5);



function SetTimerByName_UhrzeitStundeMinute($parentID, $name, $Stunde, $Minute) {
   $eid = @IPS_GetEventIDByName($name, $parentID);
   if($eid === false) {
	   $eid = IPS_CreateEvent(1);
      IPS_SetParent($eid, $parentID);
      IPS_SetName($eid, $name);
      IPS_SetInfo($eid, "this timer was created by script #".$_IPS['SELF']);
      echo $eid."
";
      echo $Stunde."
";
      echo $Minute."
";
   	IPS_SetEventCyclicTimeFrom($eid, $Stunde, $Minute, 0);
   	IPS_SetEventActive($eid, true);
   	return $eid;
	}
	else {
	   IPS_SetEventCyclicTimeFrom($eid, $Stunde, $Minute, 0);  // Uhrzeit aktualisieren
	}
}
?>
<?
/* Weitere Informationen, zu den einzelnen Befehlen, findet ihr in der Doku:
https://www.symcon.de/service/dokumentation/befehlsreferenz/variablenverwaltung/variablenprofile/
*/


if (IPS_VariableProfileExists("Profilname_Bool_Variable") === false) {
   //@IPS_DeleteVariableProfile("Profilname_Bool_Variable");  // mit dieser Zeile könnte man ein vorhandenes Profil vorher löschen lassen
	IPS_CreateVariableProfile("Profilname_Bool_Variable", 0);
	IPS_SetVariableProfileAssociation("Profilname_Bool_Variable", 0, "Offen", "", -1);
	IPS_SetVariableProfileAssociation("Profilname_Bool_Variable", 1, "Geschlossen", "", 0x00FF00);
	IPS_SetVariableProfileIcon("Profilname_Bool_Variable", "Shutter");
}


if ((IPS_VariableProfileExists("Profilname_Integer_Variable") === false) {
   //@IPS_DeleteVariableProfile("Profilname_Integer_Variable");  // mit dieser Zeile könnte man ein vorhandenes Profil vorher löschen lassen
	IPS_CreateVariableProfile("Profilname_Integer_Variable", 1);
	IPS_SetVariableProfileValues("Profilname_Integer_Variable", 0, 100, 1);
	IPS_SetVariableProfileText("Profilname_Integer_Variable", "", "%");
	IPS_SetVariableProfileIcon("Profilname_Integer_Variable", "Intensity");
}


if (IPS_VariableProfileExists("Profilname_Float_Variable") === false) {
   //@IPS_DeleteVariableProfile("Profilname_Float_Variable");  // mit dieser Zeile könnte man ein vorhandenes Profil vorher löschen lassen
	IPS_CreateVariableProfile("Profilname_Float_Variable", 2);
	IPS_SetVariableProfileDigits("Profilname_Float_Variable", 1);
	IPS_SetVariableProfileValues("Profilname_Float_Variable", 5, 30, 0.5);
	IPS_SetVariableProfileText("Profilname_Float_Variable", "", "°C");
	IPS_SetVariableProfileIcon("Profilname_Float_Variable", "Temperature");
}
?>