Touchscreenoberfläche mit PHP und AJAX auf der CCU

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

ColdFireIce
Beiträge: 407
Registriert: 06.03.2009, 15:38
Wohnort: Karlsruhe
Danksagung erhalten: 1 Mal

Touchscreenoberfläche mit PHP und AJAX auf der CCU

Beitrag von ColdFireIce » 15.02.2010, 01:54

// Edit:
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:
homematic2.png
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()); 
	}
}
Es ist nun möglich nicht immer nur eine Anfrage an die CCU zustellen sondern gleich alle Aktoren auf einmal abzufragen. zB bei mir mit diesem Befehlt:

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();
als ergebnis bekommt man ein Array ein welchem jeweils die Variable und ihr Wert liegen, zB: "Schlafzimmer_Licht_Dimmer_1":"0.75","Wohnzimmer_Licht_Flur":"true"
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 ... :lol: 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.
direkt.png
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
Dateianhänge
touch.zip
(298.2 KiB) 189-mal heruntergeladen
Zuletzt geändert von ColdFireIce am 12.08.2010, 06:48, insgesamt 4-mal geändert.

Christoph
Beiträge: 283
Registriert: 28.07.2007, 13:12

Re: Touchscreenoberfläche mit PHP und AJAX

Beitrag von Christoph » 15.02.2010, 07:22

Hallo Daniel,

das ist schön geworden. Ich würde nur zwei Dinge noch zu bedenken geben.

Die Dateigrößen Deiner Grafiken sind recht happig. Solltest Du die Steuerung mal fürs Internet freigeben und dann per Handy darauf zugreifen, dann ist die Steuerung nicht mehr bedienbar. Das Laden dauert dann einfach zu lange. Für den Dimmer z. B. reichen zwei 1x1px große Grafiken. Im img-Tag gibst Du dann einfach die gewünschte Größe an.

Die zweite Anmerkung betrifft das Auslesen der Aktoren. Bei mir hat das so nicht funktioniert. Wenn Deine CCU in Zukunft aussteigt, weil Du mehr Aktoren eingebunden hast und diese von mehreren Terminals abgefragt werden, dann müsstest Du daran etwas ändern.

Zu Deiner Frage, wie der Dimmer bedient werden kann:

Code: Alles auswählen

 var obj_licht = dom.GetObject("BidCos-RF.FEQ0083693:1.LEVEL"); ! sternenlicht
 var obj_ramp = dom.GetObject("BidCos-RF.FEQ0083693:1.RAMP_TIME"); ! Dimmgeschwindigkeit, 
 obj_ramp.State(10); ! 10 Sekunden bis zur Endhelligkeit
 obj_licht.State(-0.01); !licht aus, Werte >0.0 Dimmer einschalten (bis 1.0)
Ich benutze -0.01 zum Ausschalten und Werte bis 1.0 zum einschalten.
Ciao, Christoph.

ColdFireIce
Beiträge: 407
Registriert: 06.03.2009, 15:38
Wohnort: Karlsruhe
Danksagung erhalten: 1 Mal

Re: Touchscreenoberfläche mit PHP und AJAX

Beitrag von ColdFireIce » 15.02.2010, 12:25

Hallo Christoph,
Christoph hat geschrieben:Die Dateigrößen Deiner Grafiken sind recht happig. Solltest Du die Steuerung mal fürs Internet freigeben und dann per Handy darauf zugreifen.
Ja das mag sein ;) allerdings läuft es eben nur im LAN und die grafiken bleiben ja nach 1x maligem laden im cache des Browsers. Es läuft also super schnell. Fürs handy könnte man einfach noch ein 2. Interface baun welches dann auch eine geignetere Auflösung hat. ist ja nur ne sache der Grafiken und CSS Einstellungen.
Christoph hat geschrieben:Die zweite Anmerkung betrifft das Auslesen der Aktoren. Bei mir hat das so nicht funktioniert. Wenn Deine CCU in Zukunft aussteigt, weil Du mehr Aktoren eingebunden hast und diese von mehreren Terminals abgefragt werden, dann müsstest Du daran etwas ändern.
Was genau hat funktioniert bei dir nicht?
Ich hatte es erst so dass ich jeden Aktor einzeln ausgelesen habe, also mit eigenem TCL Request, allerdings kam mir dass sehr langsam und auslastetn vor. Ist ja auch klar. Jetzt werden alle Aktoren aufeinmal ausgelesen, wie schon beschrieben. Und dass funktioniert meiner Meinung nach sehr gut, außerdem kann ich die Updatezeit von 1000 ms auch noch erhöhen und somit die Auslastung verringern. habe es von 3 terminals gleichzeitig ausprobiert und das ging ohne Probleme. Stresstest gibts natürlich noch nicht, da ich es ja erst gestern geschrieben habe ;)

