IP-Symcon - Wie kann ich... 2.0

<?
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");
}
?>
<?
// Hier die Variablen-ID(s) der Variable(n) eintragen, welche das Actionskript zugewiesen bekommen soll(en)
$VariablenArray = array(11111,22222,33333,44444);

// Hier die Skript-ID eintragen, welches die Variable(n) als Actionskript zugewiesen bekommen soll(en)
$ActionSkript_ID = 12345;


Variablen_NeuesActionscriptZuweisen($VariablenArray, $ActionSkript_ID);


function Variablen_NeuesActionscriptZuweisen($VariablenArray, $ActionSkript_ID) {
	foreach ($VariablenArray as $VariablenID) {
	   IPS_SetVariableCustomAction($VariablenID, $ActionSkript_ID);
	}
}
?>
<?
$Test_String = "Montag";
//$Test_String = "Donnerstag";

switch ($Test_String) {
	case "Montag":
	   echo "Heute ist Montag
";
	   break;
	   
	case "Dienstag":
	   echo "Heute ist Dienstag
";
	   break;
	   
	case "Mittwoch":
	   echo "Heute ist Mittwoch
";
	   break;
	
	case "Donnerstag":
	   echo "Heute ist Donnerstag
";
	   break;
	
	case "Freitag":
	   echo "Heute ist Freitag
";
	   break;
	
	case "Samstag":
	   echo "Heute ist Samstag
";
	   break;
	
	case "Sonntag":
	   echo "Heute ist Sonntag
";
	   break;
}




$Test_Zahl = 50;
//$Test_Zahl = 100;

switch ($Test_Zahl) {
	case 0:
	   echo "Die Zahl ist 0
";
	   break;

	case 50:
	   echo "Die Zahl ist 50
";
	   break;

	case 100:
	   echo "Die Zahl ist 100
";
	   break;
}




$Test_Zahl = 40;
//$Test_Zahl = 70;

switch ($Test_Zahl) {
	case ($Test_Zahl < 60):
	   echo "Die Zahl ist kleiner als 50
";
	   break;

	case ($Test_Zahl >= 60):
	   echo "Die Zahl ist größer oder gleich 60
";
	   break;
}

?>

Weitere Skripte zu dem Thema gibt es hier:
Überprüfen, ob ein Fenster geöffnet ist (via Links)
Fensterstatus abfragen und in String schachteln

<?
// Hier die ID(s) der Variable(n) eintragen, welche überprüft werden soll
$VariablenArray = array(11111,22222,33333,44444);



$Status = false;
foreach($VariablenArray as $Var_ID) {
	if(GetValue($Var_ID) === true) {
   	$Status = true;
	}
	break;
}
echo "Mindestens eine Variable hat den Status TRUE"."

";




$Status = false;
$Counter = 0;
foreach($VariablenArray as $Var_ID) {
	if(GetValue($Var_ID) === true) {
   	$Status = true;
	}
	$Counter++;
}
echo "$Counter Variable(n) hat(haben) den Status TRUE"."

";




$Status = false;
foreach($VariablenArray as $Var_ID) {
	if(GetValue($Var_ID) === true) {
   	$Status = true;
   	$TRUE_Array[] = $Var_ID;
	}
}
$VariablenListeMitStatusTRUE = implode(",",$TRUE_Array);
echo "Folgende Variablen haben den Status TRUE:"."
";
echo $VariablenListeMitStatusTRUE
?>
<?
// Hier die Instanz-IDs der Aktoren (Lampen, Geräte, ...) eintragen, welche ein-/ausgeschaltet werden sollen
$Aktoren_Array = array(11111,22222,33333,44444,55555);



// EINSCHALTEN der Aktoren
foreach ($Aktoren_Array as $HM_InstanzID) {
	HM_WriteValueBoolean($HM_InstanzID, "STATE", true);
	IPS_Sleep(300); // zwischen den Schaltvorgängen einen kleinen Moment warten
}


// AUSSCHALTEN der Aktoren
foreach ($Aktoren_Array as $HM_InstanzID) {
	HM_WriteValueBoolean($HM_InstanzID, "STATE", false);
	IPS_Sleep(300); // zwischen den Schaltvorgängen einen kleinen Moment warten
}






