Monitoring Stiebel Eltron LWZ 303 - 403

hi, schau mal in meinen Beiträgen.-… Da hatte ich etwas zu Datalogging geschrieben oder www.myenergy-portal.de

Hallo,

ich versuche grade die Lüfterstufe per ISG zu setzten…
@FRAD: kannst du mir sagen wie du das gelöst hast?

danke!

Hi,

die Lüfterstufe steuere ich noch nicht über IPS. Wenn du da aber weiter kommst, wäre es super, wenn du das Skript hier postest.

Grüße

Hey,

aber du hattest doch geschrieben, das steuern auch geht… Was steuerst du den darüber?

Viele Grüße

aktuell steuer ich die Betriebsart. Anhand dieses Beispiels lässt sich auch die Lüfterstufe ähnlich steuern…

Hey,

kannst du mir vielleicht sagen wie du das gelöst hast?

danke :slight_smile:

Hallo,

so, es ist vollbracht. Habe das LWZ Protokoll in IPS implementiert. :cool: Es sind zwar nocht nicht alle Funktionen drin, da ich selbst nicht alle brauche und es etwas mühselig ist, aber das lässt sich bei Bedarf nachholen. :rolleyes:
Fehlerbehandlung ist auch eher weniger vorhanden.

Sind bestimmt noch ein paar Bugs drin. Vor allem bei den Werten die über Bitmasken aus der Anlage kommen. Bei manchen fehlt mir auch noch die Info was der Wert genau bedeutet. :confused:

Über das auslesen hinaus ist es auch möglich Werte in der Anlage zu verändern.
Implementiert ist derzeit den Betriebsmodus zu wechseln und die Lüfterdurchsätze der 3 Lüfterstufen zu regeln.

Hintergrund: Die Passivlüftung der Anlage funktioniert nicht gut genug, da nicht beachtet wird, ob überhaupt ein Fenster offen ist. Ebenso soll ein VOC die Lüftung noch bedarfsgerechter steuern.

Was ihr braucht:
USB Verbindung zu Anlage (eventuell auch seriell, aber damit hatte ich Probleme).
Der USB Port ist innenliegend hinter der Abdeckung an der auch der Seriell Port ist. Anlage beim Anschluß stromlos machen. Hinter der Abdeckung ist ungeschützt 230V!
Am PC meldet sich ein USB/Seriell Wandler SiliconLabs CP210x. Treiber gibts beim Hersteller.

In der LWZfunctions.inc.php ist das Protokoll implementiert. Die muss als Include so im scripts Verzeichnis liegen.

COM Port in IPS (115200,8,1,N bei USB), RegisterVariable dran und mit LWZprocessdata.inc.php verbinden.
In der LWZfunctions oben die ID vom ComPort eintragen.

Dann die ganzen Variablen anlegen die ihr braucht. :wink:
In der LWZProcessdata bei den SetValue die IDs anpassen.

Die Befehle zum Anfragen der Werte sind in 54304, die regelmäßig ausgeführt werden sollte und in 30312 und 32689 findet sich ein Beispiel um auf die Variablen der Lüfterdurchsätze als Eigene Aktion zu setzen.

Ich habe bei mir die Anlagenversion 4.09. Generell gilt für alles: Auf eigene Gefahr. Bei mir läufts, bei euch kann es eventuell die Anlage zerstören. Vor allem bei einer anderen Anlagenversion. Die Befehle zum Daten holen sind jedoch vermutlich weniger gefährlich als die zum schreiben.

Wenn ihr noch eine Funktion braucht, schreibt kurz, dann versuche ich die zu implementieren.

Mein bester Dank gilt Robert Penz, sowie dem FHEM Team an dessen Implementierung ich mich orientieren konnte.

Gruß

Andreas

IPS_LWZ.zip (3.88 KB)

Wenn Du den Usern das manuelle Anlegen der Objekte und korrekte Verlinken mit den Scripts abnehmen willst, kannst Du Dein Projekt auch als Export-Script bereit stellen :wink:

RS Project Exporter

Na dann versuchen wir das mal.

Danke Raketenschnecke!

LWZ_IPS_RS_Projektexporter.zip (18.5 KB)

Abend,

bin per PM drum gebeten worden, doch bitte mein Skript mal zu veröffentlichen mit dem ich die THZ bei mir daheim abfrage. Es basiert auf dem Skript von myenergy-portal.de ist aber leicht abgewandelt, so dass es in IPS Variablen updated anstatt die Ergebnisse in einer Datenbank zu speichern. Man kann das ja dann beim Anlegen der Variable machen.

Zum Installieren müsste man verschiedene Variablen anlegen. Sieht man denke ich im Code.

Ich habe auch ein Skript zum Setzen von Werten im ISG, müsste aber das noch etwas aufbereiten, falls hier Interesse bestehen sollte.

Aber hier mal das Skript zum Auslesen der Werte - läuft bei mir alle 2 Minuten:

