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";
?>
<?
$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" ;
}
?>
<?
##################################################################################
# Zum überprüfen ob der entsprechende TCP-Port erreichbar ist oder geblockt wird #
# Für einen UDP Check muss ein udp// vor die IP-Adresse gesetzt werden. #
##################################################################################
//$port = array(1012,49000); // Fritzbox
//$port = array(2000,2001,2002,5544); // Homematic. Für den Lanadapter muss nur Port 2001 und 5544 erreichbar sein
for($i=0; $i<count($port); $i++)
{
$socket = fsockopen("xxx.xxx.xxx.xxx", $port[$i], $errno, $errstr); // IP Adresse anpassen
if(!$socket)
{
echo "ERROR: $errno - $errstr
";
}
else
{
echo "Port: ".$port[$i]." ist erreichbar.
";
}
}
?>
<?
// Skript einmal von Hand ausführen
$Check_Intervall = 60; // Prüf-Intervall in Sekunden
if ($_IPS['SENDER'] == "Execute") {
IPS_SetScriptTimer($_IPS['SELF'], $Check_Intervall);
}
$Threads = IPS_GetScriptThreadList();
$count = 0;
for($i=0;$i<count($Threads);$i++) {
if (@IPS_GetScriptThread($i)['StartTime'] != 0) {
$count++;
}
}
$Auslastung = round(($count/count($Threads)), 1)*100;
echo "Die PHP-Threads haben eine Auslastung von $Auslastung%";
if ($Auslastung >= 80) {
echo "!!!ACHTUNG!!! PHP-Threads haben eine Auslastung von $Auslastung%";
}
?>
<?
// Geloggte Daten eines Bewegungsmelder aus dem Archiv auswerten
//
// Beispiel:
// Bewegungen vom 11.09.2015 (00:00:00 bis 23:59:59) auswerten
//
// !!ACHTUNG!! Da "Rohdaten" verwendet werden, kann die Auswahl eines größeren Zeitraumes eine erhöhte CPU-Auslastung verursachen!
$ArchiveID = IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}')[0]; // Archiv Handler ID wird automatisch ausgelesen
$State_VarID_Bewegungsmelder = 12345 /*[Hardware\HomeMatic\Bewegungsmelder\B04 (Wohnzimmer vorne)\Sensor\MOTION]*/; // Hier die Variablen ID (z.B. bei HomeMatic die "STATE" Variable eintragen
// Zeitraum bei AC_GetLoggedValues wird wie folgt angegeben (Stunde, Minute, Sekunde, Monat, Tag, Jahr)
$ZeitraumVON = mktime(0, 0, 0, 9, 11, 2015); // Es kann auch date oder strtotime oder sonstiges verwendet werden
$ZeitraumBIS = mktime(23, 59, 59, 9, 11, 2015); // Es kann auch date oder strtotime oder sonstiges verwendet werden
$LogDatenAR = AC_GetLoggedValues($ArchiveID, $State_VarID_Bewegungsmelder, $ZeitraumVON, $ZeitraumBIS, 0);
//print_r($LogDatenAR);
$Count = 0;
$Duration = 0;
foreach ($LogDatenAR as $LogWert) {
if ($LogWert['Value'] == 1) {
$Count++;
$Duration = $Duration + $LogWert['Duration'];
}
}
$DurationSek = $Duration;
$DurationMin = intval($Duration / 60);
$DurationStd = round($DurationMin / 60, 2);
echo "Es wurden $Count Bewegungs-Phasen erkannt.
Die Bewegungs-Phasen hatten eine Gesamtdauer von $DurationMin Minuten (= $DurationSek Sekunden = $DurationStd Stunden).";
?>
Beispiel mit einer Haustür:
<?
// Geloggte Daten einer Tür/eines Fenster aus dem Archiv auswerten
//
// Beispiel:
// Bewegungen vom 11.09.2015 (00:00:00 bis 23:59:59) auswerten
//
// !!ACHTUNG!! Da "Rohdaten" verwendet werden, kann die Auswahl eines größeren Zeitraumes eine erhöhte CPU-Auslastung verursachen!
$ArchiveID = IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}')[0]; // Archiv Handler ID wird automatisch ausgelesen
$State_VarID_TuerFenster = 12345 /*[Hardware\HomeMatic\Tür-Fenster-Kontakt\KONTAKT03 (Haustür)\Kontakt\STATE]*/; // Hier die Variablen ID (z.B. bei HomeMatic die "STATE" Variable eintragen
// Zeitraum bei AC_GetLoggedValues wird wie folgt angegeben (Stunde, Minute, Sekunde, Monat, Tag, Jahr)
$ZeitraumVON = mktime(0, 0, 0, 9, 11, 2015); // Es kann auch date oder strtotime oder sonstiges verwendet werden
$ZeitraumBIS = mktime(23, 59, 59, 9, 11, 2015); // Es kann auch date oder strtotime oder sonstiges verwendet werden
$LogDatenAR = AC_GetLoggedValues($ArchiveID, $State_VarID_TuerFenster, $ZeitraumVON, $ZeitraumBIS, 0);
//print_r($LogDatenAR);
$Count = 0;
$Duration = 0;
foreach ($LogDatenAR as $LogWert) {
if ($LogWert['Value'] == 1) {
$Count++;
$Duration = $Duration + $LogWert['Duration'];
}
}
$DurationSek = $Duration;
$DurationMin = intval($Duration / 60);
$DurationStd = round($DurationMin / 60, 2);
echo "Es wurden $Count Tür/Fenster-Öffnungen erkannt.
Die gesamte Öffnungsdauer beträgt $DurationSek Sekunden (= $DurationMin Minuten = $DurationStd Stunden).";
?>