Zu den Dimmern:
RAMP_TIME, LEVEL und auch ON_TIME sind mir bekannt und auch verständlich da liegt nicht das Problem. Sondern darin dem Dimmer den letzten Wert zu zuweisen den er vor dem Ausschalten hatte. Also so wie es mit der Hardware taste geht, und mit dem Trick über die Virtuelle Taste ja jetzt auch.
Es gibt einen DP der OLD_LEVEL heißt. dies ist aber eine action type und der lässt sich bei mir irgendwie nicht auslösen, bzw. weiß ich garnicht genau was der machen sollte...
Warum nutzt du zum ausschalten -0.01? Laut der Doku ist der zulässige Wertebreich nur 0.0-1.0 ?!

Grüße

Daniel

ColdFireIce
Beiträge: 407
Registriert: 06.03.2009, 15:38
Wohnort: Karlsruhe
Danksagung erhalten: 1 Mal

Re: Touchscreenoberfläche mit PHP und AJAX auf der CCU

Beitrag von ColdFireIce » 15.02.2010, 18:06

Hallo,

habe mal ein kleines Optik-Update gemacht:
touch.png
und auch den Quellcode überarbeitet. Kommentiert und umstrukturiert und so. aber nix Inhaltliches.

Stresstest bei 1000ms update-Zeit zeigt dass mehr als 2 Geräte schon extrem verlangsamen. Aber das kann man durch längere update-Zeiten ausgleichen.

Grüße Daniel
Dateianhänge
hm_touch_ui_0.2.zip
(480.93 KiB) 176-mal heruntergeladen

ColdFireIce
Beiträge: 407
Registriert: 06.03.2009, 15:38
Wohnort: Karlsruhe
Danksagung erhalten: 1 Mal

Re: Touchscreenoberfläche mit PHP und AJAX auf der CCU

Beitrag von ColdFireIce » 19.02.2010, 01:11

Hallo.

So es ist mal wieder Zeit für ein Update. Ich habe die Oberfäche mit 4 weiteren Seite erweitert, Tür/Fenster Kontakt eingebunden, HM-Porgramme startbar gemacht, Bewegungsmelderinformationen und Astrofunktionen auslesen lassen. Auf der Musik seite habe Ich Playlisten, Radiosender und Steuerelemente eingebunden die es erlauben diese an einen SONOS Musikplayer zu schicken. Leider noch nicht bi-direktional, deswegen ohne Abfrage des aktuellen zustands. Werde mir dass aber sicher noch anschaun. Die Wetter seite ist auch noch etwas leer, da ich keinen Wettersensor besitze. Ich werde aber wohl ein paar Daten aus dem Internet parsen lassen und sie dort anzeigen.
Außerdem habe ich noch eine Bilder Slideshow eingebaut die sich automatisch nach 2min. startet. Es werden vorgegeben Bilder per X-Fade script überblendet. Mit einem klick landet man wieder auf der vorherigen Seite. Das entlasstet die CCU. Ich habe 2 Versionen des Codes angehängt: Eine mit den Slideshow-Bildern (diese sind schon allein 4,5 MB groß), und eine nur mit Code und standart Design.
Wie immer alles noch work-in-progress und bei zeiten wird sich noch viel tun. Ich werde auch versuchen dass ganze noch möglichst Variabel zu gestalten und eine Anleitung zu schreiben, aber dass kommt erst ganz zum schluss ;)

Bis dahin beantworte ich gerne Fragen und bin offen für Anregungen. Leider gab es davon ja noch nicht so viele :roll:

So nun die neuen Bilder:
index.png
Lichterseite
sysvars.png
Programmseite
security.png
Überwachungsseite
weather.png
Wetterseite
music.png
Musikseite
So jetzt noch wie versprochen der Link zur vollständigen Version:
http://root.xenorate.com/homematic/hm_touch_ui_0.3.zip

Liebe Grüße