// Nur Aktoren ausschalten, die gerade eingeschaltet sind
foreach($Aktoren_Array as $HM_InstanzID) {
    $STATE_ID = IPS_GetObjectIDByIdent("STATE", $HM_InstanzID);
    if(GetValue($STATE_ID) === true) {
       $EingeschalteteAktoren_Array[] = $HM_InstanzID;
    }
}

// Wenn eingeschaltete Aktoren gefunden wurden, dann werden diese jetzt ausgeschaltet
if (isset($EingeschalteteAktoren_Array)) {
	foreach ($EingeschalteteAktoren_Array as $HM_InstanzID) {
		HM_WriteValueBoolean($HM_InstanzID, "STATE", false);
		IPS_Sleep(300); // zwischen den Schaltvorgängen einen kleinen Moment warten
	}
}
?>
<?
// Hier die Instanz-IDs der Aktoren (Lampen, Geräte, ...) eintragen, welche ein-/ausgeschaltet werden sollen
$Aktoren_Array = array(11111,22222,33333,44444,55555);



// EINSCHALTEN der Aktoren
foreach ($Aktoren_Array as $ZW_InstanzID) {
	ZW_SwitchMode($ZW_InstanzID, true);
	IPS_Sleep(300); // zwischen den Schaltvorgängen einen kleinen Moment warten
}


// AUSSCHALTEN der Aktoren
foreach ($Aktoren_Array as $ZW_InstanzID) {
	ZW_SwitchMode($ZW_InstanzID, false);
	IPS_Sleep(300); // zwischen den Schaltvorgängen einen kleinen Moment warten
}






// Nur Aktoren ausschalten, die gerade eingeschaltet sind
foreach($Aktoren_Array as $ZW_InstanzID) {
    $Status_ID = IPS_GetObjectIDByIdent("StatusVariable", $ZW_InstanzID);
    if(GetValue($Status_ID) === true) {
       $EingeschalteteAktoren_Array[] = $ZW_InstanzID;
    }
}

// Wenn eingeschaltete Aktoren gefunden wurden, dann werden diese jetzt ausgeschaltet
if (isset($EingeschalteteAktoren_Array)) {
	foreach ($EingeschalteteAktoren_Array as $ZW_InstanzID) {
		ZW_SwitchMode($ZW_InstanzID, false);
		IPS_Sleep(300); // zwischen den Schaltvorgängen einen kleinen Moment warten
	}
}
?>
<?
$ZW_InstanzID = 12345;  // Die Instanz-ID des Z-Wave Dimmers
$ZielHelligkeit = 100;          // Die Helligkeit, die die Lampe am Ende haben soll (1-100)
$Intervall = 3;                        // Intervall in dem das Skript aufgerufen und die Lampe heller gedimmt wird
$Schrittweite = 10;              // Schrittweite in der die Helligkeit, pro Durchlauf, erhöht werden soll


if ($_IPS['SENDER'] != "TimerEvent") {
	$ZW_Intensity_ID = IPS_GetVariableIDByName("Intensity", $ZW_InstanzID);
	$AktuelleHelligkeit = GetValue($ZW_Intensity_ID);
	if ($AktuelleHelligkeit < $ZielHelligkeit) {
		IPS_SetScriptTimer($_IPS['SELF'], $Intervall);
	}
}
else {
   $ZW_Intensity_ID = IPS_GetVariableIDByName("Intensity", $ZW_InstanzID);
	$AktuelleHelligkeit = GetValue($ZW_Intensity_ID);
  	$DimWert = $AktuelleHelligkeit + $Schrittweite;

	if ($DimWert >= $ZielHelligkeit) {
	   IPS_SetScriptTimer($_IPS['SELF'], 0); // Ziel-Helligkeit wurde erreicht > Skript-Timer deaktivieren
	   ZW_DimSet($ZW_InstanzID, $ZielHelligkeit);
	}
	else {
		ZW_DimSet($ZW_InstanzID, $DimWert);
	}
}
?>
<?
$DreamboxIP = "192.168.2.20";  // Hier die IP eurer Dreambox eintragen
$Nachricht = "Ich bin ein Test!";   // Text der Nachricht die angezeigt werden soll
$Anzeigedauer = 5;                         // X Sekunden - so lange wird die Nachricht auf TV/Beamer angezeigt


DreamboxNachricht($DreamboxIP, $Nachricht, $Anzeigedauer);


