Homematic Webcontrol

User stellen ihre Haussteuerung vor

Moderator: Co-Administratoren

chka
Beiträge: 2483
Registriert: 13.02.2012, 20:23
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 302 Mal
Danksagung erhalten: 116 Mal

Re: Homematic Webcontrol

Beitrag von chka » 12.07.2012, 18:37

das sieht doch gut aus, jetzt kommt die ausgabe.

du musst nur bedenken das in der original verion der drehgriff aktor nicht implementiert ist

hier wies geht
http://homematic-forum.de/forum/viewtop ... 248#p62607
RaspberryMatic - CuL 868mHz- CuxDemon - PioTek Tracker - Velux mit KLF200 und Somfy Anbindung- io.Broker auf Proxmox NUC6I3SYH i3-6100U RAM: 40Gig Crucial 8GB DDR4 CT2K8G4SFS824A + 32GB DDR4CT32G4SFD8266

HorstJ
Beiträge: 10
Registriert: 10.07.2012, 19:15

Re: Homematic Webcontrol

Beitrag von HorstJ » 12.07.2012, 19:09

Ich habe keine Ahnung, warum ich gestern kein Feedback vom Schaltaktor bekommen habe, aber heute scheint Alles (inklusive des Sensors) zu klappen.

Allein für Deine anfeuernden Worte und den Tipp mit dem Javascriptcode stehst Du jetzt in meinem Buch der coolen Leute! :wink: Danke!

Benutzeravatar
Tricalibur
Beiträge: 5
Registriert: 08.07.2012, 20:11

Re: Homematic Webcontrol

Beitrag von Tricalibur » 15.07.2012, 11:45

chka hat geschrieben:super danke dir!!!
^Keine Ursache.

Ich habe gerade bemerkt, dass ich bei der Prüfung ob der Cache neu geladen werden muss nur die Uhrzeit berücksichtigt habe. Das klappt natürlich nicht mehr, wenn man 23:00 Uhr im Cache stehen hat, da dann alle nachfolgenden Updates "zeitiger" sind, auch wenn das Datum ein neueres ist. Hier das Update zur Datumsberücksichtigung in der wheater.php:

Code: Alles auswählen

<?php

class WeatherXmlFeedForecast {
	private $LicenceKey = 'GET-YOUR-OWN'; // Dein kostenloser Licence Key von www.worldweatheronline.com
	private $City = 'Leipzig,Germany'; // Standard Stadt. Das Land wird in der Anzeige ausgeblendet. Details siehe: http://www.worldweatheronline.com/weather-api.aspx
	private $UpdateIntervall = 4; // Alle wie viele Stunden sollen die Wetter Cache Daten aktualisiert werden? (mind. 3.5 laut AGB!)
	private $Forecast = 5; // Anzahl der Tage für die Verhersage, falls keine im Funktionsaufruf angegeben werden
	private $WeatherCache = '../../weathercache/'; // Pfad für die XML Cache Dateien (../../ ist das Root Verzeichnis)
	public $CurrentConditions = array();
	public $DaysForecast = array();
	
