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-Code:
<?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[^>]+>(.*)<[^>]+>.*\n.*<[^>]+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]."\n";
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-Code:
<?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[^>]+>(.*)<[^>]+>.*\n.*<[^>]+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\n";
echo "2014-10-30\n\n";
for ($i = 0; $i < count($values[1]); $i++)
{
// Complete Dump of Data
//echo $values[1][$i] ." ". $values[2][$i]."\n";
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) :\n";
echo "THZ p_heizen = ".$p_heizen." kWh\n";
echo "Caculated = ".$p_heizen_calc." kWh\n";
$p_heizen = $p_heizen_calc;
}
if (false && $_IPS['SENDER'] == "TimerEvent" && $_IPS['EVENT'] == 43236 && $p_ww_calc > $p_ww) {
echo "Correcting Value P (WW) :\n";
echo "THZ p_ww = ".$p_ww." kWh\n";
echo "Caculated = ".$p_ww_calc." kWh\n";
$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 "+----------------------------+-------------+--------------+\n";
echo "| | Heute | Gesamt |\n";
echo "+----------------------------+-------------+--------------+\n";
echo "| Verdichter Heizen | ".sprintf("%' 7.1f", $verdichter_heizen_heute)." h | ".sprintf("%' 8.0f", $verdichter_heizen)." h |\n";
echo "| Verdichter Warmwasser | ".sprintf("%' 7.1f", $verdichter_ww_heute)." h | ".sprintf("%' 8.0f", $verdichter_ww)." h |\n";
echo "| Nacherwärmung Heizen | ".sprintf("%' 7.1f", $ne_heizen_heute)." h | ".sprintf("%' 8.0f", $ne_heizen)." h |\n";
echo "| Nacherwärmung Warmwasser | ".sprintf("%' 7.1f", $ne_ww_heute)." h | ".sprintf("%' 8.0f", $ne_ww)." h |\n";
echo "| Stromverbrauch Heizen | ".sprintf("%' 7.1f", $p_heizen)." kWh | ".sprintf("%' 8.0f", $p_heizen_sum)." kWh |\n";
echo "| Stromverbrauch Warmwasser | ".sprintf("%' 7.1f", $p_ww)." kWh | ".sprintf("%' 8.0f", $p_ww_sum)." kWh |\n";
echo "| Stromverbrauch NT | ".sprintf("%' 7.1f", $p_NT)." kWh | ".sprintf("%' 8.2f", $cost_NT)." € |\n";
echo "| Stromverbrauch HT | ".sprintf("%' 7.1f", $p_HT)." kWh | ".sprintf("%' 8.2f", $cost_HT)." € |\n";
echo "| Stromverbrauch Tag | ".sprintf("%' 7.1f", $p_ges)." kWh | ".sprintf("%' 8.2f", $cost_sum)." € |\n";
echo "+----------------------------+-------------+--------------+\n";
// 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