function DreamboxNachricht($DreamboxIP, $Nachricht, $Anzeigedauer) {
	$message = utf8_encode($Nachricht);
	$message = urlencode($message);
	$result = @SYS_GetURLContent("http://".$DreamboxIP."/web/message?text=".$message."&type=1&timeout=$Anzeigedauer");
	if ($result == true) {
	   echo "Nachricht wurde gesendet!
";
	}
	else {
	   echo "Nachricht wurde nicht gesendet!
";
	}
}
?>

>> Modul verfügbar >> Enigma2BY - Modul für Receiver mit Enigma2 >> ab IPS 4.0

Variable „Aktiv (true/false)“ und Event-Trigger werden automatisch angelegt. Dazu muss das Skript einmal von Hand ausgeführt werden, danach läuft alles automatisch.

Dazu muss der Grenzwert herausgefunden werden, dazu am besten einen Wasch-/Trockenvorgang loggen und die Werte, besonders am Ende, beobachten. Dazu auf Pausen während dem Vorgang achten und gegebenenfalls den Timer noch anpassen.

Um dieses Skript verwenden zu können, muss die Waschmaschine/der Wäschetrockner an einem Leistungsmesser angeschlossen sein.

<?
$MaschinenPower = 12345;  // Hier die Variable mit Leitungsmessung eintragen (WATT, AMPERE)
$Power_Grenzwert = 3;     // Hier den Grenzwert eintragen, bei dem bei Über-/Unterschreitung das Skript ausgeführt werden soll
$PushSenden = true;       // TRUE = Push-Nachricht wird gesendet, FALSE = Push-Nachricht wird nicht gesendet (gültige IPS-Subscription notwendig!!)
$PushNachrichtTitel = "WASCHMASCHINE";     // Hier den Titel eintragen, der per Push versendet wird
$PushNachrichtMessage = "...ist FERTIG!";  // Hier den Text eintragen, der per Push versendet wird
$WF_ID = 11111;           // ID vom WebFront zum Push-Versand
$TimerDauer = 120;       // X Sekunden nach Grenzunterschreitung, wenn dazwischen keine Grenzüberschreitung war, wird das Ende vom Wasch-/Trockenvorgang gemeldet



/****** AB HIER NICHTS MEHR ÄNDERN ******/
$MaschineAktiv = CreateVariableByName($_IPS['SELF'], "Aktiv", 0, "", "");  // Bool-Variable (TRUE = Maschine AKTIV, FALSE = Maschine INAKTIV)


if ((GetValueFloat($MaschinenPower) < $Power_Grenzwert) AND (GetValue($MaschineAktiv) == true))  {
   IPS_SetScriptTimer($_IPS['SELF'], $TimerDauer);
}

if (GetValueFloat($MaschinenPower) > $Power_Grenzwert)  {
	SetValue($MaschineAktiv, true);
	IPS_SetScriptTimer($_IPS['SELF'], 0);
}


// Timer-Event
if($IPS_SENDER == "TimerEvent") {
	if (GetValueFloat($MaschinenPower) < $Power_Grenzwert)  {
	   IPS_SetScriptTimer($_IPS['SELF'], 0);
		//PUSH-Nachricht senden
		if ($PushSenden == true) {
			WFC_PushNotification($WF_ID, $PushNachrichtTitel, $PushNachrichtMessage, "", 0);
		}
	  	// Maschine auf inaktiv setzen
	  	SetValue($MaschineAktiv, false);
	}
}


if($_IPS['SENDER'] == "Execute")  {
	$Event1_ID = CreateEventTrigger("EVENT_Power_Grenzueberschreitung", $MaschinenPower, $_IPS['SELF'], 2);
	$Event2_ID = CreateEventTrigger("EVENT_Power_Grenzunterschreitung", $MaschinenPower, $_IPS['SELF'], 3);
	IPS_Sleep(1000);
	IPS_SetEventTriggerSubsequentExecution($Event1_ID, false);
	IPS_SetEventTriggerSubsequentExecution($Event2_ID, false);
}


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) {
	 Global $Power_Grenzwert;
    $eid = @IPS_GetEventIDByName($EventName, $ParentID);
    if (is_numeric($eid) == false) {
        $eid = IPS_CreateEvent(0);
        IPS_SetEventTrigger($eid, $EventTyp, $VarID);
        IPS_SetEventTriggerValue($eid, $Power_Grenzwert);
        IPS_SetParent($eid, $ParentID);
        IPS_SetName($eid, $EventName);
        IPS_SetEventActive($eid, true);
    }
	 return $eid;
}
?>