	function __construct ($Var_City,$Var_Forecast) {
		// Funktionaufruf Fehlerprüfung
		if($Var_City!=''){$this->City=$Var_City;}else{$this->City=$DefaultCity;}
		if($Var_Forecast!=''&&is_int($Var_Forecast*1)){$this->Forecast=$Var_Forecast;}else{$this->Forecast = $Forecast;}
		// URL mit den entsprechenden XML Daten
		$this->Url = 'http://free.worldweatheronline.com/feed/weather.ashx?key='.$this->LicenceKey.'&q='.urlencode($this->City).'&num_of_days='.$this->Forecast.'&format=xml';
		// URL zur XML Cache Datei
		$this->WeatherCache.=$this->City.'.xml';
		$xmlCache = 'Cached - ';
		//Gibt es zu dem Ort schon eine Cache Datei?
		if(file_exists($this->WeatherCache)){
			$xmlCity = simplexml_load_string(file_get_contents($this->WeatherCache));
			$xmlTime = $this->TimeEngToDeu((string)$xmlCity->current_condition->observation_time);
			$xmlParseDate = $this->DateUnix((string)$xmlCity->current_condition->observation_time,(string)$xmlCity->weather->date);
			$nowParseDate = mktime(date('H')-$this->UpdateIntervall,date('i'),date('s'),date('m'),date('d'),date('Y'),-1);
			// Wenn ja, ist der Inhalt noch aktuell?
			if($xmlParseDate < $nowParseDate) {
				$xmlCity = simplexml_load_string(file_get_contents($this->Url));
				$fh = fopen($this->WeatherCache, 'w') or die('Kann XML Wetterdaten nicht in Datei schreiben: '.$this->WeatherCache);
				fwrite($fh, file_get_contents($this->Url));
				fclose($fh);
				$xmlCache = 'Updated - ';
			}
		}else{
			$xmlCity = simplexml_load_string(file_get_contents($this->Url));
			$fh = fopen($this->WeatherCache, 'w') or die('Kann XML Wetterdaten nicht in Datei schreiben: '.$this->WeatherCache);
			fwrite($fh, file_get_contents($this->Url));
			fclose($fh);
			$xmlCache = 'Updated - ';
		}
		$xmlCity = simplexml_load_string(file_get_contents($this->WeatherCache));
		$CityName = explode(",", $xmlCity->request->query); // Hier wird das Land nach dem Komma entfernt...
		
		/*	Ab hier werden die aktuellen Wetterdaten ($xmlCity->current_condition) der XML in Variablen ($this->CurrentConditions['???']) geschrieben. 
			Folgende Daten stehen zur Verfügung:
			
				observation_time			Uhrzeit in UTC-Format hhmm tt. Z. B.: - 06.45 Uhr oder 11.34 Uhr
				temp_C						Temperatur in Grad Celsius
				windspeedMiles				Windgeschwindigkeit in Meilen pro Stunde
				windspeedKmph				Windgeschwindigkeit in Kilometer pro Stunde
				winddirDegree				Windrichtung in Grad
				winddir16Point				Windrichtung in 16-Punkt-Kompass
				weatherCode					Wetter Bedingungscode
				weatherDesc					Wetter Beschreibungstext
				weatherIconUrl				Wetter Icon URL
				precipMM						Niederschlag in Millimeter
				humidity						Luftfeuchtigkeit in Prozent
				visibility					Sichtweite in Kilometer
				pressure						Luftdruck in Millibar
				cloudcover					Bewölkung in Prozent		
				
			Da die Werte in englischen Angaben vorliegen, werden sie teilweise noch mit Funktionen eingedeutscht, z.b. TimeEngToDeu()
		*/
		
		// Wer den vollen Stadtnamen, IP-Adresse oder Koords haben will, ersetzt $CityName[0] durch $xmlCity->request->query
		$this->CurrentConditions['CityName']		= (string)$CityName[0];
		// Ich hab den Stand nur als Tooltip, mit der Angabe ob die Daten neu sind oder aus dem Cache. Cache Angabe aus $xmlCache
		$this->CurrentConditions['Time']				= 'Stand: '.$xmlCache.$this->TimeEngToDeu((string)$xmlCity->current_condition->observation_time).' Uhr';
		$this->CurrentConditions['Temperature']	= ($xmlCity->current_condition->observation_time == "N/A") ? ""	:  ((string)$xmlCity->current_condition->temp_C).'&#176;C';
		$this->CurrentConditions['Humidity']		= ($xmlCity->current_condition->humidity == "N/A") ? "" 				:  ((string)$xmlCity->current_condition->humidity).'%';
		$this->CurrentConditions['Airpressure']	= ($xmlCity->current_condition->pressure == "N/A") ? "" 				:  ((string)$xmlCity->current_condition->pressure).'mBar';
		$this->CurrentConditions['PrecipMM']		= ($xmlCity->current_condition->precipMM == "N/A") ? "" 				:  ((string)$xmlCity->current_condition->precipMM).'mm';
		$this->CurrentConditions['WindSpeed']		= ($xmlCity->current_condition->windspeedKmph == "N/A") ? "" 		:  ((string)$xmlCity->current_condition->windspeedKmph).'km/h';
		// Die Angabe der Windrichtung ist in Englisch, daher ist Osten / East als einziger ander und wird mit preg_replace ersetzt.
		$this->CurrentConditions['WindDir']			= ($xmlCity->current_condition->winddir16Point == "N/A") ? "" 		:  ((string)preg_replace("/E/","/O/",$xmlCity->current_condition->winddir16Point));
		$this->CurrentConditions['CloudCover']		= ($xmlCity->current_condition->cloudcover == "N/A") ? "" 			:  ((string)$xmlCity->current_condition->cloudcover).'%';
		$this->CurrentConditions['Description']	= ($xmlCity->current_condition->weatherDesc == "N/A") ? "" 			:  $this->DescEngToDeu((string)$xmlCity->current_condition->weatherDesc);
		$this->CurrentConditions['Icon']				= (string)'http://c358489.r89.cf1.rackcdn.com/images/weather/small/'.$xmlCity->current_condition->weatherCode.'_day_sm.png';

		/*	Ab hier werden die  Wetterdaten der Vorhersage (weather) in einen Loop für die Anzahl der Tage (0=heute, 1=morgen, usw.) in Variablen geschrieben. 
			Folgende Daten stehen zur Verfügung:
			
				date							Lokale Vorhersage Zeitpunkt, als "yyyy-MM-DD" formatiert. z.B.: 2012.05.31
				tempMaxC 					Höchsttemperatur des Tages in Grad Celsius.
				tempMaxF 					Höchsttemperatur des Tages in Grad Fahrenheit.
				tempMinC 					Minimale Temperatur des Tages in Grad Celsius.
				tempMinF 					Minimale Temperatur des Tages in Grad Fahrenheit.
				windspeedMiles 			Windgeschwindigkeit in Meilen pro Stunde
				windspeedKmph 				Windgeschwindigkeit in Kilometer pro Stunde
				winddirDegree 				Windrichtung in Grad
				winddir16Point				Windrichtung in 16-Punkt-Kompass
				weatherCode 				Wetter Bedingungscode
				weatherIconUrl 			Wetter icon URL
				weatherDesc 				Wetter Beschreibungstext
				precipMM 					Niederschlagsmenge in Millimeter		
				
			Da die Werte in englischen Angaben vorliegen, werden sie teilweise noch mit Funktionen eingedeutscht, z.b. TimeEngToDeu()
		*/
		$i = 0;
		foreach ($xmlCity->weather as $day){
			$MyDat = explode("-", $day->date);
			$MyDate = $MyDat[2].'.'.$MyDat[1].'.'.$MyDat[0];
			if($MyDate==date('d.m.Y')){$MyDate='Heute';}
			if($MyDate==date('d.m.Y',mktime(0,0,0,date("m"),date("d")+1,date("Y")))){$MyDate='Morgen';} // Anstelle Datum 'Morgen' ausgeben...
			if($MyDate==date('d.m.Y',mktime(0,0,0,date("m"),date("d")+2,date("Y")))){$MyDate='&Uuml;bermorgen';}// Anstelle Datum 'Übermorgen' ausgeben...
			
			$this->DaysForecast[$i] = array();
			$this->DaysForecast[$i]['Low'] 			= ($day->tempMinC == "N/A") ? "" : ((string)$day->tempMinC).'&#176;C';
			$this->DaysForecast[$i]['Hi'] 			= ($day->tempMaxC == "N/A") ? "" : ((string)$day->tempMaxC).'&#176;C';
			$this->DaysForecast[$i]['Date'] 			= ($day->date == "N/A") ? "" : ((string)$MyDate);
			$this->DaysForecast[$i]['Icon']			= (string)'http://c358489.r89.cf1.rackcdn.com/images/weather/small/'.$day->weatherCode.'_day_sm.png';
			$this->DaysForecast[$i]['Desc']			= $this->DescEngToDeu((string)$day->weatherDesc);
			$i++;
		} 
	}

