ET-SH20 Touch - Kommunikation mit IPS

Hier ein kurzer Erfahrungsbericht über die Anbindung eines „ETA-SH20 Touch“ an IP-Symcon.
Der Kessel verfügt über eine Anbindung an mein Heimnetz (Ethernet) und somit ans Internet. Übers Internet (www.meineta.at) ist der Kessel komplett steuerbar, leider aber nicht an IPS angebunden.
Ich wollte aber im ersten Schritt bestimmte Daten, wie z.B. die Pufferladung an IP-Symcon übertragen.
Das Webinterface des Kessels spricht, bzw. versteht, nach einer Freischaltung durch ETA, http-Anfragen. Die „Sprache“ die hier verwendet wird ist RESTFul-IP-Services.
D.h. wenn ich im Browser z.B. die folgende Anfrage den Vollaststunden des Kessels eingebe http://192.168.100.xx:8080/user/var/48/10391/0/0/12153

antwortet er…

<eta xmlns=„http://www.eta.co.at/rest/v1“ version=„1.0“><value uri="/user/var/48/10391/0/0/12153" advTextOffset=„0“ scaleFactor=„1“ decPlaces=„0“ unit="" strValue=„63h 39m“>229198</value></eta>

Wobei die 63h den Vollaststunden entsprechen.

Da ich noch über keine Programmierkenntnisse in IP-Symcon verfüge, habe ich mir anders geholfen und die Module von IPS verwendet, die eh schon da sind und das sind zum einen der WWW-Reader und zum anderen der Text-Parser.

Im ersten Schritt läuft der WWW-Reader zyklisch und liest die Antwort auf z.B. die Anfrage nach der Pufferladung aus. D.h. es kommt eine ähnliche Antwort, wie oben dargestellt zurück.
Dieser Text wird dann vom Text-Parser zerlegt und die Info, wie z.B. die Pufferladung wird dann in eine Variable geschrieben.

Nicht ganz optimal, da z.B. Infos wie die Antwort auf die Anfrage nach der Volllastzeit des Kessels, mit z.B. 66h 5min beantwortet wird und das sprengt den Text-Parser, hier habe ich den Wert als String in IPS übernommen. Hilfreicher wäre wenn der String in einen Floatwert zerlegt werden würde.

Wichtig ist mir erst mal, dass es funktioniert….

In meinem letzten Beitrag zu diesem Thema, habe ich die Koppelung ohne Script, mit dem WWW-Reader und dem Textparser erledigt. Nachteil war, dass diese Konstellation nicht stabil funktioniert hat und dass nicht alles, was ich mir vorgestellt habe machbar war.
Ich habe dabei festgestellt, dass PHP- und IPS-Programmierung nicht schwierig ist. Daher habe ich die Koppelung per Script gelöst.
Die Funktionsweise ist identisch, aber funktioniert nun seit Wochen stabil.
Kurz zur Funktion des Scripts:

  1. HTTP Anfrage an den Kessel schicken
  2. Antwort empfangen
  3. Antwort auf relevante Daten Filtern
  4. Gefilterte Daten in IPS-Variablen schreiben
  5. (Das läuft nicht mehr im Script) Scriptaufruf alle 30 Sekunden
/*
***********************************
 ETA-SH20 -Script
 (c) by Markus Hasenfuß / 05.2013
***********************************

Mit diesem Script werden die Werte des ET-SH20 Touch-Kessels ausgelesen und an IPS übergeben.
Zudem wird nach Anzahl x-Volllaststunden autom. eine Mail generiert, die an die Ascheentleerung erinnert.
*/

//****************************************
//Auslesen Volllaststunden
//****************************************
$url8 = "http://192.168.100.53:8080/user/var/48/10391/0/0/12153";
$Ausgabe8 = file_get_contents("$url8");
$Volllaststunden_in_Sekunden = strip_tags($Ausgabe8);
$Volllaststunden_Dezimal = $Volllaststunden_in_Sekunden/3600;
$Volllaststunden_Array = explode('.',$Volllaststunden_Dezimal); //In Array umwandeln
//echo $Volllaststunden_Array[0]; //Ausgabe der Stunden
//echo"
";
//echo $Volllaststunden_Array[1]; //Ausgabe der Minuten
$Minuten = $Volllaststunden_Array[1]/100*60;
$Minuten_auf_zwei_Zeichen_gekuertzt = substr ($Minuten, 0, 2);
$Volllast_Std = $Volllaststunden_Array[0];
$Volllaststunden = ($Volllaststunden_Array[0]+($Minuten_auf_zwei_Zeichen_gekuertzt/100));
SetValue(19971/*[ETA-SH20\Volllaststunden]*/,(float)$Volllaststunden);


