From dcdc2f8600b280fce8148606bb278c34df977ae5 Mon Sep 17 00:00:00 2001 From: christian1180 <126362145+christian1180@users.noreply.github.com> Date: Sun, 24 Nov 2024 09:02:32 +0100 Subject: [PATCH] Fallback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Anpassungen mussten Rückgängig gemacht werden - Multi-Diagramme nicht möglich --- diagramm_collect.php | 50 +- import.php | 51 +- index.php | 19 +- interface.php | 1080 +++++++++++++++++++++++++++--------------- servicemeldung.php | 15 +- 5 files changed, 810 insertions(+), 405 deletions(-) diff --git a/diagramm_collect.php b/diagramm_collect.php index fe23c29..263422c 100644 --- a/diagramm_collect.php +++ b/diagramm_collect.php @@ -1,23 +1,24 @@ /dev/null 2>&1 -// -// mit PHP-CLI -// */1 * * * * /usr/bin/php -f /pfad-zu-homehub/diagramm_collect.php >/dev/null 2>&1 +include("config/config.php"); -require_once(__DIR__.'/interface.php'); - +// interface Pfad bestimmen +$interface = $_SERVER['SERVER_NAME'].":".$_SERVER['SERVER_PORT'].str_replace("diagramm_collect.php", "",$_SERVER['PHP_SELF']); +if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') { + $interface = "https://".$interface; +} +else $interface = "http://".$interface; +echo $interface; date_default_timezone_set("Europe/Berlin"); $tage = array("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"); // Lese aus custom.json die diagramm ise_id welche geloggt werden sollen -$data = file_get_contents(__DIR__.'/config/custom.json'); +$data = file_get_contents('config/custom.json'); $json = json_decode($data, true); @@ -112,7 +113,9 @@ $historyZaehler = 0; // Abfrage an die CCU - $xml = simplexml_load_string(api_state($ccu, $diagramm_change, true)); + $xmlFile = $interface.'interface.php?state.cgi&onlyvalue=1&datapoint_id='.$diagramm_change; + echo $xmlFile; + $xml = simplexml_load_file($xmlFile); echo $xml; foreach ( $xml->datapoint as $states ) { @@ -128,10 +131,10 @@ $states['value'] = $x[0].'.'.substr($x[1],0,1); } - if(file_exists(__DIR__."/cache/diagramm_change_".$states['ise_id']."_".$history[$historyZaehler].".csv")) + if(file_exists("cache/diagramm_change_".$states['ise_id']."_".$history[$historyZaehler].".csv")) { // Lese Datei in Array - $lines = file(__DIR__."/cache/diagramm_change_".$states['ise_id']."_".$history[$historyZaehler].".csv"); + $lines = file("cache/diagramm_change_".$states['ise_id']."_".$history[$historyZaehler].".csv"); // Sortiere alte Einträge aus if(count((array)$lines)>= $history[$historyZaehler]) @@ -162,7 +165,7 @@ { // Schreiben $inhalt = $inhalt.$tage[date("w")]." ".date("H:i",time()).";".$states['value']."\n"; - $file_handle = fopen(__DIR__."/cache/diagramm_change_".$states['ise_id']."_".$history[$historyZaehler].".csv", 'w+'); + $file_handle = fopen("cache/diagramm_change_".$states['ise_id']."_".$history[$historyZaehler].".csv", 'w+'); fwrite($file_handle, $inhalt); fclose($file_handle); } @@ -175,7 +178,7 @@ { // Schreiben $inhalt = $inhalt.$tage[date("w")]." ".date("H:i",time()).";".$states['value']."\n"; - $file_handle = fopen(__DIR__."/cache/diagramm_change_".$states['ise_id']."_".$history[$historyZaehler].".csv", 'w+'); + $file_handle = fopen("cache/diagramm_change_".$states['ise_id']."_".$history[$historyZaehler].".csv", 'w+'); fwrite($file_handle, $inhalt); fclose($file_handle); } @@ -192,8 +195,10 @@ $historyZaehler = 0; // Abfrage an die CCU - $xml = simplexml_load_string(api_state($ccu, $diagramm, true)); - echo $xml; + $xmlFile = $interface.'/interface.php?state.cgi&onlyvalue=1&datapoint_id='.$diagramm; + echo $xmlFile; + $xml = simplexml_load_file($xmlFile); +echo $xml; foreach ($xml->datapoint as $states) { $inhalt = ""; @@ -220,10 +225,10 @@ - if(file_exists(__DIR__."/cache/diagramm_".$states['ise_id']."_".$history[$historyZaehler].".csv")) + if(file_exists("cache/diagramm_".$states['ise_id']."_".$history[$historyZaehler].".csv")) { // Lese Datei in Array - $lines = file(__DIR__."/cache/diagramm_".$states['ise_id']."_".$history[$historyZaehler].".csv"); + $lines = file("cache/diagramm_".$states['ise_id']."_".$history[$historyZaehler].".csv"); // Sortiere alte Einträge aus if(count((array)$lines)>= $history[$historyZaehler]) @@ -251,7 +256,7 @@ { $inhalt = $inhalt.date("H:i",time()).";".$states['value']."\n"; } - $file_handle = fopen(__DIR__."/cache/diagramm_".$states['ise_id']."_".$history[$historyZaehler].".csv", 'w+'); + $file_handle = fopen("cache/diagramm_".$states['ise_id']."_".$history[$historyZaehler].".csv", 'w+'); fwrite($file_handle, $inhalt); fclose($file_handle); $historyZaehler++; @@ -259,4 +264,13 @@ } echo "Ende"; +function curl_get_content( $url ) { + $curl_handle=curl_init(); + curl_setopt($curl_handle, CURLOPT_URL,$url); + curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2); + curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); + $content = curl_exec($curl_handle); + curl_close($curl_handle); + return $content; +} ?> diff --git a/import.php b/import.php index bbf9266..06d9448 100644 --- a/import.php +++ b/import.php @@ -1,11 +1,7 @@ systemVariable as $sysvar) { @@ -149,7 +167,8 @@ unset($sysvarsXml); // Programme von der CCU laden - $programsXml = simplexml_load_string(api_programlist($ccu)); + $programlistCgi = curl_get_content($interface.'/interface.php?programlist.cgi'); + $programsXml = simplexml_load_string($programlistCgi); // Programme foreach ($programsXml->program as $program) { @@ -187,7 +206,17 @@ } else { - header('Location: ./index.php'); + header('Location: index.php'); } +function curl_get_content( $url ) { + $curl_handle=curl_init(); + curl_setopt($curl_handle, CURLOPT_URL,$url); + curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2); + curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); + $content = curl_exec($curl_handle); + curl_close($curl_handle); + return $content; +} ?> + diff --git a/index.php b/index.php index ef22553..c3c3637 100644 --- a/index.php +++ b/index.php @@ -30,8 +30,22 @@ } +// definiere Interface +$interface = $_SERVER['SERVER_NAME'].":".$_SERVER['SERVER_PORT'].str_replace("index.php", "",$_SERVER['PHP_SELF']); +if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') { + $interface = "https://".$interface; +} +else $interface = "http://".$interface; + +// Prüfe auf config.php +if(!file_exists("config/config.php")) +{ + header('Location: setup.php'); + exit; +} + // Lade Konfiuration der Homematic -require_once(__DIR__.'/interface.php'); +require("config/config.php"); // Setze Variable selectedCat auf die aktuelle Seite if(!isset($_GET['seite'])) @@ -422,7 +436,8 @@ $str = file_get_contents('dev/export.json'); } else { - $xml = simplexml_load_string(api_systemNotification($ccu)); + //$xml = simplexml_load_file('http://'.$homematicIp.'/config/xmlapi/systemNotification.cgi?sid='.$apitoken); + $xml = simplexml_load_file($interface.'interface.php?systemNotification.cgi'); $str = file_get_contents('config/export.json'); } // Für Devices diff --git a/interface.php b/interface.php index da178a3..81dc116 100644 --- a/interface.php +++ b/interface.php @@ -1,4 +1,5 @@ Falls authentifizierung notwendig, bitte in "config/config.php" wie folgt eintragen: /* @@ -8,83 +9,24 @@ */ -if (!file_exists(__DIR__.'/config/config.php')) { - header('Location: setup.php'); - exit; -} -require_once(__DIR__.'/config/config.php'); - -// Konfiguration als Array aus Config-Variablen zusammenbauen -if (empty($ccu) or !is_array($ccu)) $ccu = array( - 'host' => $homematicIp, - 'https' => !empty($ccu_https), - 'user' => $ccu_user, - 'pw' => $ccu_pass -); -// -- -$ccu['url'] = "http".(!empty($ccu['https']) ? 's' : '')."://" . $ccu['host'] . ":".(!empty($ccu['https']) ? '4' : '')."8181/homehub.exe"; +if(!isset($ccu_user)) { $ccu_user = ""; } +if(!isset($ccu_pass)) { $ccu_pass = ""; } -function ccu_remote($ccu, $ccu_request, $plain_result = false) { +if(!isset($ccu_https)) { $ccu_https = false; } - // Als indikator für die Rückgabe, um den Overhead zu filtern - $delimeter = '---'.uniqid('hm-end').'---'; - if (!$plain_result) { - $ccu_request = str_replace(array('<','>'), array('*<*','*>*'), $ccu_request); - $ccu_request = $ccu_request."\nWriteLine(\"".$delimeter."\");"; - } - - // curl Anfrage bauen - $curl = curl_init($ccu['url']); - if (!empty($ccu['user']) and !empty($ccu['pw'])) curl_setopt($curl, CURLOPT_USERPWD, $ccu['user'].':'.$ccu['pw']); - curl_setopt($curl, CURLOPT_POST, 1); - curl_setopt($curl, CURLOPT_POSTFIELDS, $ccu_request); - curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); - curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 2); - curl_setopt($curl, CURLOPT_TIMEOUT, 20); - curl_setopt($curl, CURLOPT_FAILONERROR, true); - if (!empty($ccu['https'])) { - curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); - curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); - } - $content = curl_exec($curl); - if ($content === false) { - die(basename(__FILE__) . " - CURL error " . curl_getinfo($curl_handle, CURLINFO_HTTP_CODE) . " " . curl_error($curl_handle)); - } - curl_close($curl); - #var_dump("\n\nCCU remote", $content, "\n ---------- \n\n"); - - // Trenne Rückgabe vom Overhead - if (!$plain_result) $content = strstr($content, $delimeter, true); - - if (!$plain_result) { - if (strpos($content, '<') !== false) { - // Konvertiere XML kritische Zeichen in HTML-Format # Maskierung sollte eigentlich nicht notwendig sein. - $content = str_replace('<', '<', $content); # Ggf. sollten wir uns eine elegantere Variante überlegen, RegEx oder ähnliches, - $content = str_replace('>', '>', $content); # oder im HM-Skript mit .replace() maskieren. - $content = str_replace('*<*', '<', $content); - $content = str_replace('*>*', '>', $content); - } - } - - return $content; -} +$ccu_remoteskript_uri = "http".(!empty($ccu_https) ? 's' : '')."://" . $homematicIp . ":".(!empty($ccu_https) ? '4' : '')."8181/homehub.exe"; // ALLE STATES -if (isset($_SERVER['QUERY_STRING']) and (strpos($_SERVER['QUERY_STRING'], "statelist.cgi") !== false)) { - header("Content-Type: text/xml; charset=ISO-8859-1"); - echo api_statelist($ccu, isset($_GET['debug'])); -} - -function api_statelist($ccu, $debug = false) { +if (strpos($_SERVER['QUERY_STRING'], "statelist.cgi") !== false) { + $ccu_request = ""; // Baue Skript zusammen - $ccu_request = <<"); + $ccu_request = $ccu_request . "WriteLine(\"*<*stateList*>*\"); integer show_remote = 1; integer show_internal = 1; -string id; +string id; ! Alle Datenpunkte durchlaufen !foreach(id, dom.GetObject(ID_DEVICES).EnumUsedIDs()) { @@ -100,9 +42,9 @@ function api_statelist($ccu, $debug = false) { string sDevInterface = oDeviceInterface.Name(); string sDevType = oDevice.HssType(); - WriteLine(""); + WriteLine(\"*<*device name='\" # oDevice.Name() #\"' ise_id='\" # oDevice.ID() # \"' unreach='false' sticky_unreach='false' config_pending='false'*>*\"); - string cid; + string cid; integer x = 0; ! Alle Datenpunkte durchlaufen foreach(cid, oDevice.Channels()) { @@ -110,70 +52,103 @@ function api_statelist($ccu, $debug = false) { ! Einzelnen Kanal holen var ch = dom.GetObject(cid); ! Namen und Wert des Kanals ausgeben - Write(""); - WriteLine(""); + Write(\"'*>*\"); + WriteLine(\"\"); - string did; + string did; ! Alle Datenpunkte durchlaufen foreach(did, ch.DPs().EnumUsedIDs()) { var dp = dom.GetObject(did); - string dpA = dp.Name().StrValueByIndex(".", 2); + string dpA = dp.Name().StrValueByIndex(\".\", 2); - if( (dpA != "ON_TIME") && (dpA != "INHIBIT") && (dpA != "CMD_RETS") && (dpA != "CMD_RETL") && (dpA != "CMD_SETS") && (dpA != "CMD_SETL") ) { - WriteLine(""); + if( (dpA != \"ON_TIME\") && (dpA != \"INHIBIT\") && (dpA != \"CMD_RETS\") && (dpA != \"CMD_RETL\") && (dpA != \"CMD_SETS\") && (dpA != \"CMD_SETL\") ) { + WriteLine(\"*<*datapoint name='\"#dp.Name()#\"' type='\" # dp.Name().StrValueByIndex(\".\", 2) #\"' ise_id='\"#dp.ID()#\"' state='\"#dp.Value()#\"' value='\"#dp.Value()#\"' valuetype='\"#dp.ValueType()#\"' valueunit='\" # dp.ValueUnit() # \"' timestamp='\" # dp.Timestamp().ToInteger()# \"' operations='\"#dp.Operations()#\"'/*>*\"); } } - WriteLine(""); + WriteLine(\"*<*/channel*>*\"); x=x+1; } + - - WriteLine(""); + WriteLine(\"*<*/device*>*\"); } -WriteLine(""); -EOHM; +WriteLine(\"*<*/stateList*>*\");"; // Debug Mode - if ($debug) return($ccu_request); + if(isset($_GET["debug"])) + { + echo $ccu_request; + exit(); + } - // Schreibe Ausgabe - return "\n".ccu_remote($ccu, $ccu_request); + // Als indikator für die Rückgabe, um den Overhead zu filtern + $ccu_request = $ccu_request ."WriteLine(\"ENDE\");"; + +// Curl Anfrage bauen + $curl = curl_init(); + curl_setopt($curl,CURLOPT_URL, $ccu_remoteskript_uri); + if ($ccu_user != "" && $ccu_pass != "") { + curl_setopt($curl,CURLOPT_USERPWD, $ccu_user.":".$ccu_pass); + } + curl_setopt($curl,CURLOPT_POST, 1); + curl_setopt($curl,CURLOPT_POSTFIELDS, $ccu_request); + curl_setopt($curl,CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl,CURLOPT_CONNECTTIMEOUT ,2); + curl_setopt($curl,CURLOPT_TIMEOUT, 20); + if (!empty($ccu_https)) { + curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, false); + } + $content = curl_exec($curl); + curl_close($curl); + // exit(); + // Trenne Rückgabe vom Overhead + $cleancontent = explode("ENDE",$content); + + // Konvertiere XML kritische Zeichen in HTML-Format + $cleancontent[0] = str_replace("<","<", $cleancontent[0]); + $cleancontent[0] = str_replace( ">",">", $cleancontent[0]); + $cleancontent[0] = str_replace("*<*","<", $cleancontent[0]); + $cleancontent[0] = str_replace("*>*", ">", $cleancontent[0]); + + // Schreibe Ausgabe + header("Content-Type: text/xml; charset=ISO-8859-1"); + echo ""; + echo $cleancontent[0]; + exit(); } -// ALLE STATES -if (isset($_SERVER['QUERY_STRING']) and (strpos($_SERVER['QUERY_STRING'], "statelistall.cgi") !== false)) { - header("Content-Type: text/xml; charset=ISO-8859-1"); - echo api_statelistall($ccu, isset($_GET['debug'])); -} -function api_statelistall($ccu, $debug = false) { + +// ALLE STATES +if (strpos($_SERVER['QUERY_STRING'], "statelistall.cgi") !== false) { + $ccu_request = ""; // Baue Skript zusammen - $ccu_request = <<"); + $ccu_request = $ccu_request . "WriteLine(\"*<*stateList*>*\"); integer show_remote = 1; integer show_internal = 1; -string id; +string id; ! Alle Datenpunkte durchlaufen !foreach(id, dom.GetObject(ID_DEVICES).EnumUsedIDs()) { @@ -189,9 +164,9 @@ function api_statelistall($ccu, $debug = false) { string sDevInterface = oDeviceInterface.Name(); string sDevType = oDevice.HssType(); - WriteLine(""); + WriteLine(\"*<*device name='\" # oDevice.Name() #\"' ise_id='\" # oDevice.ID() # \"' unreach='false' sticky_unreach='false' config_pending='false'*>*\"); - string cid; + string cid; integer x = 0; ! Alle Datenpunkte durchlaufen foreach(cid, oDevice.Channels()) { @@ -199,72 +174,102 @@ function api_statelistall($ccu, $debug = false) { ! Einzelnen Kanal holen var ch = dom.GetObject(cid); ! Namen und Wert des Kanals ausgeben - Write(""); - WriteLine(""); + Write(\"'*>*\"); + WriteLine(\"\"); - string did; + string did; ! Alle Datenpunkte durchlaufen foreach(did, ch.DPs()) { var dp = dom.GetObject(did); - string dpA = dp.Name().StrValueByIndex(".", 2); + string dpA = dp.Name().StrValueByIndex(\".\", 2); - if( (dpA != "ON_TIME") && (dpA != "INHIBIT") && (dpA != "CMD_RETS") && (dpA != "CMD_RETL") && (dpA != "CMD_SETS") && (dpA != "CMD_SETL") ) { - WriteLine(""); + if( (dpA != \"ON_TIME\") && (dpA != \"INHIBIT\") && (dpA != \"CMD_RETS\") && (dpA != \"CMD_RETL\") && (dpA != \"CMD_SETS\") && (dpA != \"CMD_SETL\") ) { + WriteLine(\"*<*datapoint name='\"#dp.Name()#\"' type='\" # dp.Name().StrValueByIndex(\".\", 2) #\"' ise_id='\"#dp.ID()#\"' state='\"#dp.Value()#\"' value='\"#dp.Value()#\"' valuetype='\"#dp.ValueType()#\"' valueunit='\" # dp.ValueUnit() # \"' timestamp='\" # dp.LastTimestamp().ToInteger()# \"' operations='\"#dp.Operations()#\"'/*>*\"); } } - WriteLine(""); + WriteLine(\"*<*/channel*>*\"); x=x+1; } + - - WriteLine(""); + WriteLine(\"*<*/device*>*\"); } -WriteLine(""); -EOHM; +WriteLine(\"*<*/stateList*>*\");"; // Debug Mode - if ($debug) return($ccu_request); - - // Schreibe Ausgabe - return "\n".ccu_remote($ccu, $ccu_request); + if(isset($_GET["debug"])) + { + echo $ccu_request; + exit(); + } -} + // Als indikator für die Rückgabe, um den Overhead zu filtern + $ccu_request = $ccu_request ."WriteLine(\"ENDE\");"; +// Curl Anfrage bauen + $curl = curl_init(); + curl_setopt($curl,CURLOPT_URL, $ccu_remoteskript_uri); + if ($ccu_user != "" && $ccu_pass != "") { + curl_setopt($curl,CURLOPT_USERPWD, $ccu_user.":".$ccu_pass); + } + curl_setopt($curl,CURLOPT_POST, 1); + curl_setopt($curl,CURLOPT_POSTFIELDS, $ccu_request); + curl_setopt($curl,CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl,CURLOPT_CONNECTTIMEOUT ,2); + curl_setopt($curl,CURLOPT_TIMEOUT, 20); + if (!empty($ccu_https)) { + curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, false); + } + $content = curl_exec($curl); + curl_close($curl); + // exit(); + // Trenne Rückgabe vom Overhead + $cleancontent = explode("ENDE",$content); + + // Konvertiere XML kritische Zeichen in HTML-Format + $cleancontent[0] = str_replace("<","<", $cleancontent[0]); + $cleancontent[0] = str_replace( ">",">", $cleancontent[0]); + $cleancontent[0] = str_replace("*<*","<", $cleancontent[0]); + $cleancontent[0] = str_replace("*>*", ">", $cleancontent[0]); + -// ALLE DEVICES -if (isset($_SERVER['QUERY_STRING']) and (strpos($_SERVER['QUERY_STRING'], "devicelist.cgi") !== false)) { - header("Content-Type: text/xml; charset=ISO-8859-1"); - echo api_devicelist($ccu, isset($_GET['debug'])); + // Schreibe Ausgabe + header("Content-Type: text/xml; charset=ISO-8859-1"); + echo ""; + echo $cleancontent[0]; + exit(); } -function api_devicelist($ccu, $debug = false) { +// ALLE DEVICES +if (strpos($_SERVER['QUERY_STRING'], "devicelist.cgi") !== false) { + $ccu_request = ""; // Baue Skript zusammen - $ccu_request = <<"); -string id; + $ccu_request = $ccu_request . " WriteLine(\"\"); + string PARTNER_INVALID = \"65535\"; +integer show_internal = \"} 1 {\"; + integer show_remote = \"} 1 {\"; + WriteLine(\"*<*deviceList*>*\"); +string id; ! Alle Datenpunkte durchlaufen foreach(id, dom.GetObject(ID_DEVICES).EnumUsedIDs()) { @@ -276,442 +281,742 @@ function api_devicelist($ccu, $debug = false) { object oDeviceInterface = dom.GetObject(iDevInterfaceId); ! Namen und Wert des Elements ausgeben - geht nicht -> logged info + + boolean bDevReady = oDevice.ReadyConfig(); string sDevInterface = oDeviceInterface.Name(); string sDevType = oDevice.HssType(); - Write(""); - WriteLine(""); + Write(\"*<*device name='\" # oDevice.Name() #\"' address='\" # oDevice.Address() # \"' ise_id='\" # oDevice.ID() # \"' interface='\" # sDevInterface # \"' device_type='\" # sDevType # \"' ready_config='\" # bDevReady # \"' *>*\"); + WriteLine(\"\"); - string cid; + string cid; integer x = 0; ! Alle Datenpunkte durchlaufen foreach(cid, oDevice.Channels()) { + + ! Einzelnen Kanal holen var ch = dom.GetObject(cid); ! Namen und Wert des Kanals ausgeben - !WriteLine(ch.Name() # ": " # ch.ID()); + !WriteLine(ch.Name() # \": \" # ch.ID()); string sChnPartnerId = ch.ChnGroupPartnerId(); - if (PARTNER_INVALID == sChnPartnerId) { sChnPartnerId = ""; } - Write(""); - WriteLine(""); +Write(\"' /*>*\"); + WriteLine(\"\"); + x=x+1; + + } - WriteLine(""); + WriteLine(\"*<*/device*>*\"); + } -WriteLine(""); -EOHM; +WriteLine(\"*<*/deviceList*>*\");"; // Debug Mode - if ($debug) return($ccu_request); + if(isset($_GET["debug"])) + { + echo $ccu_request; + exit(); + } - // Schreibe Ausgabe - return "\n".ccu_remote($ccu, $ccu_request); + // Als indikator für die Rückgabe, um den Overhead zu filtern + $ccu_request = $ccu_request ."WriteLine(\"ENDE\");"; -} +// Curl Anfrage bauen + $curl = curl_init(); + curl_setopt($curl,CURLOPT_URL, $ccu_remoteskript_uri); + if ($ccu_user != "" && $ccu_pass != "") { + curl_setopt($curl,CURLOPT_USERPWD, $ccu_user.":".$ccu_pass); + } + curl_setopt($curl,CURLOPT_POST, 1); + curl_setopt($curl,CURLOPT_POSTFIELDS, $ccu_request); + curl_setopt($curl,CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl,CURLOPT_CONNECTTIMEOUT ,2); + curl_setopt($curl,CURLOPT_TIMEOUT, 20); + if (!empty($ccu_https)) { + curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, false); + } + $content = curl_exec($curl); + curl_close($curl); + // exit(); + // Trenne Rückgabe vom Overhead + $cleancontent = explode("ENDE",$content); + + // Konvertiere XML kritische Zeichen in HTML-Format + $cleancontent[0] = str_replace("<","<", $cleancontent[0]); + $cleancontent[0] = str_replace( ">",">", $cleancontent[0]); + $cleancontent[0] = str_replace("*<*","<", $cleancontent[0]); + $cleancontent[0] = str_replace("*>*", ">", $cleancontent[0]); + + + // Schreibe Ausgabe + header("Content-Type: text/xml; charset=ISO-8859-1"); + echo ""; + echo $cleancontent[0]; + exit(); +} + // ALLE PROGRAMME -if (isset($_SERVER['QUERY_STRING']) and (strpos($_SERVER['QUERY_STRING'], "programlist.cgi") !== false)) { - header("Content-Type: text/xml; charset=ISO-8859-1"); - echo api_programlist($ccu, isset($_GET['debug'])); -} - -function api_programlist($ccu, $debug = false) { +if (strpos($_SERVER['QUERY_STRING'], "programlist.cgi") !== false) { + + $ccu_request = ""; // Baue Skript zusammen - $ccu_request = <<"); -string id; + $ccu_request = $ccu_request . "WriteLine(\"*<*programList*>*\"); +string id; ! Alle Datenpunkte durchlaufen foreach(id, dom.GetObject(ID_PROGRAMS).EnumUsedIDs()) { ! Einzelnen Datenpunkt holen var sysProgram = dom.GetObject(id); ! Namen und Wert des Elements ausgeben - speziell -> operate='' - Write(""); + Write(\"true'/*>*\"); } else { - Write("false'/>"); + Write(\"false'/*>*\"); } - WriteLine(""); + WriteLine(\"\"); } -WriteLine(""); -EOHM; +WriteLine(\"*<*/programList*>*\");"; // Debug Mode - if ($debug) return($ccu_request); + if(isset($_GET["debug"])) + { + echo $ccu_request; + exit(); + } - // Schreibe Ausgabe - return "\n".ccu_remote($ccu, $ccu_request); + // Als indikator für die Rückgabe, um den Overhead zu filtern + $ccu_request = $ccu_request ."WriteLine(\"ENDE\");"; +// Curl Anfrage bauen + $curl = curl_init(); + curl_setopt($curl,CURLOPT_URL, $ccu_remoteskript_uri); + if ($ccu_user != "" && $ccu_pass != "") { + curl_setopt($curl,CURLOPT_USERPWD, $ccu_user.":".$ccu_pass); + } + curl_setopt($curl,CURLOPT_POST, 1); + curl_setopt($curl,CURLOPT_POSTFIELDS, $ccu_request); + curl_setopt($curl,CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl,CURLOPT_CONNECTTIMEOUT ,2); + curl_setopt($curl,CURLOPT_TIMEOUT, 20); + if (!empty($ccu_https)) { + curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, false); + } + $content = curl_exec($curl); + curl_close($curl); + // exit(); + // Trenne Rückgabe vom Overhead + $cleancontent = explode("ENDE",$content); + + // Konvertiere XML kritische Zeichen in HTML-Format + $cleancontent[0] = str_replace("<","<", $cleancontent[0]); + $cleancontent[0] = str_replace( ">",">", $cleancontent[0]); + $cleancontent[0] = str_replace("*<*","<", $cleancontent[0]); + $cleancontent[0] = str_replace("*>*", ">", $cleancontent[0]); + + + // Schreibe Ausgabe + header("Content-Type: text/xml; charset=ISO-8859-1"); + echo ""; + echo $cleancontent[0]; + exit(); } // ALLE SYSTEMVARIABLEN -if (isset($_SERVER['QUERY_STRING']) and (strpos($_SERVER['QUERY_STRING'], "sysvarlist.cgi") !== false)) { - header("Content-Type: text/xml; charset=ISO-8859-1"); - echo api_sysvarlist($ccu, isset($_GET['debug'])); -} - -function api_sysvarlist($ccu, $debug = false) { +if (strpos($_SERVER['QUERY_STRING'], "sysvarlist.cgi") !== false) { + + $ccu_request = ""; // Baue Skript zusammen - $ccu_request = <<\n"); - -string id; + $ccu_request = $ccu_request . "WriteLine(\"*<*systemVariables*>*\n\"); + +string id; ! Alle Datenpunkte durchlaufen foreach(id, dom.GetObject(ID_SYSTEM_VARIABLES).EnumUsedIDs()){ ! Einzelnen Datenpunkt holen var oSysVar = dom.GetObject(id); ! Namen und Wert des Elements ausgeben - fehlt -> visible - Write(""); + Write(\"' \"); + Write(\"unit='\" # oSysVar.ValueUnit() # \"' type='\" # oSysVar.ValueType() # \"' subtype='\" # oSysVar.ValueSubType() # \"' logged='\" # oSysVar.DPArchive() # \"' visible='\" # oSysVar.Visible() # \"' timestamp='\" # oSysVar.Timestamp().ToInteger()# \"' value_name_0='\" # oSysVar.ValueName0() # \"' value_name_1='\" # oSysVar.ValueName1() # \"' info='\" # oSysVar.DPInfo() # \"'/*>*\"); } - WriteLine(""); -EOHM; + WriteLine(\"*<*/systemVariables*>*\");"; + + + + // Debug Mode - if ($debug) return($ccu_request); + if(isset($_GET["debug"])) + { + echo $ccu_request; + exit(); + } - // Schreibe Ausgabe - return "\n".ccu_remote($ccu, $ccu_request); + // Als indikator für die Rückgabe, um den Overhead zu filtern + $ccu_request = $ccu_request ."WriteLine(\"ENDE\");"; + +// Curl Anfrage bauen + $curl = curl_init(); + curl_setopt($curl,CURLOPT_URL, $ccu_remoteskript_uri); + if ($ccu_user != "" && $ccu_pass != "") { + curl_setopt($curl,CURLOPT_USERPWD, $ccu_user.":".$ccu_pass); + } + curl_setopt($curl,CURLOPT_POST, 1); + curl_setopt($curl,CURLOPT_POSTFIELDS, $ccu_request); + curl_setopt($curl,CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl,CURLOPT_CONNECTTIMEOUT ,2); + curl_setopt($curl,CURLOPT_TIMEOUT, 20); + if (!empty($ccu_https)) { + curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, false); + } + $content = curl_exec($curl); + curl_close($curl); + // exit(); + // Trenne Rückgabe vom Overhead + $cleancontent = explode("ENDE",$content); + + // Konvertiere XML kritische Zeichen in HTML-Format + $cleancontent[0] = str_replace("<","<", $cleancontent[0]); + $cleancontent[0] = str_replace( ">",">", $cleancontent[0]); + $cleancontent[0] = str_replace("*<*","<", $cleancontent[0]); + $cleancontent[0] = str_replace("*>*", ">", $cleancontent[0]); + + // Schreibe Ausgabe + header("Content-Type: text/xml; charset=ISO-8859-1"); + echo ""; + echo $cleancontent[0]; + exit(); } // PROGRAMM -if (isset($_SERVER['QUERY_STRING']) and (strpos($_SERVER['QUERY_STRING'], "runprogram.cgi") !== false)) { - $prog_id = ( !empty($_GET['program_id']) ? intval($_GET['program_id']) : false ); +if (strpos($_SERVER['QUERY_STRING'], "runprogram.cgi") !== false) { + // Beende wenn keine Program_ID übergeben wird - if(empty($prog_id)) + if(!isset($_GET['program_id'])) { - die('Program-ID fehlt'); + echo "keine program_id"; + exit(); } - header("Content-Type: text/xml; charset=ISO-8859-1"); - echo api_runprogram($ccu, $prog_id, isset($_GET['debug'])); -} - -function api_runprogram($ccu, int $prog_id, $debug = false) { + $ccu_request = ""; // Baue Skript zusammen - $ccu_request = <<"); -!Write(dom.GetObject("$prog_id")); -!WriteLine(""); -dom.GetObject("$prog_id").ProgramExecute(); -EOHM; + $ccu_request = $ccu_request . ' dom.GetObject("'.$_GET['program_id'].'").ProgramExecute();'; + $ccu_request = $ccu_request . "\r\n"; + $ccu_request = $ccu_request ."WriteLine(\"ENDE\");"; + // Debug Mode - if ($debug) return($ccu_request); + if(isset($_GET["debug"])) + { + echo $ccu_request; + exit(); + } + + + // Als indikator für die Rückgabe, um den Overhead zu filtern + $ccu_request = $ccu_request ."WriteLine(\"ENDE\");"; + + // Curl Anfrage bauen + $curl = curl_init(); + curl_setopt($curl,CURLOPT_URL, $ccu_remoteskript_uri); + if ($ccu_user != "" && $ccu_pass != "") { + curl_setopt($curl,CURLOPT_USERPWD, $ccu_user.":".$ccu_pass); + } + curl_setopt($curl,CURLOPT_POST, 1); + curl_setopt($curl,CURLOPT_POSTFIELDS, $ccu_request); + curl_setopt($curl,CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl,CURLOPT_CONNECTTIMEOUT ,2); + curl_setopt($curl,CURLOPT_TIMEOUT, 20); + if (!empty($ccu_https)) { + curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, false); + } + $content = curl_exec($curl); + curl_close($curl); + + // Trenne Rückgabe vom Overhead + //$cleancontent = explode("ENDE",$content); + //echo $cleancontent[0]; + exit(); // Schreibe Ausgabe - return "\n".ccu_remote($ccu, $ccu_request, true); + //header("Content-Type: application/xml; charset=ISO-8859-1"); + echo ""; + // } + // PROGRAMM aktiv inaktiv schalten -if (isset($_SERVER['QUERY_STRING']) and (strpos($_SERVER['QUERY_STRING'], "setprogrammode.cgi") !== false)) { - $prog_id = ( !empty($_GET['program_id']) ? intval($_GET['program_id']) : false ); +if (strpos($_SERVER['QUERY_STRING'], "setprogrammode.cgi") !== false) { + // Beende wenn keine Program_ID übergeben wird - if(empty($prog_id)) + if(!isset($_GET['program_id'])) { - die('Program-ID fehlt'); + echo "keine program_id"; + exit(); } - header("Content-Type: text/xml; charset=ISO-8859-1"); - echo api_setprogrammode($ccu, $prog_id, isset($_GET['debug'])); -} -function api_setprogrammode($ccu, int $prog_id, $debug = false) { + $ccu_request = ""; // Baue Skript zusammen - $ccu_request = <<"); -!Write(dom.GetObject("$prog_id")); -!WriteLine(""); -object oDatapoint = dom.GetObject("$prog_id"); -if (oDatapoint.IsTypeOf(OT_PROGRAM)) { - if (oDatapoint.Active()) { oDatapoint.Active(false); } - else { oDatapoint.Active(true); } -} -EOHM; + $ccu_request = $ccu_request . "object oDatapoint = dom.GetObject('".$_GET['program_id']."');\r\n"; + $ccu_request = $ccu_request . "if (oDatapoint.IsTypeOf(OT_PROGRAM)) {\r\n"; + $ccu_request = $ccu_request . "if (oDatapoint.Active()) {\r\noDatapoint.Active(false);}\r\n"; + $ccu_request = $ccu_request . "else {\r\noDatapoint.Active(true); }\r\n}\r\n}"; + // Debug Mode - if ($debug) return($ccu_request); + if(isset($_GET["debug"])) + { + echo $ccu_request; + exit(); + } + + + // Als indikator für die Rückgabe, um den Overhead zu filtern + $ccu_request = $ccu_request ."WriteLine(\"ENDE\");"; + + // Curl Anfrage bauen + $curl = curl_init(); + curl_setopt($curl,CURLOPT_URL, $ccu_remoteskript_uri); + if ($ccu_user != "" && $ccu_pass != "") { + curl_setopt($curl,CURLOPT_USERPWD, $ccu_user.":".$ccu_pass); + } + curl_setopt($curl,CURLOPT_POST, 1); + curl_setopt($curl,CURLOPT_POSTFIELDS, $ccu_request); + curl_setopt($curl,CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl,CURLOPT_CONNECTTIMEOUT ,2); + curl_setopt($curl,CURLOPT_TIMEOUT, 20); + if (!empty($ccu_https)) { + curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, false); + } + $content = curl_exec($curl); + curl_close($curl); + + // Trenne Rückgabe vom Overhead + //$cleancontent = explode("ENDE",$content); + //echo $cleancontent[0]; + exit(); // Schreibe Ausgabe - return "\n".ccu_remote($ccu, $ccu_request, true); + //header("Content-Type: application/xml; charset=ISO-8859-1"); + echo ""; + // } -// WERTÄNDERUNG -if (isset($_SERVER['QUERY_STRING']) and (strpos($_SERVER['QUERY_STRING'], "statechange.cgi") !== false)) { - - // Beende, wenn keine Ise_ID übergeben wird - if (empty($_GET['ise_id'])) die('Ise-ID fehlt'); - - // Beende, wenn keine Werte übergeben werden - if (!isset($_GET['new_value'])) die('Wert fehlt'); - // Trenne ise_id und new_value anhand , auf und setze als assoziatives Array zusammen - $iseids = $_GET['ise_id']; - $a_iseids = str_getcsv($iseids, ',', '"', '\\'); - $iseids = ( count($a_iseids) ? $a_iseids : array($iseids) ); - $newvalues = $_GET['new_value']; - $a_newvalues = str_getcsv($newvalues, ',', '"', '\\'); - $newvalues = ( count($a_newvalues) ? array_map('rawurldecode', $a_newvalues) : array(rawurldecode($newvalues)) ); - if (count($iseids) != count($newvalues)) die('Anzahl Parameter stimmt nicht überein'); - $set = array_combine($iseids, $newvalues); - header("Content-Type: text/xml; charset=ISO-8859-1"); - echo api_statechange($ccu, $set, isset($_GET['debug'])); -} -function api_statechange($ccu, $set, $debug = false) { +// WERTÄNDERUNG +if (strpos($_SERVER['QUERY_STRING'], "statechange.cgi") !== false) { - // $set : assoziatives Array im Format ["ise_id" => "wert"] - // Baue Skript zusammen - $ccu_request = ''; - #$ccu_request = $ccu_request."WriteLine(\"\");\n"; - foreach ($set as $ise_id => $new_value) { - if (ctype_digit($ise_id)) { - #$ccu_request = $ccu_request."WriteLine(dom.GetObject(\"".$ise_id."\"));\n"; - $ccu_request = $ccu_request."dom.GetObject(\"".$ise_id."\").State(\"".addslashes($new_value)."\");\n"; + // Beende wenn keine Program_ID übergeben wird + if((!isset($_GET['ise_id'])) OR (!isset($_GET['new_value']))) + { + echo "keine ise_id oder new_value gesetzt"; + exit(); + } + // Trenne ise_id und new_value anhand , auf + $iseids = explode(",",$_GET['ise_id']); + $newvalues = explode(",",$_GET['new_value']); + $ccu_request = ""; + + // Zähler für new_values + $i = 0; + // Baue Skript zusammen + foreach ($iseids as $iseid) { + if( ctype_digit($iseid) ) { + // $ccu_request = $ccu_request . 'WriteLine("'.$datapoint.'**Steingarten**" #dom.GetObject('.$datapoint.').Value().ToString().UriEncode()#" ");'; + $ccu_request = $ccu_request . ' dom.GetObject("'.$iseid.'").State("'.$newvalues[$i].'");'; + $ccu_request = $ccu_request . "\r\n"; + $i++; } } - #$ccu_request = $ccu_request."WriteLine(\"\");\n"; + + // Debug Mode - if ($debug) return($ccu_request); + if(isset($_GET["debug"])) + { + echo $ccu_request; + exit(); + } + + // Als indikator für die Rückgabe, um den Overhead zu filtern + $ccu_request = $ccu_request ."WriteLine(\"ENDE\");"; + + + // Als indikator für die Rückgabe, um den Overhead zu filtern + $ccu_request = $ccu_request ."WriteLine(\"ENDE\");"; + + // Curl Anfrage bauen + $curl = curl_init(); + curl_setopt($curl,CURLOPT_URL, $ccu_remoteskript_uri); + if ($ccu_user != "" && $ccu_pass != "") { + curl_setopt($curl,CURLOPT_USERPWD, $ccu_user.":".$ccu_pass); + } + curl_setopt($curl,CURLOPT_POST, 1); + curl_setopt($curl,CURLOPT_POSTFIELDS, $ccu_request); + curl_setopt($curl,CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl,CURLOPT_CONNECTTIMEOUT ,2); + curl_setopt($curl,CURLOPT_TIMEOUT, 20); + if (!empty($ccu_https)) { + curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, false); + } + $content = curl_exec($curl); + curl_close($curl); + + // Trenne Rückgabe vom Overhead + //$cleancontent = explode("ENDE",$content); + //echo $cleancontent[0]; + exit(); // Schreibe Ausgabe - return "\n".ccu_remote($ccu, $ccu_request, true); + //header("Content-Type: application/xml; charset=ISO-8859-1"); + echo ""; + // } - - //SYSVAR -if (isset($_SERVER['QUERY_STRING']) and (strpos($_SERVER['QUERY_STRING'], "sysvar.cgi") !== false)) { - - // Beende, wenn keine Ise_ID übergeben wird - if (empty($_GET['ise_id'])) die('Ise-ID fehlt'); - - $ise_id = $_GET['ise_id']; +if (strpos($_SERVER['QUERY_STRING'], "sysvar.cgi") !== false) { - header("Content-Type: text/xml; charset=ISO-8859-1"); - echo api_sysvar($ccu, $ise_id, isset($_GET['debug'])); -} - -function api_sysvar($ccu, $ise_id, $debug = false) { + // Beende wenn keine Datapoint_ID übergeben wird + if(!isset($_GET['ise_id'])) + { + echo "keine ise_ids"; + exit(); + } + + $ccu_request = ""; - // Baue Skript zusammen # Warum braucht man hier eine Schleife? Man könnte doch die SV direkt mit dom.GetObject("ise_id") aufrufen und ggf. den Typ prüfen. - $ccu_request = <<"); -string id; + // Baue Skript zusammen + $ccu_request = $ccu_request . "WriteLine(\"*<*systemVariables*>*\"); +string id; ! Alle Datenpunkte durchlaufen foreach(id, dom.GetObject(ID_SYSTEM_VARIABLES).EnumUsedIDs()){ + ! Einzelnen Datenpunkt holen var sysVar = dom.GetObject(id); - if($ise_id == sysVar.ID()) { + if(".$_GET['ise_id']." == sysVar.ID()) { ! Namen und Wert des Elements ausgeben - fehlt -> visible - Write(""); - WriteLine(""); + Write(\"*<*systemVariable name='\" # sysVar.Name() # \"' variable='\" # sysVar.Variable() # \"' value='\" # sysVar.Value() # \"' value_list='\" # sysVar.ValueList() # \"' ise_id='\" # sysVar.ID() # \"' min='\" # sysVar.ValueMin() # \"' max='\" # sysVar.ValueMax() # \"' unit='\" # sysVar.ValueUnit() # \"' type='\" # sysVar.ValueType() # \"' subtype='\" # sysVar.ValueSubType() # \"' logged='\" # sysVar.DPArchive() # \"' visible='\" # sysVar.Visible() # \"' timestamp='\" # sysVar.Timestamp().ToInteger()# \"' value_name_0='\" # sysVar.ValueName0() # \"' value_name_1='\" # sysVar.ValueName1() # \"' info='\" # sysVar.DPInfo() # \"'/*>*\"); + WriteLine(\"\"); } } -WriteLine(""); -EOHM; +WriteLine(\"*<*/systemVariables*>*\");"; // Debug Mode - if ($debug) return($ccu_request); - - // Schreibe Ausgabe - return "\n".ccu_remote($ccu, $ccu_request); + if(isset($_GET["debug"])) + { + echo $ccu_request; + exit(); + } -} + // Als indikator für die Rückgabe, um den Overhead zu filtern + $ccu_request = $ccu_request ."WriteLine(\"ENDE\");"; +// Curl Anfrage bauen + $curl = curl_init(); + curl_setopt($curl,CURLOPT_URL, $ccu_remoteskript_uri); + if ($ccu_user != "" && $ccu_pass != "") { + curl_setopt($curl,CURLOPT_USERPWD, $ccu_user.":".$ccu_pass); + } + curl_setopt($curl,CURLOPT_POST, 1); + curl_setopt($curl,CURLOPT_POSTFIELDS, $ccu_request); + curl_setopt($curl,CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl,CURLOPT_CONNECTTIMEOUT ,2); + curl_setopt($curl,CURLOPT_TIMEOUT, 20); + if (!empty($ccu_https)) { + curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, false); + } + $content = curl_exec($curl); + curl_close($curl); + // exit(); + // Trenne Rückgabe vom Overhead + $cleancontent = explode("ENDE",$content); + + // Konvertiere XML kritische Zeichen in HTML-Format + $cleancontent[0] = str_replace("<","<", $cleancontent[0]); + $cleancontent[0] = str_replace( ">",">", $cleancontent[0]); + $cleancontent[0] = str_replace("*<*","<", $cleancontent[0]); + $cleancontent[0] = str_replace("*>*", ">", $cleancontent[0]); + -function strip_a(string $str) { - return str_replace('a', '', $str); + // Schreibe Ausgabe + header("Content-Type: text/xml; charset=ISO-8859-1"); + echo ""; + echo $cleancontent[0]; + exit(); } -function strip_t(string $str) { - return str_replace('t', '', $str); -} // STATUS -if (isset($_SERVER['QUERY_STRING']) and (strpos($_SERVER['QUERY_STRING'], "state.cgi") !== false)) { - - // Beende, wenn keine Program_ID übergeben wird # => führt zu Problemen mit nicht-HM Seiten (zB. iframe) !!! - # if (empty($_GET['datapoint_id'])) die('Datapoint-ID fehlt'); # Der fehlerhafte / unnötige Aufruf der state.cgi müsste im dortigen Code korrigiert werden. - $datapoints = $_GET['datapoint_id']; - - header("Content-Type: text/xml; charset=ISO-8859-1"); - echo api_state($ccu, $datapoints, isset($_GET['onlyvalue']), isset($_GET['debug'])); -} +else if (strpos($_SERVER['QUERY_STRING'], "state.cgi") !== false) { -function api_state($ccu, $datapoints, bool $onlyvalue = false, $debug = false) { - if (!is_array($datapoints)) { - if (strpos($datapoints, ',') !== false) $a_datapoints = str_getcsv($datapoints, ',', '"', '\\'); - else $a_datapoints = array($datapoints); - } else { - if (array_is_list($datapoints)) $a_datapoints = $datapoints; - else $a_datapoints = array_values($datapoints); + // Beende wenn keine Datapoint_ID übergeben wird + if(!isset($_GET['datapoint_id'])) + { + echo "keine datapoint_ids"; + exit(); } - - $a_datapoints = array_map('strip_a', $a_datapoints); - $a_datapoints = array_map('strip_t', $a_datapoints); - + + // suche und ersetze t wegen Timestamp, da es diese einträge nicht gibt + $datapoints = str_replace("t", "", $_GET['datapoint_id']); + $datapoints = str_replace("a", "", $datapoints); + + // Trenne datapoint_id anhand , auf + $datapoints = explode(",",$datapoints); + //Bei Diagram Collect darf nicht optimiert werden - if (empty($onlyvalue)) $a_datapoints = array_unique($a_datapoints); - - $ccu_request = "WriteLine(\"\");\r\n"; - foreach ($a_datapoints as $datapoint) { - - if (ctype_digit($datapoint)) { + if(!isset($_GET['onlyvalue'])) + { + $datapoints = array_unique($datapoints); + } + $ccu_request = ""; + + // Baue Skript zusammen + $ccu_request = $ccu_request . "WriteLine(\"*<*state*>*\");\r\n"; + foreach ($datapoints as $datapoint) { + + if( ctype_digit($datapoint) ) { $ccu_request = $ccu_request . "object oDatapoint = dom.GetObject(".$datapoint.");\r\n"; - // Wenn es sich um ein Datenpunkt handelt gib value aus + // Wenn es sich um ein Datenpunkt handelt gib value aus $ccu_request = $ccu_request . "if (oDatapoint.IsTypeOf(OT_DP)) {\r\n"; - $ccu_request = $ccu_request . "WriteLine(\"\");\r\n"; + $ccu_request = $ccu_request . "WriteLine(\"*<*datapoint ise_id='".$datapoint."' value='\"#dom.GetObject(".$datapoint.").Value().ToString()#\"'/*>*\");\r\n"; $ccu_request = $ccu_request . "}\r\n"; - + // Wenn es sich um ein Programm handelt gibt aus ob aktiv oder inaktiv $ccu_request = $ccu_request . "if (oDatapoint.IsTypeOf(OT_PROGRAM)) {\r\n"; - $ccu_request = $ccu_request . "if (oDatapoint.Active()) {\r\nWriteLine(\"\");}\r\n"; - $ccu_request = $ccu_request . "else {\r\nWriteLine(\"\"); }\r\n"; - $ccu_request = $ccu_request . "}\r\n"; + $ccu_request = $ccu_request . "if (oDatapoint.Active()) {\r\nWriteLine(\"*<*datapoint ise_id='".$datapoint."a' value='true'/*>*\");}\r\n"; + $ccu_request = $ccu_request . "else {\r\nWriteLine(\"*<*datapoint ise_id='".$datapoint."a' value='false'/*>*\"); }\r\n"; + $ccu_request = $ccu_request . "}\r\n"; + + - if (empty($onlyvalue)) { + if(!isset($_GET['onlyvalue'])) + { // Wenn es sich um einen Channel handelt gib Timestamp aus $ccu_request = $ccu_request . "if (oDatapoint.IsTypeOf(OT_CHANNEL)) {\r\n"; - $ccu_request = $ccu_request . "WriteLine(\"\");"; + $ccu_request = $ccu_request . "WriteLine(\"*<*datapoint ise_id='".$datapoint."t' value='\"#dom.GetObject(".$datapoint.").LastDPActionTime().ToString(\"%m.%d.%Y %H:%M:%S\")#\"'/*>*\");"; $ccu_request = $ccu_request . "}\r\n"; // Wenn es sich um einen Datenpunkt handelt gib Timestamp aus $ccu_request = $ccu_request . "if (oDatapoint.IsTypeOf(OT_DP)) {\r\n"; - $ccu_request = $ccu_request . "WriteLine(\"\");"; + $ccu_request = $ccu_request . "WriteLine(\"*<*datapoint ise_id='".$datapoint."t' value='\"#dom.GetObject(".$datapoint.").Timestamp().ToString(\"%m.%d.%Y %H:%M:%S\")#\"'/*>*\");"; $ccu_request = $ccu_request . "}\r\n"; // Wenn es sich um ein Programm handelt gib Timestamp aus $ccu_request = $ccu_request . "if (oDatapoint.IsTypeOf(OT_PROGRAM)) {\r\n"; - $ccu_request = $ccu_request . "WriteLine(\"\");"; + $ccu_request = $ccu_request . "WriteLine(\"*<*datapoint ise_id='".$datapoint."t' value='\"#dom.GetObject(".$datapoint.").ProgramLastExecuteTime().ToString(\"%m.%d.%Y %H:%M:%S\")#\"'/*>*\");"; $ccu_request = $ccu_request . "}\r\n"; - } - + } } - + } - $ccu_request = $ccu_request . "WriteLine(\"\");\r\n"; - + $ccu_request = $ccu_request . "WriteLine(\"*<*/state*>*\");\r\n"; + + + // Debug Mode - if ($debug) return($ccu_request); + if(isset($_GET["debug"])) + { + echo $ccu_request; + exit(); + } + + // Als indikator für die Rückgabe, um den Overhead zu filtern + $ccu_request = $ccu_request ."WriteLine(\"ENDE\");"; + + // Curl Anfrage bauen + $curl = curl_init(); + curl_setopt($curl,CURLOPT_URL, $ccu_remoteskript_uri); + if ($ccu_user != "" && $ccu_pass != "") { + curl_setopt($curl,CURLOPT_USERPWD, $ccu_user.":".$ccu_pass); + } + curl_setopt($curl,CURLOPT_POST, 1); + curl_setopt($curl,CURLOPT_POSTFIELDS, $ccu_request); + curl_setopt($curl,CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl,CURLOPT_CONNECTTIMEOUT ,2); + curl_setopt($curl,CURLOPT_TIMEOUT, 20); + if (!empty($ccu_https)) { + curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, false); + } + $content = curl_exec($curl); + curl_close($curl); + + // Trenne Rückgabe vom Overhead + $cleancontent = explode("ENDE",$content); + + // Konvertiere XML kritische Zeichen in HTML-Format + $cleancontent[0] = str_replace("<","<", $cleancontent[0]); + $cleancontent[0] = str_replace( ">",">", $cleancontent[0]); + $cleancontent[0] = str_replace("*<*","<", $cleancontent[0]); + $cleancontent[0] = str_replace("*>*", ">", $cleancontent[0]); + // Schreibe Ausgabe - return "\n".ccu_remote($ccu, $ccu_request); - + header("Content-Type: text/xml; charset=ISO-8859-1"); + echo ""; + echo $cleancontent[0]; + exit(); } + + + + // SYSTEMNOTIFICATION -if (isset($_SERVER['QUERY_STRING']) and (strpos($_SERVER['QUERY_STRING'], "systemNotification.cgi") !== false)) { - header("Content-Type: text/xml; charset=ISO-8859-1"); - echo api_systemNotification($ccu, $prog_id, isset($_GET['debug'])); -} -function api_systemNotification($ccu, $debug = false) { +if (strpos($_SERVER['QUERY_STRING'], "systemNotification.cgi") !== false) { + + + + $ccu_request = ""; // Baue Skript zusammen - $ccu_request = <<"); + $ccu_request = $ccu_request . "WriteLine(\"*<*systemNotification*>*\"); string id; ! Alle Datenpunkte durchlaufen foreach(id, dom.GetObject(ID_SERVICES).EnumUsedIDs()){ + ! Einzelnen Datenpunkt holen var serviceVar = dom.GetObject(id); object trigDP = dom.GetObject(serviceVar.AlTriggerDP()); if( serviceVar.IsTypeOf( OT_ALARMDP ) && ( serviceVar.AlState() == asOncoming ) ){ ! Namen und Wert des Elements ausgeben - fehlt -> visible - Write(""); - WriteLine(""); + Write(\"*<*notification ise_id='\" # serviceVar.AlTriggerDP() # \"' name='\" # trigDP.Name() # \"' type='\" # trigDP.HssType() # \"' timestamp='\" # serviceVar.LastTriggerTime().ToInteger() # \"'/*>*\"); + WriteLine(\"\"); } } - WriteLine(""); -EOHM; + WriteLine(\"*<*/systemNotification*>*\");"; // Debug Mode - if ($debug) return($ccu_request); + if(isset($_GET["debug"])) + { + echo $ccu_request; + exit(); + } - // Schreibe Ausgabe - return "\n".ccu_remote($ccu, $ccu_request); + // Als indikator für die Rückgabe, um den Overhead zu filtern + $ccu_request = $ccu_request ."WriteLine(\"ENDE\");"; +// Curl Anfrage bauen + $curl = curl_init(); + curl_setopt($curl,CURLOPT_URL, $ccu_remoteskript_uri); + if ($ccu_user != "" && $ccu_pass != "") { + curl_setopt($curl,CURLOPT_USERPWD, $ccu_user.":".$ccu_pass); + } + curl_setopt($curl,CURLOPT_POST, 1); + curl_setopt($curl,CURLOPT_POSTFIELDS, $ccu_request); + curl_setopt($curl,CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl,CURLOPT_CONNECTTIMEOUT ,2); + curl_setopt($curl,CURLOPT_TIMEOUT, 20); + if (!empty($ccu_https)) { + curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, false); + } + $content = curl_exec($curl); + curl_close($curl); + // exit(); + // Trenne Rückgabe vom Overhead + $cleancontent = explode("ENDE",$content); + + // Konvertiere XML kritische Zeichen in HTML-Format + $cleancontent[0] = str_replace("<","<", $cleancontent[0]); + $cleancontent[0] = str_replace( ">",">", $cleancontent[0]); + $cleancontent[0] = str_replace("*<*","<", $cleancontent[0]); + $cleancontent[0] = str_replace("*>*", ">", $cleancontent[0]); + + + // Schreibe Ausgabe + header("Content-Type: text/xml; charset=ISO-8859-1"); + echo ""; + echo $cleancontent[0]; + exit(); } // SYSTEMNOTIFICATIONCLEAR -if (isset($_SERVER['QUERY_STRING']) and (strpos($_SERVER['QUERY_STRING'], "systemNotificationClear.cgi") !== false)) { - header("Content-Type: text/xml; charset=ISO-8859-1"); - echo api_systemNotificationClear($ccu, isset($_GET['debug'])); -} +if (strpos($_SERVER['QUERY_STRING'], "systemNotificationClear.cgi") !== false) { + -function api_systemNotificationClear($ccu, $debug = false) { + + $ccu_request = ""; // Baue Skript zusammen - $ccu_request = <<\n".ccu_remote($ccu, $ccu_request, true); + //header("Content-Type: application/xml; charset=ISO-8859-1"); + echo ""; + // } -?> +?> \ No newline at end of file diff --git a/servicemeldung.php b/servicemeldung.php index 5eac6b0..1ba7015 100644 --- a/servicemeldung.php +++ b/servicemeldung.php @@ -1,11 +1,18 @@ +?>