	function getCurrentConditions() {
		return $this->CurrentConditions;
	}
	
	function getForecastConditions($var_day) {
		return $this->DaysForecast[$var_day];
	}
	
	function TimeEngToDeu($var_engTime){ // Hier wird die 11:00 AM Zeit in eine 24h Zeit umgewandelt
		$Time24 = "";
		$TimeParts = explode(" ", $var_engTime);
		$TimePartsHours = explode(":", $TimeParts[0]);
		$Time24 = (string)$TimeParts[0];
		if ($TimeParts[1] == "PM"){
			$Time24 = ((string)(((int)$TimePartsHours[0])+12)).":".(string)$TimePartsHours[1];
		}
		return $Time24;
	}
	function DateEngToDeu($var_engDate){ // Hier das Datum umgewandelt
		$DateParts = explode("-", $var_engDate);
		return $DateParts[2].','.$DateParts[1].','.$DateParts[0];
	}
	function DateUnix($var_engTime,$var_engDate){ // Hier das Datum umgewandelt 08:28 AM
		$Time24 = "";
		$TimeParts = explode(" ", $var_engTime);
		$TimePartsHours = explode(":", $TimeParts[0]);
		$Hour24 = $TimePartsHours[0];
		if ($TimeParts[1] == "PM"){
			$Hour24 = $TimePartsHours[0]+12;
		}
		$DateParts = explode("-", $var_engDate);
		$UnixDate = mktime((int)$Hour24,(int)$TimePartsHours[1],0,(int)$DateParts[1],(int)$DateParts[2],(int)$DateParts[0],-1);
		return $UnixDate;
	}