//****************************************
//Mailversand bezüglich Ascheentleerung
//****************************************

//	echo"
"; Zeilenumbruch

$Naechste_Zeit_bis_Aschereinigung=GetValue(58088 /*[ETA-SH20\Zeitschwelle Aschereinigung bei...]*/);

if ($Naechste_Zeit_bis_Aschereinigung==0) {           			//Neusetzten des Asche-Timers
	$Naechste_Zeit_bis_Aschereinigung=$Volllast_Std+10;       //Timer für Aschereinugung neu setzten
	setValue(58088 /*[ETA-SH20\Zeitschwelle Aschereinigung bei...]*/,(float)$Naechste_Zeit_bis_Aschereinigung);
	print_R($Naechste_Zeit_bis_Aschereinigung);
	} else {
	$Verbleibende_Std_bis_Aschereinigung=GetValue(58088 /*[ETA-SH20\Zeitschwelle Aschereinigung bei...]*/)-$Volllast_Std;

//	print_R($Verbleibende_Std_bis_Aschereinigung);

	SetValue(35579 /*[ETA-SH20\Verbleibende Stunden bis Aschereinigung]*/,(float)$Verbleibende_Std_bis_Aschereinigung);
		}
if ($Verbleibende_Std_bis_Aschereinigung <= 0) {
	//SMTP_SendMail(52568 /*[Mail-Module\Mailversand Aschereinigung ETA-SH20]*/,"ETA-SH20 - Aschereinigung","Hallo, bitte Aschekasten leeren. Die letzte Reinigung ist 10 Volllaststunden her.");
	$Naechste_Zeit_bis_Aschereinigung=0;
	}


//****************************************
//Auslesen der Solar-Kollektortemperatur
//****************************************
$url1 = "http://192.168.100.53:8080/user/var/120/10221/0/0/12275"; //URL der Solar_Kollektortemperatur
$Ausgabe1 = file_get_contents("$url1");
$Solar_Kollektor_Temp_1 = strip_tags($Ausgabe1);
$Solar_Kollektor_Temp = $Solar_Kollektor_Temp_1/10;
//$Solar_Kollektor_Temp = substr($Ausgabe1, -83,2);
// print_R($Solar_Kollektor_Temp);													   
SetValue(16984 /*[ETA-SH20\Kollektor Temperatur]*/,(float)$Solar_Kollektor_Temp);


//****************************************
//Auslesen der Pufferladung
//****************************************
$url2 = "http://192.168.100.53:8080/user/var/48/10391/0/0/12528";
$Ausgabe2 = file_get_contents("$url2");
$Pufferladung_1 = strip_tags($Ausgabe2);
$Pufferladung = $Pufferladung_1/10;
// print_R($Ausgabe2);
//$Pufferladung = substr($Ausgabe2, -81,2);
 //print_R($Pufferladung);
SetValue(14107/*[ETA-SH20\Pufferladung]*/,(float)$Pufferladung);


//****************************************
//Umrechnen der Pufferladung in % in KW
//****************************************
$Pufferladung_in_KW=GetValue(14107 /*[ETA-SH20\Pufferladung]*/)*20/100;
SetValue(57577 /*ETA-SH20\Pufferladung_inKW*/,(float)$Pufferladung_in_KW);

//****************************************
//Auslesen der Abgassolltemperatur
//****************************************
$url3 = "http://192.168.100.53:8080/user/var/48/10391/0/0/12002";
$Ausgabe3 = file_get_contents("$url3");
// print_R($Ausgabe3);
//$Abgassolltemperatur = substr($Ausgabe3, -81,3);
$Abgassolltemperatur_1 = strip_tags($Ausgabe3);
$Abgassolltemperatur = $Abgassolltemperatur_1/10;
//print_R($Abgassolltemperatur);
SetValue(55298/*[ETA-SH20\Abgassolltemperatur]*/,(float)$Abgassolltemperatur);