Beispiel am Auslesen der aktuellen Beiträge im IPS Forum, Bereich „Neuigkeiten & Ankündigungen“. Am einfachsten findet man den XPath mit dem Chrome Browser heraus. Einfach rechte Maustaste auf ein Element und dann auf „Element untersuchen“. Unten auf den markierten Teil erneut mit der rechten Maustaste klicken und dann auf „Copy XPath“.
Gibt aber auch ein AddOn für den Firefox und allgemein für Browser weitere AddOns.

<?
//error_reporting(E_ERROR | E_WARNING | E_PARSE);

$curl = curl_init('https://www.symcon.de/forum/');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
$page = curl_exec($curl);
//print_r($page);


if(curl_errno($curl)) // Error-Check
{
    echo 'Scraper error: ' . curl_error($curl);
    exit;
}
curl_close($curl);

$DOM = new DOMDocument;
//print_r($DOM);


libxml_use_internal_errors(true);

if (!$DOM->loadHTML($page))
    {
        $errors="";
        foreach (libxml_get_errors() as $error)  {
            $errors.=$error->message."<br/>";
        }
        libxml_clear_errors();
        print "libxml errors:<br>$errors";
        return;
    }
$xpath = new DOMXPath($DOM);


// Anzahl der Themen im IPS Forum unter "Neugikeiten & Ankündigungen"
$content = $xpath->query('.//*[@id="forum2"]/div/ul[2]/li[1]');
foreach ($content as $entry1) {
    $output[] = $entry1->nodeValue;
}
//print_r($output);

// Wegschneiden von unnötigen Zeichen
preg_match_all('!\d+!', $entry1->nodeValue, $matches);


// Ausgabe
$output_final = $matches[0][0];
echo "Anzahl der Themen: $output_final";
?>
  • In der IP-Symcon-Verwaltungskonsole Ansicht ‚Objektbaum‘ auswählen
  • das betreffende IP-S Objekt anklicken
  • rechte Maustaste -> ‚ObjektID kopieren‘
  • in Zeile 3 des folgenden Skriptes mit ‚CTRL-V‘ einkopieren (bzw. vorhandenen Nr. überschreiben)
  • Skript ‚Ausführen‘
<?php
// Analysiert das IP-S Objekt mit folgender ObjektID:
$ObjID = 37671  /*[Skripte\Konfiguration\ObjectAnalyse]*/;