	function DescEngToDeu($var_engDesc){ // Hier ersetze ich die Englischen Beschreibungen durch deutsche - kann sicher noch etwas fehlen!
		// Bitte alle englischen Beschreibungen klein und ohne Leerzeichen eintragen! Die Angaben im XML kommen mal groß, mal klein. Mal mit Leerzeichen am Ende mal ohne - daher diese Formatierung...
		$engDesc = array(
			'/cloudy/', 
			'/partlycloudy/', 
			'/patchyrainnearby/',
			'/lightrainshower/',
			'/patchylightdrizzle/',
			'/sunny/',
			'/LAST ENTRY/');
		// Hier die deutsche Übersetzung eintragen. Auf die richtige Reihenfolge und UTF8 Kodierung achten!
		$deuDesc = array(
			'Bew&ouml;lkt', 
			'Teilweise Bew&ouml;lkt', 
			'Leichter Regen',
			'Leichte Regenf&auml;lle',
			'Leichter Nieselregen',
			'Sonnig',
			'LAST ENTRY');
		$var_engDesc = strtolower(preg_replace("/ /","",$var_engDesc)); // Hier wird der englische String wie oben benannt umgewandelt...
		
		return preg_replace($engDesc, $deuDesc, $var_engDesc);
	}
	
}
?>
Änderungen in Zeile 25-28 sowie die Funktion DateUnix in Zeile 140-151.
Ich kann, weil ich will, was ich muss!

chka
Beiträge: 2483
Registriert: 13.02.2012, 20:23
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 302 Mal
Danksagung erhalten: 116 Mal

Re: Homematic Webcontrol

Beitrag von chka » 15.07.2012, 11:55

Ist mir gestern auch aufgefallen :-)

zwei fragen, wie hast du die Ausgabe der Daten waagrecht hin bekommen und die andere hast du das Heitzungsscript aus dem forum bei dir laufen.
In wie weit verhält sich dies mit den slidern auf deiner seite.
RaspberryMatic - CuL 868mHz- CuxDemon - PioTek Tracker - Velux mit KLF200 und Somfy Anbindung- io.Broker auf Proxmox NUC6I3SYH i3-6100U RAM: 40Gig Crucial 8GB DDR4 CT2K8G4SFS824A + 32GB DDR4CT32G4SFD8266

Benutzeravatar
Tricalibur
Beiträge: 5
Registriert: 08.07.2012, 20:11

Re: Homematic Webcontrol

Beitrag von Tricalibur » 15.07.2012, 12:34

chka hat geschrieben:Ist mir gestern auch aufgefallen :-)

zwei fragen, wie hast du die Ausgabe der Daten waagrecht hin bekommen
Daten waagerecht? Meinst du die Felder neben einander? Das sind DIV Tags mit float:left/right. Im Falle des Screenshoots ist das folgender PHP/HTML Code:

