Hallo Zusammen,
ETA-Heizungen mit ETATouch haben eine aktivierbare REST-Schnittstelle, über die alle Parameter der Heizung über das lokale Netzwerk ausgelesen werden können. In diversen Unterforen gibt es entsprechende Anleitungen, wie das genutzt werden kann, für Edomi aber noch nicht. Daher habe ich einen LBS geschrieben, der zyklisch Parameter abfragt und diese als KOs zur Verfügung stellt. Die Liste möglicher Parameter ist dabei über http://IP:8080/user/menu einsehbar. Eine Umsetzung in einer Visu folgt noch, die Werte kann man aber schon einmal nutzen.
grafik.png
Viel Spaß damit,
Max
ETA-Heizungen mit ETATouch haben eine aktivierbare REST-Schnittstelle, über die alle Parameter der Heizung über das lokale Netzwerk ausgelesen werden können. In diversen Unterforen gibt es entsprechende Anleitungen, wie das genutzt werden kann, für Edomi aber noch nicht. Daher habe ich einen LBS geschrieben, der zyklisch Parameter abfragt und diese als KOs zur Verfügung stellt. Die Liste möglicher Parameter ist dabei über http://IP:8080/user/menu einsehbar. Eine Umsetzung in einer Visu folgt noch, die Werte kann man aber schon einmal nutzen.
grafik.png
Code:
###[DEF]### [name = ETA Heizung API ] [e#1 Trigger = Trigger ] [e#2 important = IP Adresse #init=192.168.188.199 ] [e#3 important = Frischwassermodul abfragen #init=1 ] [e#4 important = Fußbodenheizung abfragen #init=1 ] [e#5 important = Heizkreis 1 abfragen #init=1 ] [e#6 important = Kessel abfragen #init=1 ] [e#7 important = Twin(Pellets) abfragen #init=1 ] [e#8 important = Lager abfragen #init=1 ] [e#9 important = Pufferspeicher abfragen #init=1 ] [e#10 important = System abfragen #init=1 ] [a#1 = Temperatur Frischwasser Warm ] [a#2 = Temperatur Vorlauf FBH ] [a#3 = FBH Status] [a#4 = Temperatur Vorlauf Heizung ] [a#5 = Heizkreis_Status ] [a#6 = Restsauerstoff ] [a#7 = Temperatur Abgass ] [a#8 = Temperatur Kessel ] [a#9 = Temperatur Vorlauf Kessel ] [a#10 = Temperatur Rücklauf Kessel ] [a#11 = Volllaststunden ] [a#12 = Kesseldruck ] [a#13 = Ladezustand Puffer ] [a#14 = Restsauerstoff ] [a#15 = Temperatur Abgass Pellet] [a#16 = Temperatur Kessel Pellet ] [a#17 = Lager Pelletbehälter ] [a#18 = Lager Pelletlager] [a#19 = Temperatur Puffer Oben ] [a#20 = Temperatur Puffer Mitte ] [a#21 = Temperatur Puffer Unten ] [a#22 = Temperatur Aussen ] [v#1 = 1.0 ] (Version) [v#2 = LBS ] [v#3 = "ETA Heizung API" ] ###[/DEF]### ###[HELP]### Der Baustein implementiert die Abfrage und Bereitstellung der Informationen eines ETA-Heizungssystems im lokalen Netzwerk. Die möglichen Parameter, die abgefragt werden können, lassen sich unter der folgenden Adresse nachsehen: IP_der_Heizung:8080/user/menu Je nach System müssen dabei die Objekt-Adresssen ggf. angepasst werden. Zudem sind evtl. nicht alle Module verfügbar (In diseser Version Stückholz+Pellet ETA Twin 20) Hinweis: Über die Adresse werden ca. 350 Parameter zur Abfrage bereitgestellt. In diesem LBS werden einige für die Visualisierung interessante Parameter abgefragt, der Kreativität sind aber keine Grenzen gesetzt. Changes: 1.0 - Initiale Version ###[/HELP]### ###[LBS]### <? function LB_LBSID($id) { if ($E=getLogicEingangDataAll($id)) { if ($E[1]['refresh']==1) { callLogicFunctionExec(LBSID,$id); } } } ?> ###[/LBS]### ###[EXEC]### <? function debugFunction ($logName, $logLevel, $logMessage) { writeToCustomLog($logName, $logLevel, $logMessage); } function exception_error_handler($errno, $errstr, $errfile, $errline ) { global $lbs_name, $id, $errorNo; debugFunction ($lbs_name, 0, __FUNCTION__. ": $errstr: Line: $errline, No: $errno, File: $errfile"); } require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php"); global $id; sql_connect(); set_error_handler("exception_error_handler", E_ALL); #if ($E=getLogicEingangDataAll($id)) { # $IP = $E[2]['value']; # $FWM = $E[3]['value']; # $FBH = $E[4]['value']; # $HK = $E[5]['value']; # $KES = $E[6]['value']; # $PEL = $E[7]['value']; # $LAG = $E[8]['value']; # $PUF = $E[9]['value']; # $SYS = $E[10]['value']; #}else{ $IP = "192.168.188.199"; $FWM = "1"; $FBH = "1"; $HK = "1"; $KES = "1"; $PEL = "1"; $LAG = "1"; $PUF = "1"; $SYS = "1"; #} $lbs_name = logic_getVar($id, 2) . " - " . logic_getVar($id, 3); $error=""; $errorNo=41; $transform = ""; $debug = 8; $Temperatur_Frischwasser_Warm = ""; $Temperatur_Vorlauf_FBH = ""; $FBH_Status = ""; $Temperatur_Vorlauf_Heizung = ""; $Heizkreis_Status = ""; $Restsauerstoff = ""; $Abgastemp = ""; $Kesseltemp = ""; $Kessel_vorlauf_temp = ""; $Kessel_rücklauf_temp = ""; $Volllaststunden = ""; $Kesseldruck = ""; $Ladezustand = ""; $Restsauerstoff_Pel = ""; $Abgastemp_Pellet = ""; $Kesseltemp_Pellet = ""; $Inhalt_Pelletbehälter = ""; $Inhalt_Pelletlager = ""; $Puffer_oben = ""; $Puffer_mitte = ""; $Puffer_unten = ""; $Aussentemp = ""; if ($debug>0) debugFunction ($lbs_name, 0, __FUNCTION__. "ETA Heizung API -> gestartet"); try { $opts = array('http' => array( 'method' => 'GET', 'max_redirects' => '0', 'ignore_errors' => '1' ) ); $context = stream_context_create($opts); try { #Daten aus Dokument auslesen debugFunction("$lbs_name", 0, "Start reading data"); debugFunction("$lbs_name", 0, $FWM); if($FWM == 1){ #Temperatur Warmwasser $url = "http://$IP:8080/user/var//79/10531/0/0/12291"; $transform = file_get_contents($url, false, $context); debugFunction("$lbs_name", 0, $transform); preg_match('/strValue="(.*?)"/', $transform, $matches); $Temperatur_Frischwasser_Warm = isset($matches[1]) ? $matches[1] : ''; } if($FBH == 1){ #Temperatur Vorlauf FBH $url = "http://$IP:8080/user/var//74/10101/0/11060/0" ; $transform = file_get_contents($url, false, $context); preg_match('/strValue="(.*?)"/', $transform, $matches); $Temperatur_Vorlauf_FBH = isset($matches[1]) ? $matches[1] : ''; #FBH An/Aus $url = "http://$IP:8080/user/var//74/10101/0/0/12080" ; $transform = file_get_contents($url, false, $context); preg_match('/strValue="(.*?)"/', $transform, $matches); $FBH_Status = isset($matches[1]) ? $matches[1] : ''; } if($HK == 1){ #Temperatur Vorlauf Heizkreis $url = "http://$IP:8080/user/var//74/10102/0/11060/0" ; $transform = file_get_contents($url, false, $context); preg_match('/strValue="(.*?)"/', $transform, $matches); $Temperatur_Vorlauf_Heizung = isset($matches[1]) ? $matches[1] : ''; #Heizkreis An/Aus $url = "http://$IP:8080/user/var//74/10102/0/0/12080" ; $transform = file_get_contents($url, false, $context); preg_match('/strValue="(.*?)"/', $transform, $matches); $Heizkreis_Status = isset($matches[1]) ? $matches[1] : ''; } if($KES == 1){ #Restsauerstoff $url = "http://$IP:8080/user/var//48/10391/0/11108/2060"; $transform = file_get_contents($url, false, $context); preg_match('/strValue="(.*?)"/', $transform, $matches); $Restsauerstoff = isset($matches[1]) ? $matches[1] : ''; #Abgasstemp $url = "http://$IP:8080/user/var//48/10391/0/11110/0" ; $transform = file_get_contents($url, false, $context); preg_match('/strValue="(.*?)"/', $transform, $matches); $Abgastemp = isset($matches[1]) ? $matches[1] : ''; #Kesseltemp $url = "http://$IP:8080/user/var//48/10391/0/11109/0" ; $transform = file_get_contents($url, false, $context); preg_match('/strValue="(.*?)"/', $transform, $matches); $Kesseltemp = isset($matches[1]) ? $matches[1] : ''; #Kessel_Vorlauf $url = "http://$IP:8080/user/var//48/10391/0/11109/0" ; $transform = file_get_contents($url, false, $context); preg_match('/strValue="(.*?)"/', $transform, $matches); $Kessel_vorlauf_temp = isset($matches[1]) ? $matches[1] : ''; #Kessel Rücklauf $url = "http://$IP:8080/user/var//48/10391/0/11656/0" ; $transform = file_get_contents($url, false, $context); preg_match('/strValue="(.*?)"/', $transform, $matches); $Kessel_rücklauf_temp = isset($matches[1]) ? $matches[1] : ''; #Volllaststunden $url = "http://$IP:8080/user/var//48/10391/0/0/12153" ; $transform = file_get_contents($url, false, $context); preg_match('/strValue="(.*?)"/', $transform, $matches); $Volllaststunden = isset($matches[1]) ? $matches[1] : ''; #Kesseldruck $url = "http://$IP:8080/user/var//48/10391/0/0/12180" ; $transform = file_get_contents($url, false, $context); preg_match('/strValue="(.*?)"/', $transform, $matches); $Kesseldruck = isset($matches[1]) ? $matches[1] : ''; #Ladezustand $url = "http://$IP:8080/user/var//48/10391/0/0/12528" ; $transform = file_get_contents($url, false, $context); preg_match('/strValue="(.*?)"/', $transform, $matches); $Ladezustand = isset($matches[1]) ? $matches[1] : ''; } if($PEL == 1){ #Restsauerstoff $url = "http://$IP:8080/user/var//40/10401/0/11108/2060" ; $transform = file_get_contents($url, false, $context); preg_match('/strValue="(.*?)"/', $transform, $matches); $Restsauerstoff_Pel = isset($matches[1]) ? $matches[1] : ''; #Abgasstemp $url = "http://$IP:8080/user/var//40/10401/0/11110/0" ; $transform = file_get_contents($url, false, $context); preg_match('/strValue="(.*?)"/', $transform, $matches); $Abgastemp_Pellet = isset($matches[1]) ? $matches[1] : ''; #Kesseltemp $url = "http://$IP:8080/user/var//40/10401/0/11109/0" ; $transform = file_get_contents($url, false, $context); preg_match('/strValue="(.*?)"/', $transform, $matches); $Kesseltemp_Pellet = isset($matches[1]) ? $matches[1] : ''; #Inhalt_Pelletbehälter $url = "http://$IP:8080/user/var//40/10401/0/0/12011" ; $transform = file_get_contents($url, false, $context); preg_match('/strValue="(.*?)"/', $transform, $matches); $Inhalt_Pelletbehälter = isset($matches[1]) ? $matches[1] : ''; } if($LAG == 1){ #Inhalt_Pelletlager $url = "http://$IP:8080/user/var//40/10201/0/0/12015" ; $transform = file_get_contents($url, false, $context); preg_match('/strValue="(.*?)"/', $transform, $matches); $Inhalt_Pelletlager = isset($matches[1]) ? $matches[1] : ''; } if($PUF == 1){ #Puffer_Temp_oben $url = "http://$IP:8080/user/var//120/10601/0/11327/0"; $transform = file_get_contents($url, false, $context); preg_match('/strValue="(.*?)"/', $transform, $matches); $Puffer_oben = isset($matches[1]) ? $matches[1] : ''; #Puffer_Temp_mitte $url = "http://$IP:8080/user/var//120/10601/0/11328/0" ; $transform = file_get_contents($url, false, $context); preg_match('/strValue="(.*?)"/', $transform, $matches); $Puffer_mitte = isset($matches[1]) ? $matches[1] : ''; #Puffer_Temp_unten $url = "http://$IP:8080/user/var//120/10601/0/11329/0"; $transform = file_get_contents($url, false, $context); preg_match('/strValue="(.*?)"/', $transform, $matches); $Puffer_unten = isset($matches[1]) ? $matches[1] : ''; } if($SYS == 1){ #Aussentemp $url = "http://$IP:8080/user/var//120/10241/0/0/12197"; $transform = file_get_contents($url, false, $context); preg_match('/strValue="(.*?)"/', $transform, $matches); $Aussentemp = isset($matches[1]) ? $matches[1] : ''; } } catch (exception $e) { debugFunction("$lbs_name", 0, "Error reading data"); } # Daten als KOs bereitstellen setLogicLinkAusgang($id, 1, $Temperatur_Frischwasser_Warm); setLogicLinkAusgang($id, 2, $Temperatur_Vorlauf_FBH); setLogicLinkAusgang($id, 3, $FBH_Status); setLogicLinkAusgang($id, 4, $Temperatur_Vorlauf_Heizung); setLogicLinkAusgang($id, 5, $Heizkreis_Status); setLogicLinkAusgang($id, 6, $Restsauerstoff); setLogicLinkAusgang($id, 7, $Abgastemp); setLogicLinkAusgang($id, 8, $Kesseltemp); setLogicLinkAusgang($id, 9, $Kessel_vorlauf_temp); setLogicLinkAusgang($id, 10, $Kessel_rücklauf_temp); setLogicLinkAusgang($id, 11, $Volllaststunden); setLogicLinkAusgang($id, 12, $Kesseldruck); setLogicLinkAusgang($id, 13, $Ladezustand); setLogicLinkAusgang($id, 14, $Restsauerstoff_Pel); setLogicLinkAusgang($id, 15, $Abgastemp_Pellet); setLogicLinkAusgang($id, 16, $Kesseltemp_Pellet); setLogicLinkAusgang($id, 17, $Inhalt_Pelletbehälter); setLogicLinkAusgang($id, 18, $Inhalt_Pelletlager); setLogicLinkAusgang($id, 19, $Puffer_oben); setLogicLinkAusgang($id, 20, $Puffer_mitte); setLogicLinkAusgang($id, 21, $Puffer_unten); setLogicLinkAusgang($id, 22, $Aussentemp); } catch (exception $e) { debugFunction("$lbs_name", 0, "Error reading data"); } setLogicElementStatus($id,0); sql_disconnect(); ?> ###[/EXEC]###
Viel Spaß damit,
Max