//****************************************
//Auslesen UPM-Abgasgebläse
//****************************************
$url4 = "http://192.168.100.53:8080/user/var/48/10391/0/0/12165";
$Ausgabe4 = file_get_contents("$url4");

$Abgasgeblaese = strip_tags($Ausgabe4);
//echo"
";
//print_R($Abgasgeblaese);
SetValue(12009/*[ETA-SH20\Abgasgeblaese]*/,(float)$Abgasgeblaese);


//****************************************
//Auslesen Abgastemperatur
//****************************************
$url5 = "http://192.168.100.53:8080/user/var/48/10391/0/0/12162";
$Ausgabe5 = file_get_contents("$url5");
$Abgastemperatur_1 = strip_tags($Ausgabe5);
$Abgastemperatur = $Abgastemperatur_1/10;
SetValue(48903/*[ETA-SH20\Abgastemperatur]*/,(float)$Abgastemperatur);


//****************************************
//Auslesen Kesselpumpe
//****************************************
$url6 = "http://192.168.100.53:8080/user/var/48/10391/0/11123/0";
$Ausgabe6 = file_get_contents("$url6");
$Kesselpumpe_1 = strip_tags($Ausgabe6);
$Kesselpumpe = $Kesselpumpe_1/10;
SetValue(54068/*[ETA-SH20\Kesselpumpe]*/,(float)$Kesselpumpe);


//****************************************
//Auslesen Restsauerstoff
//****************************************
$url7 = "http://192.168.100.53:8080/user/var/48/10391/0/0/12164";
$Ausgabe7 = file_get_contents("$url7");
$Restsauerstoff_1 = strip_tags($Ausgabe7);
$Restsauerstoff = $Restsauerstoff_1/100;
//print_R($Restsauerstoff);
SetValue(16064/*[ETA-SH20\Restsauerstoff]*/,(float)$Restsauerstoff);


//***********************************************
//Auslesen Volllaststunden_seit_letzter_Wartung
//***********************************************
$url9 = "http://192.168.100.53:8080/user/var/48/10391/0/0/12404";
$Ausgabe9 = file_get_contents("$url9");
$Volllaststunden_Wartung_in_Sekunden = strip_tags($Ausgabe9);
$Volllaststunden_Dezimal_Wartung = $Volllaststunden_Wartung_in_Sekunden/3600;
$Volllaststunden_Wartung_Array = explode('.',$Volllaststunden_Dezimal_Wartung); //In Array umwandeln
$Minuten_Wartung = $Volllaststunden_Wartung_Array[1]/100*60;
$Minuten_auf_zwei_Zeichen_gekuertzt_Wartung = substr ($Minuten_Wartung, 0, 2);
$Volllaststunden_Wartung = ($Volllaststunden_Wartung_Array[0]+($Minuten_auf_zwei_Zeichen_gekuertzt_Wartung/100));
SetValue(48726/*[ETA-SH20\Volllaststunden_seit_letzter_Wartung]*/,(float)$Volllaststunden_Wartung);


//*********************************************************************
//Berechnung Verbleibende Stunden bei derzeitiger Last
//*********************************************************************
$Restzeit_KW = $Pufferladung_in_KW/(GetValue(51644/*[HX-Control\Leistung Gesamt]*/)+0.5);
SetValue(44715 /*ETA-SH20\Verbleibende Stunden bei derzeitiger Last*/,(float)$Restzeit_KW);



Hier ein Bild des Ergebnis:

Bei Fragen hierzu, einfach melden.

hast sehr schön gemacht. :slight_smile:
ich hab erstmal mit http://–ip–:8080/user/menu den kessel abgefragt
und bemerkt das es unterschiede gib zwischen deinem und meinem kessel gibt.

Mein Touchregler frisst nur updats mit 1.xx.xx

hab mal unten meine Konfig als .xml datei angehäng

Gruss

menu.eta.pc25kw.xml (15.8 KB)