Daniel
Dateianhänge
hm_touch_ui_0.3_no_slideshow.zip
Code ohne Slideshowbilder
(793.8 KiB) 190-mal heruntergeladen

sambasamba
Beiträge: 1600
Registriert: 16.08.2009, 23:18
Wohnort: Landau/Südpfalz
Hat sich bedankt: 20 Mal
Danksagung erhalten: 4 Mal

Re: Touchscreenoberfläche mit PHP und AJAX auf der CCU

Beitrag von sambasamba » 19.02.2010, 12:51

Dolles Ding!
Ich frage mich nur, was ist das denn für ein touchscreen und wie ist der angeschlossen. Vermutlich übersehen?
Danke
V.

ColdFireIce
Beiträge: 407
Registriert: 06.03.2009, 15:38
Wohnort: Karlsruhe
Danksagung erhalten: 1 Mal

Re: Touchscreenoberfläche mit PHP und AJAX auf der CCU

Beitrag von ColdFireIce » 19.02.2010, 13:55

sambasamba hat geschrieben:Dolles Ding!
Ich frage mich nur, was ist das denn für ein touchscreen und wie ist der angeschlossen. Vermutlich übersehen?
Danke
V.
Hi,

sorry habe ich vergessen zu erwähnen. Da dass ganze auf der CCU läuft ist es egal von wo aus man es aufruft. aktuell ist es ein etwas schwächerer PC mit einem angeschlossenem CarHifi Touchscreen und einer Auflösung von 800x600.

Grüße Daniel

Benutzeravatar
kaju74
Beiträge: 2050
Registriert: 06.03.2007, 13:14
Danksagung erhalten: 19 Mal
Kontaktdaten:

Re: Touchscreenoberfläche mit PHP und AJAX auf der CCU

Beitrag von kaju74 » 19.02.2010, 16:21

Hallo.

Das wäre doch DIE Gelegenheit, den Artikel zum phpServer auf meiner Seite mal anzugehen, und diese Oberfläche mit zu verwursten, oder?

@ColdFireIce: Natürlich nur, wenn das okay für Dich wäre 8-))

Lieben Gruß,
kaju

sambasamba
Beiträge: 1600
Registriert: 16.08.2009, 23:18
Wohnort: Landau/Südpfalz
Hat sich bedankt: 20 Mal
Danksagung erhalten: 4 Mal

Re: Touchscreenoberfläche mit PHP und AJAX auf der CCU

Beitrag von sambasamba » 19.02.2010, 16:47

Achso...danke, war mir nicht klar. Also separater PC der 'irgendwie' auf die CCU zugreift.
Ich dachte erst Du hast einen standalone touchscreen.
LG Volkmar

ColdFireIce
Beiträge: 407
Registriert: 06.03.2009, 15:38
Wohnort: Karlsruhe
Danksagung erhalten: 1 Mal

Re: Touchscreenoberfläche mit PHP und AJAX auf der CCU

Beitrag von ColdFireIce » 19.02.2010, 17:16

sambasamba hat geschrieben:Achso...danke, war mir nicht klar. Also separater PC der 'irgendwie' auf die CCU zugreift.
Ich dachte erst Du hast einen standalone touchscreen.
LG Volkmar
Irgendwie heißt hier einfach über den Port 80, also einfach als Homepage. Denkbar ist also alles was eine Homepage anzeigen kann. Also zB. Ein EeeTop ein Tablet PC oder gar ein Smartphone. Man müsste natürlich die Auflösung / Graifk darauf anpassen.
kaju74 hat geschrieben:Hallo.

Das wäre doch DIE Gelegenheit, den Artikel zum phpServer auf meiner Seite mal anzugehen, und diese Oberfläche mit zu verwursten, oder?

@ColdFireIce: Natürlich nur, wenn das okay für Dich wäre 8-))

Lieben Gruß,
kaju
Sehr gerne! ist mir eine Ehre ;) Aber vielleicht sollte ich es dafür dann wie gesagt noch bisschen umstruckturieren. Außerdem habe ich glaube grad eine Glaubenskriese... Bin gestern durch zufall auf das XMLRPC Thema aufmerksam geworden... jetzt bin ich mir nicht mehr sicher ob der TCLREGA Weg wirklich der richtig ist Hab dazu mal nen seperaten Post aufgemacht:
http://homematic-forum.de/forum/viewtop ... 230#p25463

Liebe Grüße Daniel

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“