<?php

$isg_pw="";
$isg_user="";

$cu = curl_init();
curl_setopt($cu, CURLOPT_URL, "http://192.168.178.29/?s=1,0"); // url
curl_setopt ($cu, CURLOPT_POST, 1); // post formular
curl_setopt ($cu, CURLOPT_POSTFIELDS, "make=send&pass=".$isg_pw."&user=".$isg_user."");
curl_setopt($cu, CURLOPT_FOLLOWLOCATION, true); // Location: folgen
curl_setopt ($cu, CURLOPT_COOKIEJAR, 'cookie.txt'); // cookies unterstützen...
curl_setopt ($cu, CURLOPT_RETURNTRANSFER, 1); // ausgabe als string

$website = curl_exec ($cu);
curl_close ($cu);


if (!$website) {
  return;
  }

// Find key value pairs in website
preg_match_all ("|<[^>]+key[^>]+>(.*)<[^>]+>.*
.*<[^>]+value[^>]+>(.*)<[^>]+>|mU", $website, $values);


$ww = 0;
$heizen = 0;
$pumpe = 0;

for ($i = 0; $i < count($values[1]); $i++)
{
	echo $values[1][$i] ." ". $values[2][$i]."
";
	switch ($values[1][$i]){
	   case "SOFTWARESTAND":
	      SetValueString(27619 /*[Heizung\THZ\THZ Version]*/ , trim($values[2][$i]));
	      break;
		case "HAUPTVERSIONSNUMMER":
		   $isg_ver = trim($values[2][$i]);
		   break;
		case "NEBENVERSIONSNUMMER":
		   $isg_ver .= ".".trim($values[2][$i]);
			break;
	   case "REVISIONSNUMMER":
		   $isg_ver .= ".".trim($values[2][$i]);
  		   SetValueString(34257 /*[Heizung\THZ\ISG Version]*/ , $isg_ver);
	      break;
	   case "WARMWASSERBEREITUNG":
	      $ww = 1;
			SetValueBoolean(54634 /*[Heizung\THZ\Warmwasser\Warmwasserbereitung]*/, true);
			break;
	   case "ISTWERT HK1":
	      if ($heizen == 1) {
		      // Parse Temperature Value
		      preg_match("|(\d*,\d*)|", $values[2][$i], $treffer);
		      // Setze Sollwert auf Wert
		      SetValueFloat(24961 /*[Heizung\THZ\Heizung\Istwert HK1]*/, (float) preg_replace('|,|','.', $treffer[1]));
	      }
	      break;
	   case "SOLLWERT HK1":
	   	preg_match("|(\d*,\d*)|", $values[2][$i], $treffer);
	      SetValueFloat(35088 /*[Heizung\THZ\Heizung\Sollwert HK1]*/, (float) preg_replace('|,|','.', $treffer[1]));
	      break;
	   case "AUSSENTEMPERATUR":
	   	preg_match("|(\d*,\d*)|", $values[2][$i], $treffer);
	      SetValueFloat(44760 /*[Heizung\THZ\Heizung\Außentemperatur]*/, (float) preg_replace('|,|','.', $treffer[1]));
	      break;
      case "VORLAUFTEMP.":
	   	preg_match("|(\d*,\d*)|", $values[2][$i], $treffer);
	   	SetValueFloat(50171 /*[Heizung\THZ\Heizung\Vorlauftermperatur]*/, (float) preg_replace('|,|','.', $treffer[1]));
	      break;
      case "RÃœCKLAUFTEMP.":
		   preg_match("|(\d*,\d*)|", $values[2][$i], $treffer);
		     SetValueFloat(10719 /*[Heizung\THZ\Heizung\Rücklauftemperatur]*/, (float) preg_replace('|,|','.', $treffer[1]));
	      break;
      case "WW-ISTTEMP.":
	   	preg_match("|(\d*,\d*)|", $values[2][$i], $treffer);
	      SetValueFloat(34516 /*[Heizung\THZ\Warmwasser\WW Ist-Temperatur]*/, (float) preg_replace('|,|','.', $treffer[1]));
	      break;
      case "WW-SOLLTEMP.":
	   	preg_match("|(\d*,\d*)|", $values[2][$i], $treffer);
	      SetValueFloat(40242 /*[Heizung\THZ\Warmwasser\WW Soll-Temperatur]*/, (float) preg_replace('|,|','.', $treffer[1]));
	      break;
      case "ZULUFT IST LÃœFTERDREHZAHL":
	   	preg_match("|(\d*) Hz|", $values[2][$i], $treffer);
	      SetValueInteger(30233 /*[Heizung\THZ\Lüftung\Zuluft Ist Lüfterdrehzahl]*/ , (integer) preg_replace('|,|','.', $treffer[1]));
	      break;
      case "ABLUFT IST LÃœFTERDREHZAHL":
	   	preg_match("|(\d*) Hz|", $values[2][$i], $treffer);
	      SetValueInteger(42480 /*[Heizung\THZ\Lüftung\Abluft Ist Lüfterdrehzahl]*/ , (integer) preg_replace('|,|','.', $treffer[1]));
	      break;
      case "ZULUFT SOLL VOLUMENSTROM":
	   	preg_match("|(\d*) |", $values[2][$i], $treffer);
	      SetValueInteger(21526 /*[Heizung\THZ\Lüftung\Zuluft Soll Volumenstrom]*/ , (integer) preg_replace('|,|','.', $treffer[1]));
	      break;
		case "ABLUFT SOLL VOLUMENSTROM":
	   	preg_match("|(\d*) |", $values[2][$i], $treffer);
	      SetValueInteger(56148 /*[Heizung\THZ\Lüftung\Abluft Soll Volumenstrom]*/ , (integer) preg_replace('|,|','.', $treffer[1]));
	      break;
      case "NHZ STUFEN":
	   	preg_match("|(\d*)|", $values[2][$i], $treffer);
	      SetValueInteger(13305 /*[Heizung\THZ\Heizung\NHZ Stufen]*/ , (integer) $treffer[1]);
	      break;
      case "HEIZKREISPUMPE":
			$pumpe = 1;
			SetValueBoolean(40148 /*[Heizung\THZ\Heizung\Heizkreispumpe]*/ , true);
			break;
		case "HEIZEN":
		   $heizen = 1;
		   SetValueBoolean(39700 /*[Heizung\THZ\Heizung\Heizen]*/ , true);
		   break;
      case "P HEIZUNG TAG":
	   	preg_match("|(\d*,\d*) kWh|", $values[2][$i], $treffer);
	      $hzg_tag = (float) preg_replace('|,|','.', $treffer[1])*1;
	      break;
      case "P HEIZUNG SUMME":
	   	preg_match("|(\d*,\d*) MWh|", $values[2][$i], $treffer);
	      $temp = (float) preg_replace('|,|','.', $treffer[1]) * 1000 + $hzg_tag;
	      SetValueFloat(19023 /*[Heizung\THZ\Laufzeiten & Verbrauch\Stromverbrauch Heizen Summe]*/, $temp);
	      break;
      case "P WW TAG":
	   	preg_match("|(\d*,\d*) kWh|", $values[2][$i], $treffer);
	      $ww_tag = (float) preg_replace('|,|','.', $treffer[1])*1;
	      break;
      case "P WW SUMME":
	   	preg_match("|(\d*,\d*) MWh|", $values[2][$i], $treffer);
	      $temp = (float) preg_replace('|,|','.', $treffer[1]) * 1000 + $ww_tag;
	      SetValueFloat(11351 /*[Heizung\THZ\Laufzeiten & Verbrauch\Stromverbrauch Warmwasser Summe]*/, $temp);
	      break;
	}
}





if ($pumpe == 0)
{
	SetValueBoolean(40148 /*[Heizung\THZ\Heizung\Heizkreispumpe]*/ , false);
	
}

if ($ww == 0)
{
	SetValueBoolean(54634 /*[Heizung\THZ\Warmwasser\Warmwasserbereitung]*/, false);
}

if ($heizen == 0)
{
	SetValueBoolean(39700 /*[Heizung\THZ\Heizung\Heizen]*/ , false);
}

?>

Oben die richtige IP, user und Passwort eintragen - Variablen anlegen und dann sollte es gehen. Man kann’s auch manuell aufrufen, so dass man recht einfach sieht welche Variablen fehlen.

Bei mir läuft dann noch ein Skript, das mir eine grobe Auswertung Tag/Nachtstrom liefert.
Ausführung:

  • jeden Tag um 23:58 (muss vor 12 sein)
  • Mo-Sa um 6:00 (Beginn Tagstrom)
  • Sa um 13:00 (Ende Tagstrom Sa)
  • Mo-Fr um 22:00 (Ende Tagstrom Mo-Fr)

Die Werte die dabei rumkommen sind nicht ideal, aber man bekommt einen groben Eindruck, wo der Strom hingeht. Bei mir zum Beispiel hat sich gezeigt, dass es sich lohnt das Warmwasser um 30 MInuten früher zu machen, da es dann noch mit Nachtstrom gemacht wird.

<?php

$isg_pw="";
$isg_user="";

$cu = curl_init();
curl_setopt($cu, CURLOPT_URL, "http://192.168.178.29/?s=1,0"); // url
curl_setopt ($cu, CURLOPT_POST, 1); // post formular
curl_setopt ($cu, CURLOPT_POSTFIELDS, "make=send&pass=".$isg_pw."&user=".$isg_user."");
curl_setopt($cu, CURLOPT_FOLLOWLOCATION, true); // Location: folgen
curl_setopt ($cu, CURLOPT_COOKIEJAR, 'cookie.txt'); // cookies unterstützen...
curl_setopt ($cu, CURLOPT_RETURNTRANSFER, 1); // ausgabe als string

$website = curl_exec ($cu);
curl_close ($cu);

if (!$website) {
  return;
  }

// Find key value pairs in website
preg_match_all ("|<[^>]+key[^>]+>(.*)<[^>]+>.*
.*<[^>]+value[^>]+>(.*)<[^>]+>|mU", $website, $values);

// Get Old Values from database
$verdichter_heizen_sum  = GetValueFloat(22992 /*[Heizung\THZ\Laufzeiten & Verbrauch\Laufzeit Verdichter Heizen Summe]*/ );
$verdichter_ww_sum      = GetValueFloat(38440 /*[Heizung\THZ\Laufzeiten & Verbrauch\Laufzeit Verdichter Warmwasser Summe]*/ );
$ne_heizen_sum 			= GetValueFloat(46211 /*[Heizung\THZ\Laufzeiten & Verbrauch\Laufzeit Nacherwärmung Heizen Summe]*/ );
$ne_ww_sum 					= GetValueFloat(37870 /*[Heizung\THZ\Laufzeiten & Verbrauch\Laufzeit Nacherwärmung Warmwasser Summe]*/ );
$p_heizen_sum_old			= GetValueFloat(19023 /*[Heizung\THZ\Laufzeiten & Verbrauch\Stromverbrauch Heizen Summe]*/ );
$p_ww_sum_old 				= GetValueFloat(11351 /*[Heizung\THZ\Laufzeiten & Verbrauch\Stromverbrauch Warmwasser Summe]*/ );

$strompreis_NT          = 0.1600;
$strompreis_HT          = 0.2000;
$grundpreis_d           = 0.13; // vereinfacht ohne schlatjarh, Jahresgrundentgeld / 365

$verdichter_heizen 	= 0;
$verdichter_ww 		= 0;
$ne_heizen 				= 0;
$ne_ww 					= 0;
$p_heizen            = 0;
$p_ww                = 0;
$p_heizen_sum        = 0;
$p_ww_sum            = 0;


echo "THZ Heizungsskript - Tägliche Werte
";
echo "2014-10-30

";


for ($i = 0; $i < count($values[1]); $i++)
{
	// Complete Dump of Data
	//echo $values[1][$i] ." ". $values[2][$i]."
";
	switch ($values[1][$i]){
	   case "VERDICHTER HEIZEN":
	   	preg_match("|(\d*) h|", $values[2][$i], $treffer);
	      $verdichter_heizen = (float) preg_replace('|,|','', $treffer[1]);
	      break;
	   case "VERDICHTER WW":
	   	preg_match("|(\d*) h|", $values[2][$i], $treffer);
	      $verdichter_ww = (float) preg_replace('|,|','.', $treffer[1]);
	      break;
      case "ELEKTR. NE HEIZEN":
	   	preg_match("|(\d*) h|", $values[2][$i], $treffer);
	   	$ne_heizen = (float) preg_replace('|,|','.', $treffer[1]);
	      break;
      case "ELEKTR. NE WW":
		   preg_match("|(\d*) h|", $values[2][$i], $treffer);
		   $ne_ww = (float) preg_replace('|,|','.', $treffer[1]);
	      break;
      case "P HEIZUNG TAG":
	   	preg_match("|(\d*,\d*) kWh|", $values[2][$i], $treffer);
	      $p_heizen = (float) preg_replace('|,|','.', $treffer[1]);
	      break;
      case "P HEIZUNG SUMME":
	   	preg_match("|(\d*,\d*) MWh|", $values[2][$i], $treffer);
	      $p_heizen_sum = (float) preg_replace('|,|','.', $treffer[1]) * 1000;
	      break;
      case "P WW TAG":
	   	preg_match("|(\d*,\d*) kWh|", $values[2][$i], $treffer);
			$p_ww = (float) preg_replace('|,|','.', $treffer[1]);
	      break;
      case "P WW SUMME":
	   	preg_match("|(\d*,\d*) MWh|", $values[2][$i], $treffer);
	      $p_ww_sum = (float) preg_replace('|,|','.', $treffer[1]) * 1000;
	      break;
	}
}

// Create new Values
$verdichter_heizen_heute 	= $verdichter_heizen - $verdichter_heizen_sum;
$verdichter_ww_heute 		= $verdichter_ww - $verdichter_ww_sum;
$ne_heizen_heute           = $ne_heizen - $ne_heizen_sum;
$ne_ww_heute               = $ne_ww - $ne_ww_sum;
$p_heizen_calc             = $p_heizen_sum - $p_heizen_sum_old;
$p_ww_calc                 = $p_ww_sum - $p_ww_sum_old;

// Do correction of values - only at the end of the day
if (false && $p_heizen_calc > $p_heizen) {
	echo "Correcting Value P (Heizen) :
";
	echo "THZ p_heizen = ".$p_heizen." kWh
";
	echo "Caculated    = ".$p_heizen_calc." kWh
";
	$p_heizen = $p_heizen_calc;
	}
	
if (false && $_IPS['SENDER'] == "TimerEvent" && $_IPS['EVENT'] == 43236 && $p_ww_calc > $p_ww) {
	echo "Correcting Value P (WW) :
";
	echo "THZ p_ww  = ".$p_ww." kWh
";
	echo "Caculated = ".$p_ww_calc." kWh
";
	$p_ww = $p_ww_calc;
	}

$p_ges = $p_heizen + $p_ww;

// If day of week is sunday, set HT value to 0
if (date('D') == "Sun") {
   // Is Set to 0 if it is not already at 0
   if (GetValueFloat(59127 /*[Heizung\THZ\Laufzeiten & Verbrauch\Stromverbrauch HT]*/ ) != 0.0){
   	SetValueFloat(59127 /*[Heizung\THZ\Laufzeiten & Verbrauch\Stromverbrauch HT]*/ , 0.0);
	}
	$p_HT = 0;
} else {
	$p_HT = $p_ges - GetValueFloat(38900 /*[Heizung\THZ\Laufzeiten & Verbrauch\NT heute]*/ );
}

$p_NT = $p_ges - $p_HT;
$cost_NT = $p_NT * $strompreis_NT;
$cost_HT = $p_HT * $strompreis_HT;
$cost_sum = $cost_NT + $cost_HT + $grundpreis_d;

echo "+----------------------------+-------------+--------------+
";
echo "|                            |    Heute    |    Gesamt    |
";
echo "+----------------------------+-------------+--------------+
";
echo "|          Verdichter Heizen | ".sprintf("%' 7.1f", $verdichter_heizen_heute)." h   | ".sprintf("%' 8.0f", $verdichter_heizen)." h   |
";
echo "|      Verdichter Warmwasser | ".sprintf("%' 7.1f", $verdichter_ww_heute)." h   | ".sprintf("%' 8.0f", $verdichter_ww)." h   |
";
echo "|       Nacherwärmung Heizen | ".sprintf("%' 7.1f", $ne_heizen_heute)." h   | ".sprintf("%' 8.0f", $ne_heizen)." h   |
";
echo "|   Nacherwärmung Warmwasser | ".sprintf("%' 7.1f", $ne_ww_heute)." h   | ".sprintf("%' 8.0f", $ne_ww)." h   |
";
echo "|      Stromverbrauch Heizen | ".sprintf("%' 7.1f", $p_heizen)." kWh | ".sprintf("%' 8.0f", $p_heizen_sum)." kWh |
";
echo "|  Stromverbrauch Warmwasser | ".sprintf("%' 7.1f", $p_ww)." kWh | ".sprintf("%' 8.0f", $p_ww_sum)." kWh |
";
echo "|          Stromverbrauch NT | ".sprintf("%' 7.1f", $p_NT)." kWh | ".sprintf("%' 8.2f", $cost_NT)." €   |
";
echo "|          Stromverbrauch HT | ".sprintf("%' 7.1f", $p_HT)." kWh | ".sprintf("%' 8.2f", $cost_HT)." €   |
";
echo "|         Stromverbrauch Tag | ".sprintf("%' 7.1f", $p_ges)." kWh | ".sprintf("%' 8.2f", $cost_sum)." €   |
";
echo "+----------------------------+-------------+--------------+
";


// Only save values if called by Timerevent
if($_IPS['SENDER'] == "TimerEvent") {
// Check which timer called
	if ($_IPS['EVENT'] == 55813 /*[Skripte\Heizung\Info Heizung Verbrauch\]*/ ) {  // Mo - Sa ab 6 Uhr HT
      // Save $p_heizen into NT
		SetValueFloat(38900 /*[Heizung\THZ\Laufzeiten & Verbrauch\NT heute]*/ , $p_ges);
	}
	
	if ($_IPS['EVENT'] == 48553  ||  // Samstag ab 13 Uhr NT
	    $_IPS['EVENT'] == 33055 /*[Skripte\Heizung\Info Heizung Verbrauch\]*/ ) {  // Mo - Fr ab 22 Uhr NT
	  	// Caller Start of NT
	  	SetValueFloat(59127 /*[Heizung\THZ\Laufzeiten & Verbrauch\Stromverbrauch HT]*/ , $p_HT);
	}

	if ($_IPS['EVENT'] == 43236 /*[Skripte\Heizung\Info Heizung Verbrauch\]*/ ){
	   // Caller for Daily information
		SetValueFloat(33890 /*[Heizung\THZ\Laufzeiten & Verbrauch\Stromverbrauch NT]*/, $p_NT);
	   SetValueFloat(23966 /*[Heizung\THZ\Laufzeiten & Verbrauch\Stromkosten HT]*/ , $cost_HT);
	   SetValueFloat(49318 /*[Heizung\THZ\Laufzeiten & Verbrauch\Stromkosten NT]*/ , $cost_NT);
	   SetValueFloat(38386 /*[Heizung\THZ\Laufzeiten & Verbrauch\Stromkosten Tag]*/ , $cost_sum);
		SetValueFloat(38616 /*[Heizung\THZ\Laufzeiten & Verbrauch\Stromverbrauch Heizen]*/ , $p_heizen);
		SetValueFloat(22232 /*[Heizung\THZ\Laufzeiten & Verbrauch\Stromverbrauch Warmwasser]*/ , $p_ww);
		SetValueFloat(54109 /*[Heizung\THZ\Laufzeiten & Verbrauch\Laufzeit Verdichter Heizen]*/ , $verdichter_heizen_heute);
		SetValueFloat(22140 /*[Heizung\THZ\Laufzeiten & Verbrauch\Laufzeit Verdichter Warmwasser]*/ , $verdichter_ww_heute);
		SetValueFloat(17033 /*[Heizung\THZ\Laufzeiten & Verbrauch\Laufzeit Nacherwärmung Heizen]*/ , $ne_heizen_heute);
		SetValueFloat(26603 /*[Heizung\THZ\Laufzeiten & Verbrauch\Laufzeit Nacherwärmung Warmwasser]*/ , $ne_ww_heute);
		SetValueFloat(37870 /*[Heizung\THZ\Laufzeiten & Verbrauch\Laufzeit Nacherwärmung Warmwasser Summe]*/ , $ne_ww);
		SetValueFloat(46211 /*[Heizung\THZ\Laufzeiten & Verbrauch\Laufzeit Nacherwärmung Heizen Summe]*/ , $ne_heizen);
		SetValueFloat(22992 /*[Heizung\THZ\Laufzeiten & Verbrauch\Laufzeit Verdichter Heizen Summe]*/ , $verdichter_heizen);
		SetValueFloat(38440 /*[Heizung\THZ\Laufzeiten & Verbrauch\Laufzeit Verdichter Warmwasser Summe]*/ , $verdichter_ww);
		#SetValueFloat(19023 /*[Heizung\THZ\Laufzeiten & Verbrauch\Stromverbrauch Heizen Summe]*/ , $p_heizen_sum);
		#SetValueFloat(11351 /*[Heizung\THZ\Laufzeiten & Verbrauch\Stromverbrauch Warmwasser Summe]*/ , $p_ww_sum);
	}
}

?>

Bitte auch beachten: Ich hab nur ein ISG Web für Tecalor an einer THZ303 SOL, Stiebel sollte ähnlich bis gleich sein. Eventuell sind ein paar Namen anders, die müsste man halt dann anpassen.

ISG Version 6.0.0
THZ Version 419

VG
Michael

Nach dem ja nun einige Monate rum sind, seitdem ich meine Scripte für die serielle Kommunikation hier gepostet habe und die wohl auch schon einige Male heruntergeladen wurden, würde mich mal interessieren, ob das bei euch zuverlässig läuft und ob der ein oder andere noch eine interessante Funktion hinzugefügt hat.

Bei mir läuft das jedenfalls stabil und bis auf ein paar Variablennamen habe ich nichts mehr angefasst.

Gruß

Andreas

Hallo Michael,

Ich beisse mir gerade genau an dem was du angedeutet hast die Zähne aus. Ich möchte verschiedene Werte mittels PHP über das ISG setzen (Betriebsart, Lüfterstufe etc.). Kannst du dein Skript hier posten. Es muss nicht perfekt sein. Ich picke mir schon die Rosinen raus.

Und wenn ich gerade dabei bin, ich habe vor einigen Monaten mir aus etlichen Quellen eine Lösung zusammengeklaut um über das ISG die Werte für meine THZ 303 auszulesen. Ähnlich dem von Michael.

Meine ISG Version: v6.1.1
Das Skript sollte leicht an den eigenen Bedarf anpassbar sein. Siehe dazu die kurze Beschreibung zur Funktion ‚leseWertVonHtml‘


<?

$website_source2 = 'http://192.168.178.51/?s=1,0';

$dom = new DOMDocument;

@$dom->loadHTML(file_get_contents($website_source2));
//IPS_LogMessage($_IPS['SELF'], "Encoding: ".$dom->actualEncoding);

leseWertVonHtml ("Heizkreispumpe","",$dom,12325 /*[Energie\Status]*/ ,0);
leseWertVonHtml ("Heizen","",$dom,12325 /*[Energie\Status]*/ ,0);
leseWertVonHtml ("Verdichter","",$dom,12325 /*[Energie\Status]*/ ,0);
leseWertVonHtml ("Schaltprogramm aktiv","",$dom,12325 /*[Energie\Status]*/ ,0);

leseWertVonHtml ("WW-Isttemp.","°C",$dom,52848 /*[Energie\Warmwasser]*/ ,2);
leseWertVonHtml ("WW-Solltemp.","°C",$dom,52848 /*[Energie\Warmwasser]*/ ,2);

leseWertVonHtml ("Raumisttemp. HK1","°C",$dom,27938 /*[Energie\Raumtemperatur]*/ ,2);
leseWertVonHtml ("Raumsolltemp. HK1","°C",$dom,27938 /*[Energie\Raumtemperatur]*/ ,2);

leseWertVonHtml ("Zuluft Ist Lüfterdrehzahl","Hz",$dom,21845 /*[Energie\Lüftung]*/ ,2);


leseWertVonHtml ("Zuluft Soll Volumenstrom","m³/h",$dom,21845 /*[Energie\Lüftung]*/ ,2);
leseWertVonHtml ("Abluft Ist Lüfterdrehzahl","Hz",$dom,21845 /*[Energie\Lüftung]*/ ,2);
leseWertVonHtml ("Abluft Soll Volumenstrom","m³/h",$dom,21845 /*[Energie\Lüftung]*/ ,2);


leseWertVonHtml ("WM Heizen Tag","kWh",$dom,22738 /*[Energie\Wärmemenge]*/ ,2);
leseWertVonHtml ("WM WW Tag","kWh",$dom,22738 /*[Energie\Wärmemenge]*/ ,2);
leseWertVonHtml ("WM WRG Tag","kWh",$dom,22738 /*[Energie\Wärmemenge]*/ ,2);

leseWertVonHtml ("Istwert HK1","°C",$dom,16787 /*[Energie\Heizung]*/ ,2);
leseWertVonHtml ("Sollwert HK1","°C",$dom,16787 /*[Energie\Heizung]*/ ,2);
leseWertVonHtml ("Vorlauftemp.","°C",$dom,16787 /*[Energie\Heizung]*/ ,2);
leseWertVonHtml ("Rücklauftemp.","°C",$dom,16787 /*[Energie\Heizung]*/ ,2);
leseWertVonHtml ("Aussentemperatur","°C",$dom,16787 /*[Energie\Heizung]*/ ,2);

leseWertVonHtml ("Heissgastemp.","°C",$dom,44274 /*[Energie\Wärmepumpe]*/ ,2);
leseWertVonHtml ("Hochdruck","bar",$dom,44274 /*[Energie\Wärmepumpe]*/ ,2);
leseWertVonHtml ("Niederdruck","bar",$dom,44274 /*[Energie\Wärmepumpe]*/ ,2);
leseWertVonHtml ("Verdampfertemp.","°C",$dom,44274 /*[Energie\Wärmepumpe]*/ ,2);
leseWertVonHtml ("Verflüssigertemp.","°C",$dom,44274 /*[Energie\Wärmepumpe]*/ ,2);
leseWertVonHtml ("Fortluft Ist Lüfterdrehzahl","Hz",$dom,44274 /*[Energie\Wärmepumpe]*/ ,2);
leseWertVonHtml ("Fortluft Soll Volumenstrom","%",$dom,44274 /*[Energie\Wärmepumpe]*/ ,2);

leseWertVonHtml ("Verdichter Heizen","h",$dom,18507 /*[Energie\Laufzeiten]*/ ,2);
leseWertVonHtml ("Verdichter WW","h",$dom,18507 /*[Energie\Laufzeiten]*/ ,2);
leseWertVonHtml ("Elektr. NE Heizen","h",$dom,18507 /*[Energie\Laufzeiten]*/ ,2);
leseWertVonHtml ("Elektr. NE WW","h",$dom,18507 /*[Energie\Laufzeiten]*/ ,2);
leseWertVonHtml ("P Heizung Tag","kWh",$dom,18507 /*[Energie\Laufzeiten]*/ ,2);
leseWertVonHtml ("P WW Tag","kWh",$dom,18507 /*[Energie\Laufzeiten]*/ ,2);


/*
Die Funktion aktualisiert den Wert der Variable mit dem Wert auf der Ist/Soll Seite der ISG.
$nameInHtml muss gleich dem Namen des Wertes auf der Webseite sein.
Ist die Variable nicht vorhanden, wird diese unter $instID angelegt.
*/
function leseWertVonHtml ($nameInHtml, $einheitInHtml,$dom,$instID,$type){
	$tds = $dom->getElementsByTagName("td");
	$value="";
	$gefunden=false;
	foreach ($tds as $el) {
		$nv = utf8_decode($el->nodeValue);
		if ($gefunden==true) {
	      $value=$nv;
	      break;
		}
		if (strtoupper($nv) == mb_strtoupper($nameInHtml)) {
			$gefunden=true;
			if ($type == 0) break;
		}
	}
 	if ($type == 0) $value = $gefunden;
	if (!$gefunden) IPS_LogMessage($_IPS['SELF'], $nameInHtml. " nicht gefunden");
	//IPS_LogMessage($_IPS['SELF'], $nameInHtml.": ".$value);

	$exVarID = @IPS_GetVariableIDByName ( $nameInHtml , $instID);

	if ($exVarID  === false) {
		$varID = IPS_CreateVariable ( $type );
	}
	else {
	   $varID = $exVarID;
	}

	IPS_SetParent ($varID,$instID);
	IPS_SetName ($varID, $nameInHtml);
	if ($type == 0) {
	   SetValue($varID, $value);
	} else {
		SetValue($varID, substr($value,0,@strpos($value,$einheitInHtml)));
	}
	
}

?>


Beste Grüße
Pit

Morgen,

Ich werd das Skript erst morgen posten können, weil ich heut erst sehr spät heim komme. Grundsätzlich habe ich aber das Problem, dass das ISG manchmal Werte einfach nicht übernimmt. Da ich das Problem aber auch schon mit der Webversion im Browser habe, denke ich, dass das eher ein ISG Thema ist.

Geplant ist als Workaround, dass man den Wert zurückliest und es dann entsprechend nochmal probiert, wenns nicht funktioniert hat. Im Moment schreib ich einfach alle Änderungen zweimal und hoff, dass es geklappt hat. In (geschätzt) ca 5% der Fälle reicht das aber nicht aus.

VG
Michael

Hallo Michael,

Danke schon einmal für das Skript. Ich habe übrigens die gleichen Probleme. Beim setzen der Lüfterstufe direkt über das Web der ISG werden nicht immer die Werte übernommen. Das Fehlverhalten lässt sich nur schwer nachvollziehen. Auch mit dem Service von Tecalor (Software Update) bin ich nicht weitergekommen.
Setzen der Luftmenge über http://<URL ISG>/?s=4,2 funktioniert aber ohne Probleme.

Ist das bei dir genauso? Oder tritt es auch bei anderen Parametern auf?

Gruß
Pit

Ist bei mir auch bei der Lüfterstufe und bei den Betriebsmodi hab ich’s im ISG Web auch gesehen.

VG
Michael

Minusgrade werden bei der LWZ Leider etwas blöd übertragen. Gibt kein Vorzeichen im Telegramm, daher zählt die LWZ bei unter 0 von 65535 abwärts.

Entsprechend im Script bei den Werten bei denen diese Temperaturen vorkommen können so anpassen:


	  $temp = LWZ_DecodeWord(substr($lwzdata,$i,1),substr($lwzdata,$i+1,1));
	  if($temp > 1000) { $temp =  $temp - 65535; } // Minusgrade
	  $ret["OutsideTemperature"] = $temp / 10;

Betrifft soweit die OutsideTemperature, EvaporatorTemperature, CondenserTemperature und OutsideTemperatureFiltered.

Gruß

Andreas

In meinem Skript gibts an der Stelle auch noch ein Fehler, dadurch werden Minustemperaturen nicht erfasst.

Als Fix den Case mit der Aussentemperatur ändern:


        case "AUSSENTEMPERATUR":
	   	preg_match("|(-?\d*,\d*)|", $values[2][$i], $treffer);
	      SetValueFloat(44760 /*[Heizung\THZ\Heizung\Außentemperatur]*/, (float) preg_replace('|,|','.', $treffer[1]));
	      break;

VG
Michael

Hallo Andreas (Bergdoktor)

Dein Script läuft bei mir 1A. Ich hatte letztes Jahr schon mal damit angefangen und versucht über die Serielle Schnittstelle an der Front meine Tecalor 403 auszulesen, leider ohne Erfolg. Jetzt bin ich durch dich auf die Innenliegeende USB Schnittelle gekommen. Mit deinem Script läuft jetzt alles super, es gibt keine Probleme oder Fehler. Gestern Abend angefangen und gerade eben fertig gemacht. Da kann ich mir die teure Variante von Stiebel Eltron (LanMonitoring…oder wie das Dings auch immer heißt) sparen, obwohl ich die wohl auch nie für diesen Preis gekauft hätte.
Großes Danke an Dich weiter So !!!

Hi,

schön, mal eine Rückmeldung zu bekommen. Vor allem eine positive!

Jetzt kann ich dir nur noch empfehlen dir einen VOC Sensor zuzulegen (USB von Velux z.B.) und darüber dann die Lüftung zu steuern. Da ist die LWZ leider etwas rückständig.

Gruß

Andreas

Hallo Andi,
Voc Sensor habe ich zum ersten mal von gelesen. Ein Voc sensor zur Regelung der Luftqulaität oder wie??? :wink:
Allein Interessehalber würde mich der Sensor schon reizen aber der Nutzen??? Hast du Probleme mit schlechter Luft im Haus ? Ich habe Nachts die Lüfter immer auf Stufe 2 und unter Tags auf 1, verstellt habe ich da bis jetzt noch nichts weil ich recht zufrieden so bin.
Grüße Daniel