Hallo,
die aktuelle Version gibt es in einem anderen Post: http://homematic-forum.de/forum/viewtopic.php?t=4901
Liebe Grüße
Daniel
// Orginal Post:
Hallo zusammen,
ich habe lange hier gesucht aber wenig gefunden und habe dann eben so lang rumprobiert bis ich erreicht habe was ich wollte
Und zwar: Ich habe auf der CCU den PHP Pro Server installiert und mit selbigen eine Weboberfläche laufen lassen, welche per AJAX und tclrega die aktuelle Zustände abfrägt und dann automatisch die Grafiken aktualisiert. Wichtig ist zum nachmachen noch, dass man das JSON Packet in der php.ini aktiviert Das alles ist noch Work-in-progress, hat aber schon einen sehr hohen WAF
momentan sieht es so aus: ich habe aus dem Forum das Script für die Homematic anfragen, ich glaube von Christoph oder so als basis genommen und entscheidend überarbeitet:
Code: Alles auswählen
/// Sends TCL Rega Request to the CCU. $var_request is the Homematic Script, $var_trimmed defines if the result should be trimed
function Post_Request_Array ($var_request, $var_trimed=true)
{
//fsockopen(hostname, port, errornumber, errorstring, timeout) initiates a socket connection
$fileHandle = fsockopen ("127.0.0.1", 8181, $errorNumber, $errorString, 60);
if (!$fileHandle)
{
// error output
echo "$errorString ($errorNumber)<br />\n";
return false;
}
else
{
$postString = "POST /tclrega.exe HTTP/1.1\r\n";
$postString = $postString . "Content-type: application/x-www-form-urlencoded\r\n";
$postString = $postString . "Connection: Close\r\n";
$postString = $postString . "Content-length: ". strlen($var_request) ."\r\n\r\n";
// fwrite(handle, string) writes the contents of string to the file stream pointed to by handle .
fwrite($fileHandle, $postString.$var_request);
$tString = fgets($fileHandle);
// skip over the unimportant messages to the next empty line
while ($tString != "\r\n")
{
$tString = fgets($fileHandle);
}
$answer = "";
$trimedAnswer = "";
// get lines
while (!feof($fileHandle))
{
$tString = fgets($fileHandle);
$var1 = (strpos($tString, "</exec>")+strlen("</exec>"));
$var2 = (strpos($tString, "</sessionId>")+strlen("</sessionId>"));
$var3 = (strpos($tString, "</httpUserAgent>")+strlen("</httpUserAgent>"));
$ende = max($var1, $var2, $var3);
$answer .= $tString;
$trimedAnswer .= "<xml>".substr($tString,$ende);
}
// Debuging
//print_r("Debug (temp): ".htmlspecialchars($temp)."\n<br>\n<br>");
//print_r("Debug (temp2): ".htmlspecialchars($temp2)."\n<br>\n<br>");
// close socket connection
fclose($fileHandle);
// parse result
if ($var_trimed==true)
{
$xml = new SimpleXMLElement($trimedAnswer);
}
else
{
$xml = new SimpleXMLElement($answer);
}
// return XML as PHP-Array
return xml2phpArray($xml,array());
}
}
Code: Alles auswählen
var Wohnzimmer_Licht_Dimmer_1 = dom.GetObject("Wohnzimmer_Licht_Dimmer_1").DPByHssDP("LEVEL").Value();
var Schlafzimmer_Licht_Dimmer_1 = dom.GetObject("Schlafzimmer_Licht_Dimmer_1").DPByHssDP("LEVEL").Value();
var Esszimmer_Licht_Aquarium = dom.GetObject("Esszimmer_Licht_Aquarium").DPByHssDP("STATE").Value();
var Kueche_Licht_Spuele = dom.GetObject("Kueche_Licht_Spuele").DPByHssDP("STATE").Value();
var Wohnzimmer_Licht_Flur = dom.GetObject("Wohnzimmer_Licht_Flur").DPByHssDP("STATE").Value();
var Esszimmer_Licht_Decke = dom.GetObject("Esszimmer_Licht_Decke").DPByHssDP("STATE").Value();
var Buero_Licht_Decke = dom.GetObject("Buero_Licht_Decke").DPByHssDP("STATE").Value();
var Kueche_Licht_Decke = dom.GetObject("Kueche_Licht_Decke").DPByHssDP("STATE").Value();
Ich habe meine Aktoren alle sogenannt wie ich sie auch als Variablen bennen kann (also keine Leerzeichen, Punkte oder Sonderzeichen). Das macht die Arbeit um einiges leichter.
Die Schalter sind denke ich selbsterklärend. Sie spiegeln den aktuellen Zustand. Also bei An ist der Schalter an ... es sind Toggleswitches, also wenn man drauf klickt geht das Licht aus, und das Bild ändert sich zu Aus. Bei den Dimmern ist es ähnlich. Man kann auf der Treppe direkte Dimmwerte anklicken. Wenn der Dimmer an ist kann man ihn mit einen klick auf den "An" Button ausschalten. Wenn der Dimmer aus ist kann man ihn mit einem klick auf den "Aus" Button in den letzten Dimmwert schalten!
Damit das funktioniert muss eine virtuelle Taste der CCU (richtig benennen) mit dem jeweiligen Dimmer direkt verknüpft werden, und bei EIN eben "letzter Wert" ausgewählt werden. Falls jemand weiß wie man das direkt per Script macht wäre ich sehr dankbar ich hab keinen Befehl dafür gefunden, aber so funktioniert es auch.
Anbei findet ihr noch den kompletten Quellcode für das Webinterface. Es ist nicht all zu viel kommentiert, das werde ich aber noch ändern. Falls ihr jetzt schon fragen zum Code oder sonstigem habt bin ich willig diese zu beantworten
PS. kann mir jemand erklären wie ich meinen mount pfad für den usb stick von /var/datadisk nach /var/disk ändere? außer es jedes mal manuell neu zu machen nach nem neustart. Hab die USB-Stick Software von homematic-inside.de installiert.
Grüße Daniel