$Objekt = IPS_GetObject ($ObjID);
$ObjektTyp = array ('Kategorie', 'Instanz', 'Variable', 'Skript', 'Ereignis', 'Media', 'Link');
print( "Object:   $ObjID " . @IPS_GetLocation ($ObjID) . " (ist " . $ObjektTyp[$Objekt['ObjectType']] . ')');
print( "
Parent:   " . $Objekt['ParentID'] . ' ' . IPS_GetLocation ($Objekt['ParentID']));
if ($Objekt['HasChildren']) {
    print( "
Children: ");
    foreach ($Objekt['ChildrenIDs'] as $i => $ChID) {
        print( "
          $ChID " . IPS_GetLocation ($ChID));
    }
}
print("

1. ObjectInfo:    ");
print_r ($Objekt);

switch ($Objekt['ObjectType']) {
    case 0:
        break;
    case 1:
        $ModuleType = array ('Kern', 'I/O', 'Splitter', 'Gerät', 'Konfigurator');
        print("
2. InstanceInfo (" . $ModuleType[IPS_GetInstance ($ObjID)['ModuleInfo']['ModuleType']] . '):     ');
        print_r (IPS_GetInstance ($ObjID));
        break;
    case 2:
        $VariablenTyp = array ('Boolean', 'Integer', 'Float', 'String');
        print("
2. VariableInfo (" . $VariablenTyp[IPS_GetVariable ($ObjID)['VariableValue']['ValueType']] . '):     ');
        print_r (IPS_GetVariable ($ObjID));
        $Prof = IPS_GetVariable ($ObjID)['VariableCustomProfile'];
        if ($Prof) {
            print("
3. CustomProfile '" . $Prof . "':     ");
            print_r (IPS_GetVariableProfile ($Prof));
        }
        $Prof = IPS_GetVariable ($ObjID)['VariableProfile'];
        if ($Prof) {
            print("
3. VariableProfile '" . $Prof . "':     ");
            print_r (IPS_GetVariableProfile ($Prof));
        }
        print("
4. Changed:     " . strftime ("%d.%m.%y-%X", IPS_GetVariable ($ObjID)['VariableChanged']));
        print("
5. Updated:     " . strftime ("%d.%m.%y-%X", IPS_GetVariable ($ObjID)['VariableUpdated']));
        break;
    case 3:
        print("
2. SkriptInfo:      ");
        print_r (IPS_GetScript ($ObjID));
        print("
3. SkriptName:      " . IPS_GetScriptFile ($ObjID));
        if (IPS_GetScript ($ObjID)['LastExecute'])
            print("
4. LastExecute:     " . strftime ("%d.%m.%y-%X", IPS_GetScript ($ObjID)['LastExecute']));
        break;
    case 4:
        $EventTyp = array ('getriggert', 'zyklisch', 'Wochenplan');
        print("
2. EventInfo (" . $EventTyp[IPS_GetEvent ($ObjID)['EventType']] . '):     ');
        print_r (IPS_GetEvent ($ObjID));
        print("
3. LastRun:         " . strftime ("%d.%m.%y-%X", IPS_GetEvent ($ObjID)['LastRun']));
        print("
4. NextRun:         " . strftime ("%d.%m.%y-%X", IPS_GetEvent ($ObjID)['NextRun']));
        break;
    case 5:
        $MedienTyp = array ('Formular', 'Bild', 'Ton', 'Stream', 'Chart');
        print("
2. MedienobjektInfo (" . $MedienTyp[IPS_GetMedia ($ObjID)['MediaType']] . '):     ');
        print_r (IPS_GetMedia ($ObjID));
        if (IPS_GetMedia ($ObjID)['LastUpdate'])
            print("
3. LastUpdate:     " . strftime ("%d.%m.%y-%X", IPS_GetMedia ($ObjID)['LastUpdate']));
        break;
    case 6:
        print("
2. LinkInfo:         ");
        print_r (IPS_GetLink ($ObjID));
        print( "
3. Target:   " . IPS_GetLink ($ObjID)['TargetID'] . ' ' . IPS_GetLocation (IPS_GetLink ($ObjID)['TargetID']));
        break;
    default:
}
?>


Ergibt z.B.:

Object:   37671 Skripte\Konfiguration\ObjectAnalyse (ist Skript)
Parent:   45470 Skripte\Konfiguration

1. ObjectInfo:    Array
(
    [ChildrenIDs] => Array
        (
        )

    [HasChildren] => 
    [ObjectIcon] => 
    [ObjectID] => 37671
    [ObjectIdent] => 
    [ObjectInfo] => 
    [ObjectIsHidden] => 
    [ObjectIsReadOnly] => 
    [ObjectName] => ObjectAnalyse
    [ObjectPosition] => 2
    [ObjectSummary] => 
    [ObjectType] => 3
    [ParentID] => 45470
)

2. SkriptInfo:      Array
(
    [IsBroken] => 
    [LastExecute] => 1438422139
    [ScriptFile] => ObjectAnalyse.ips.php
    [ScriptID] => 37671
    [ScriptType] => 0
)

3. SkriptName:      ObjectAnalyse.ips.php
4. LastExecute:     01.08.15-11:42:19

Quelle: settings.xml - „LastUpdated/LastChanged-Value“ manuell editieren (by Horst und nancilla)

<? 
// Datum und Zeit 

$tag = 13; 
$monat = 8; 
$jahr = 2003; 

$stunden = 15; 
$minuten = 04; 
$sekunden = 00; 


// Unix-Timestamp 
$time = mktime($stunden,$minuten,$sekunden,$monat,$tag,$jahr); 
if (!date("I",$time)){$gmtplus = 3600;}else{$gmtplus = 7200;}  // Sommerzeit ? 

// Delphi-Timestamp (DateTime) 
$ergebnis = round((($time + $gmtplus)/ 86400) + 25569,5); 

// Überprüfung mit Funktion Horst 
function delphiTStoUnix ($ts) 
{ 
    if (!date("I")){$gmtplus = 3600;}else{$gmtplus = 7200;} 
    $result = round(($ts - 25569) * 86400)-$gmtplus; 
    $result = strtotime(gmdate("Y-m-d\\TH:i:s".date("P", time()), $result)); 
    return $result; 
} 
$ergebnis_horst = date("H:i:s d.m.Y", delphiTStoUnix(str_replace(",", ".", $ergebnis))); 

echo "$ergebnis_horst

"; 
echo "$ergebnis
"; 
?>

by Bayaro:

<?
$TestDatum = "11.01.2010 12:00";

$test1 = strtotime($TestDatum);
echo $test1.PHP_EOL;
$test2 = date("d.m.Y H:i", $test1);
echo $test2.PHP_EOL;

$test3 = UnixToDelphiTime($TestDatum);
echo $test3;



function UnixToDelphiTime($unixtime) {
	$unixtime = strtotime($unixtime);
	$delphitime = ($unixtime / 86400) + 25569;
	return $delphitime;
}
?>

Quelle: Gleitenden Mittelwert oder gleitenden Median berechnen (by bbernhard)

<?
$IDArchiveHandler = 22801 /*your Archive Handler ID*/;
$varId = 37190 /*Var Id you want to examine*/;
$interval = 50; /*Timespan in seconds for Mean/Median Calculation*/;
$default = 0; /* default value in case no data capturd */

echo "Mean: ".getMean ($IDArchiveHandler,$varId,$interval,$default);
echo chr (13). chr (10);
echo "Median: ".getMedian ($IDArchiveHandler,$varId,$interval,$default);



function getMean ($IDArchivehandler,$varId,$log_interval,$default) {
$logData = AC_GetLoggedValues ($IDArchivehandler, $varId, time()- $log_interval,time(),-1);
if (count($logData) <1) return $default;
foreach ($logData as $key => $data)
{
    $value[$key] = $data['Value'];
}
return array_sum($value)/count($value);
}

function getMedian ($IDArchivehandler,$varId,$log_interval,$default) {
$logData = AC_GetLoggedValues ($IDArchivehandler, $varId, time()-$log_interval,time(),-1);
if (count($logData) <1) return $default;
foreach ($logData as $key => $data)
{
    $value[$key] = $data['Value'];
}
asort($value);
return $value[count($value)/2];
}
?>

Quelle: HomeMatic Funk-Schaltaktor 1fach mit Leistungsmessung - Seite 15 (by Frauenhofer)

<?
$archiveID = 24522 /*[Archiv]*/;
$objectID = DEINE ID ;  // hier deine Steckdose rein der Wert der die Watt oder was auch immer loggt, muss aber ein geloggter wert sein
$endtime = time(); // time() for "now"
$starttime = time()-(5*60); // n für minuten zurück
$limit = 0; // kein Limit

//print_r(AC_GetLoggedValues($archiveID, $objectID, $starttime, $endtime, $limit));
$buffer = AC_GetLoggedValues($archiveID, $objectID, $starttime, $endtime, $limit);
$anzahl = 0;
$summe = 0;
foreach ($buffer as $werte){
    $wert = $werte["Value"];
    $anzahl = $anzahl +1;
    $summe = $summe + $wert;
}
echo "N-Werte: ".$anzahl. "
";
$mittelw = $summe / $anzahl;
echo "Mittelwert: " . $mittelw . "
";
SetValue(10810 /*Steckdose Wama]*/ ,$mittelw);  // in eine Variable speichern wenn du willst
if ($mittelw < 10)
{
//tu dies
echo "test" ;
}
?>

Quelle: PHP Dateinamen für neueste Datei in einem Verzeichnis auslesen (by 1007)

    $dir = IPS_GetKernelDir() . "logs\\";
   $lastfile = '';

    $handle = opendir( $dir );

   if( !$handle )
       return false;
    
    while ( ( $file = readdir( $handle ) ) !== false )
        {
        if( $file != '.' && $file != '..' && is_file ( $dir.$file ) )
            {
         if( filemtime( $dir.$file ) >= filemtime( $dir.$lastfile ) )
                {
            $lastfile = $file;
                }
        }

    }

    closedir( $handle );

    echo "
Neueste Datei:" . $lastfile;

Quelle: Skript-Ausführung (by steiner)

<?
// ID von diesem Skript ermitteln
$event = IPS_GetObject($_IPS['SELF']);
$id = $event['ObjectID'];  
echo "Skript-ID: $id
";

$data = IPS_GetScript($id);
// Unix Timestamp des letzten Aufrufs
// siehe auch:http://www.ip-symcon.de/service/dokumentation/befehlsreferenz/skriptverwaltung/ips-getscript/
$last_up = $data[LastExecute];   
echo "Letzte Ausführung Unix: $last_up
";
// zur Kontrolle
// siehe auch: http://de.php.net/manual/de/function.date.php
echo "Letzte Ausführung (His): ".date("H:i:s", $last_up)."
";

$deltaT = time() - $last_up;
echo "Letzte Ausführung in sec. : $deltaT
";

if ($deltaT > 60){

    // hier folgt ein tolles Skript
    // das nur alle 60 Sekunden ausgeführt werden darf

}
?>

Quelle: Skript-Ausführung (by HJH)

<?
define ("SPERRZEIT", 60);                           // Wartezeit (Sekunden) in der das Skript nicht abgearbeitet werden darf 

switch ($_IPS['SENDER']) 
{ 
    case "Variable":                                // Trigger durch Variable 
       if (IPS_GetScriptTimer($_IPS['SELF']) == 0) 
        {                                           // Timer läuft nicht, Skript darf ausgeführt werden 
          IPS_SetScriptTimer($_IPS['SELF'], SPERRZEIT); // Timer aufziehen und 
            // weitere Anweisungen                  // Skript ausführen 
        } 
        else                                        // Sperrzeit läuft bereits, daher 
            return;                                 // Abarbeitung abbrechen 
    break; 
     
    case "TimerEvent":                              // Trigger durch Timer 
        IPS_SetScriptTimer($_IPS['SELF'], 0);           // Timer wieder löschen 
    break; 
}
?>

Quelle: Fehlerhafte Objekte / Skripte auflisten (by Horst)

<?php
// -----------------------------------------------------------------------------
// WebFront-freundliche HTML-Ausgabe aller defekten Instanzen, Skripte und Links
// -----------------------------------------------------------------------------

$ContentVariableID = 12345;    // Variablen-ID zur Speicherung der Meldung.
                               // Wert 0 führt zur direkten Ausgabe.

// -----------------------------------------------------------------------------

$content = '';

$instanceStatusCodes = array(
    100 => 'module base status',
    101 => 'module is being created',
    102 => 'module created and running',
    103 => 'module is being deleted',
    104 => 'module is not beeing used',
    200 => 'instance error',
    201 => 'instance could not be created'
);

$errorCount = 0;

$ids = IPS_GetInstanceList();
foreach ($ids as $id)
{
    $instance = IPS_GetInstance($id);
    if ($instance['InstanceStatus'] > 103)
    {
        if ($errorCount == 0)
        {
            $content .= '<b>Defekte Instanzen:</b><br />'."
";
        }
        $errorCount++;
        $content .= '<span style="color: '.($instance['InstanceStatus'] >= 200 ? 'red' : 'grey').';">#'.$id.': '.IPS_GetLocation($id).': '.$instanceStatusCodes[$instance['InstanceStatus']].'</span><br />'."
";
    }
}

if ($errorCount > 0)
{
    $content .= '<br />'."
";
    $errorCount = 0;
}
$ids = IPS_GetScriptList();
foreach ($ids as $id)
{
    $script = IPS_GetScript($id);
    if ($script['IsBroken'])
    {
        if ($errorCount == 0)
        {
            $content .= '<b>Defekte Skripte:</b><br />'."
";
        }
        $errorCount++;
        $content .= '<span style="color: red;">#'.$id.': '.IPS_GetLocation($id).'</span><br />'."
";
    }
}

if ($errorCount > 0)
{
    $content .= '<br />'."
";
    $errorCount = 0;
}
$ids = IPS_GetLinkList();
foreach ($ids as $id)
{
    $link = IPS_GetLink($id);
    if (!IPS_ObjectExists($link['LinkChildID']))
    {
        if ($errorCount == 0)
        {
            $content .= '<b>Defekte Links:</b><br />'."
";
        }
        $errorCount++;
        $content .= '<span style="color: red;">#'.$id.': '.IPS_GetLocation($id).'</span><br />'."
";
    }
}

$printContent = true;

if (IPS_VariableExists((int)$ContentVariableID))
{
    $variable = IPS_GetVariable($ContentVariableID);
    if ($variable['VariableValue']['ValueType'] === 3)
    {
        $printContent = false;
        SetValueString($ContentVariableID, $content);
    }
}

if ($printContent)
{
    echo $content;
}
?>