Code: Alles auswählen

		<div class="Text2Line2" id="1">Arbeitszimmer<br /><span style="font-size:16px;" id="AZ_Temp"></span>&nbsp;&nbsp;&nbsp;<span style="font-size:16px;" id="AZ_Humi"></span></div>
		<div class="Text2Line" id="2">Sollwert:<span id="AZ_Stell_Soll"></span><br />Stellantrieb:<span id="AZ_Stell_Regler">?</span></div>
		<div class="Slider" id="AZ_Stell_Slide" style="width:380px;float:right;margin-top:20px;margin-right:5px;"></div>
		<div class="clearfloat"></div>
		<div class="Text2Line2" id="1">Wohnzimmer<br /><span style="font-size:16px;" id="WZ_Temp"></span>&nbsp;&nbsp;&nbsp;<span style="font-size:16px;" id="WZ_Humi"></span></div>
		<div class="Text2Line" id="2">Sollwert:<span id="WZ_Stell_Soll"></span><br />Stellantrieb:<span id="WZ_Stell_An">?</span></div>
		<div class="Slider" id="WZ_Stell_Slide" style="width:380px;float:right;margin-top:20px;margin-right:5px;"></div>
		<div class="clearfloat"></div>
Und das die zugehörigen CSS Anweisungen, wobei "clearfloat" einen Zeilenumbruch macht:

Code: Alles auswählen

.Text2Line2 {
	float: left;
	margin-left: 5px;
	width: 193px;
	height: 60px;
	position: relative;
	font-family: Arial, Helvetica, sans-serif;
	font-size: 18px;
	font-weight: bold;
	color: #DDD;
	text-align: center;
	vertical-align: middle;
	display: block;
	line-height: 30px;
	background-image: url(../img/back_1.jpg);
	-moz-border-radius: 15px;
	-moz-border-top-left-radius: 10px;
	-moz-border-top-right-radius: 30px;
	border-top-left-radius: 10px;
	border-top-right-radius: 30px;
	-moz-border-bottom-left-radius: 10px;
	-moz-border-bottom-right-radius: 30px;
	border-bottom-left-radius: 10px;
	border-bottom-right-radius: 30px;
}
.clearfloat {
	clear: both;
	height: 10px;
	font-size: 1px;
	line-height: 0px;
}
chka hat geschrieben:und die andere hast du das Heitzungsscript aus dem forum bei dir laufen.
In wie weit verhält sich dies mit den slidern auf deiner seite.
Nein habe ich noch nicht. Dazu fehlte es mir bislang an der Zeit bzw. der Notwendigkeit - da ja noch Sommer ist. Ich nutze Homematic erst seit ein paar Wochen. Die Slider binde ich derzeit ganz regulär ein:

Code: Alles auswählen

'ID10':{'INTERFACE':'RF','SN':'JEQ0000000:2','HTML_CONTAINER':'AZ_Stell_Slide','TYP':'CLIMATECONTROL_SETPOINT_SLIDER'},
<div class="Slider" id="AZ_Stell_Slide" style="width:380px;float:right;margin-top:20px;margin-right:5px;"></div>
Ich glaub für die "CLIMATECONTROL_SETPOINT_SLIDER" Klasse gabt's mal ein Update hier im Forum. Funktionieren tun die soweit, als das sie die eingestellte Temperatur an den jeweiligen Controller übermitteln.

Ich habe mal meine gesamte Seite gepackt und zum Download bereit gestellt. Muss aber dazusagen, dass das alles eine Baustelle ist. Aber wer sich auskennt kann gern mal reinschauen. Ich habe etliche eigene Klassen in der functions. js angelegt, aber seht ihr ja dann. Hier ist es: http://www.calibur.org/~FileHost/HomeControlShare.rar Hoffe es hilft jemandem weiter!
Ich kann, weil ich will, was ich muss!

chka
Beiträge: 2483
Registriert: 13.02.2012, 20:23
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 302 Mal
Danksagung erhalten: 116 Mal

Re: Homematic Webcontrol

Beitrag von chka » 15.07.2012, 12:36

:-) ich meinte die wetter daten :-)

edit funst Danke
RaspberryMatic - CuL 868mHz- CuxDemon - PioTek Tracker - Velux mit KLF200 und Somfy Anbindung- io.Broker auf Proxmox NUC6I3SYH i3-6100U RAM: 40Gig Crucial 8GB DDR4 CT2K8G4SFS824A + 32GB DDR4CT32G4SFD8266

