Homematic Webcontrol
Moderator: Co-Administratoren
-
- Beiträge: 2501
- Registriert: 13.02.2012, 20:23
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 308 Mal
- Danksagung erhalten: 121 Mal
Re: Homematic Webcontrol
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
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
Re: Homematic Webcontrol
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! Danke!
Allein für Deine anfeuernden Worte und den Tipp mit dem Javascriptcode stehst Du jetzt in meinem Buch der coolen Leute! Danke!
- Tricalibur
- Beiträge: 5
- Registriert: 08.07.2012, 20:11
Re: Homematic Webcontrol
^Keine Ursache.chka hat geschrieben:super danke dir!!!
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).'°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='Übermorgen';}// Anstelle Datum 'Übermorgen' ausgeben...
$this->DaysForecast[$i] = array();
$this->DaysForecast[$i]['Low'] = ($day->tempMinC == "N/A") ? "" : ((string)$day->tempMinC).'°C';
$this->DaysForecast[$i]['Hi'] = ($day->tempMaxC == "N/A") ? "" : ((string)$day->tempMaxC).'°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ölkt',
'Teilweise Bewölkt',
'Leichter Regen',
'Leichte Regenfä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);
}
}
?>
Ich kann, weil ich will, was ich muss!
-
- Beiträge: 2501
- Registriert: 13.02.2012, 20:23
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 308 Mal
- Danksagung erhalten: 121 Mal
Re: Homematic Webcontrol
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.
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.
- Tricalibur
- Beiträge: 5
- Registriert: 08.07.2012, 20:11
Re: Homematic Webcontrol
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:chka hat geschrieben:Ist mir gestern auch aufgefallen
zwei fragen, wie hast du die Ausgabe der Daten waagrecht hin bekommen
Code: Alles auswählen
<div class="Text2Line2" id="1">Arbeitszimmer<br /><span style="font-size:16px;" id="AZ_Temp"></span> <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> <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>
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;
}
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: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.
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 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!
-
- Beiträge: 2501
- Registriert: 13.02.2012, 20:23
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 308 Mal
- Danksagung erhalten: 121 Mal
Re: Homematic Webcontrol
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
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
Re: Homematic Webcontrol
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ß
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ß
-
- Beiträge: 21
- Registriert: 30.10.2012, 20:44
Re: Homematic Webcontrol
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
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
Re: Homematic Webcontrol
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?
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