taotsing
Beiträge: 14
Registriert: 13.06.2012, 10:50

Re: Homematic Webcontrol

Beitrag von taotsing » 11.09.2012, 16:12

Ich lese jetzt seit einiger Zeit mit Interesse den Webcontrol Thread und habe inzwischen das Floorplan UI auf Basis der Vorlagen von Daniel umgesetzt und angepasst. (10" Touchscreen in der Wand, neue Buttons, Neuer Nav-Bar, Sonos Steuerung)

An einem Thema beiß ich mir aber weiterhin die Zähne aus:

Ich habe drei Räume in denen ich für mehrere Deckenstrahler 2 oder 3 Wired-Dimmer nutze. Bei den physischen Schaltern kombiniere ich diese einfach.
Für das Webcontrol basierte UI kann ich aber ja immer nur einen Dimmer ansprechen. Hat jemand eine Idee wie das ohne massive Programmierung zu lösen ist?

Grüße,

Oliver

snudel
Beiträge: 1
Registriert: 23.09.2012, 14:00

Re: Homematic Webcontrol

Beitrag von snudel » 23.09.2012, 14:08

Hallo
Ich habe das Script gesehen und bin begeistert.
Scheinbar bin ich jedoch nicht in der Lage, es zum Laufen zu bringen. Und das, obwohl ich des Programmierens durchaus mächtig bin.

Wenn ich das Tutorial nehme, und meine Aktoren einpflege, klappt das Schalten auch. Jedoch das Update zurück klappt nicht. Sprich: Wenn ich durch das WebUI oder einen Schalter die Zustände ändere, wird das nicht im Browser angezeigt.
Ich habe die Firewall des Servers komplett deaktiviert und den anonymen Zugriff auf die Webseite aktiviert. Die Einstellungen in der globals.inc.php habe ich auch geprüft.

Zusätzlich steigt das Script komplett aus, wenn ich alle meine Komponenten hinzufüge und eigene Container-IDs benutze.
Ich habe den genauen Zusammenhang der verschiedensten Dateien noch nicht verstanden.

Mein Verständnis war, dass die Container-ID im Array mit dem DIV im BODY der HTML Seite verknüpft wird. Die aktualisieren beim pagerefresh() sollte doch diese dann beinhalten.
Zusätzlich dachte ich verstanden zu haben, dass ich in keiner weiteren Datei diese IDs zwingend eintragen muss. Es ist nur nützlich, da ich im CSS die Position bestimmen kann.

Leider sehe ich nur noch die Hintergrundfarben der DIVs sobald ich meine eigenen IDs benutze. Kein Symbol und kein Text.

Wo liegt mein Denkfehler?

Danke und Gruß

JarvisHome
Beiträge: 21
Registriert: 30.10.2012, 20:44

Re: Homematic Webcontrol

Beitrag von JarvisHome » 05.11.2012, 08:16

danke für das Skript :-)
Hab auf Basis des Webcontrol weitergebastelt, diverses optimeirt und dann damit meine Haussteuerung JARVIS begonnen zu realisieren:
http://homematic-forum.de/forum/viewtop ... 18&t=10537

Benutzeravatar
micky1962
Beiträge: 44
Registriert: 07.09.2012, 14:53

Re: Homematic Webcontrol

Beitrag von micky1962 » 30.11.2012, 18:30

Hallo,

Ich hab den PHPPRO-Server auf der CCU. Der Server funktioniert. Die Datei includes/globals.inc.php hab ich angepasst.

Ich erhalte aber den Fehler:
Fatal error: Call to undefined function session_id() in /var/disk/www/webcontrol/includes/php/phpSession_init_simulation_array.php on line 3 , wenn ich <mein server>/includes/php/phpSession_displayArray.php?array=homematic aufrufe.

Ausserdem sehe ich auch nur die Hintergrundfarben der DIVs und kein Symbol und kein Text (so wie snudel)

Hab ich in den Einstellungen von php.ini was vergessen?
Gruß, Michael

Antworten

Zurück zu „Projektvorstellungen“