Elektronische Haushalts Zähler [eHZ] auslesen

die Zeile musst Du ersetzen.

$string = explode("
", trim($IPS_VALUE));

Ansonsten wird es bei dir nicht funktionieren.

Danke Rainer,

habe noch kein Netz auf dem Bau und werde das gleich heute abend einbauen. Was mich gewundert hat, ist, das die Variablen trotz der Fehler scheinbar richtig aktualisiert wurden. Siehe auch Screenshot von der Baumansicht, oder habe ich da einen Denkfehler?

Gr, Stromer

Wichtig sind die Kennzahlen die von deinem Zähler kommen. Nicht jeder Netzbetreiber bietet alles an.

Hallo Reiner,

habe mal die 2 Zähler mit Hterm ausgelesen und bin nun am suchen, wo ich die Zuordnung der Obis Kennzahlen zu den Nummern finde. Manches kann man zwar erraten, aber irgendwo gibts bestimmt eine detailierte Liste.
Beim zweiten Zähler sind das bestimmt:

  1. Zählernummer
  2. Tarif 1
  3. Tarif 3
    aber dann bin inch verlassen.

Kannst Du mir weiterhelfen?

Ist das SML oder ein anderes System?
Danke, Stromer

Haushaltszähler:
/HAG5eHZ010C_IEnBWA02

1-0:0.0.0255(20845619)
1-0:1.8.0
255(000047.1041)
1-0:96.5.5255(82)
0-0:96.1.255
255(0000154767)
1-0:32.7.0255(217.41V)
1-0:52.7.0255(217.05V)
1-0:72.7.0255(218.22V)
1-0:31.7.0255(000.30A)
1-0:51.7.0255(000.69A)
1-0:71.7.0255(000.18A)
1-0:21.7.0255(+00020W)
1-0:41.7.0255(+00124W)
1-0:61.7.0255(+00006W)
1-0:96.50.00(EE)
1-0:96.50.0
1(07D2)
1-0:96.50.02(15)
1-0:96.50.0
3(09)
1-0:96.50.04(21)
1-0:96.50.0
5(13)
1-0:96.50.06(003D381B020BEFF02203A80200009F80)
1-0:96.50.0
7(00)
!

Wärmepumpenzähler:
/EMH5----eHZ-E0028E

1-0:0.0.0255(20654562)
1-0:1.8.1
255(000003.5428) - Schwachlast
1-0:1.8.2255(000002.0105) - Nichtschwachlast
1-0:96.5.5
255(0100)
0-0:96.1.255*255(0002393577)
!

Hier mal von Hager.

http://download.hager.com/Hager.de/files_download/aktuelles/ehz/ehz_betriebsanleitung_mid.pdf

Hallo Rainer,

anbei der aktuelle Stand zum eHZ1 - Der Haushaltszähler. Das Script bringt leider immer noch Fehler sh. Anhang.
Mit dem Verarbeiten von Arrays bin ich leider noch nicht so weit.

Habe ich ev. bei den Variablentypen Fehler drin?

<?
$eHZdata = array("1-0:0.0.0*255" => 50333, // Zaehlernummer
		 "1-0:1.8.0*255" => 43029, // aktueller Zaehlerstand
		"1-0:96.5.5*255" => 56189, // Status Hex
                "0-0:96.1.255*255" => 28514, // Fabriknummer
                "1-0:32.7.0*255" => 10358, // Spannung L1
                "1-0:52.7.0*255" => 39458, // Spannung L2
                "1-0:72.7.0*255" => 46118, //Spannung L3
                "1-0:31.7.0*255" => 30356, //Strom L1
                "1-0:51.7.0*255" => 41944, // Strom L2
                "1-0:71.7.0*255" => 15036, // Strom L3
                "1-0:21.7.0*255" => 51462, // Wirkleistung L1
                "1-0:41.7.0*255" => 52669, // Wirkleistung L2
                "1-0:61.7.0*255" => 15335, // Wirkleistung L3
                "1-0:96.50.0*0" => 15675, // Netzstatus bitcodiert (Drehfeld, Anlaufschwelle, Energierichtung) (EE)
                "1-0:96.50.0*1" => 52567, // Netz-Periode, Hex, 1/100 ms (07D2)
                "1-0:96.50.0*2" => 27586, // aktuelle Chiptemperatur Hex Celsius (15)
                "1-0:96.50.0*3" => 13031, // minimale Chiptemperatur(09)
                "1-0:96.50.0*4" => 59512, // gemittelte Chiptemperatur(21)
                "1-0:96.50.0*5" => 52063, // maximale Chiptemperatur(13)
                "1-0:96.50.0*6" => 26300, // Kontrollnummer(003D381B020BEFF02203A80200009F80)
                "1-0:96.50.0*7" => 50718, // Diagnose(00)
                 );

$Netzperiodendauer = 52567 /*[13 eHZ1 Haushalt\Netz-Periode]*/; // VariablenID der Obis Kennzahl der Netzperiodendauer
$var1 = 50718 /*[13 eHZ1 Haushalt\Diagnose]*/; // Diagnose
$var2 = 15675 /*[13 eHZ1 Haushalt\Netzstatus]*/; // Netzstatus
$var3 = 56189 /*[13 eHZ1 Haushalt\Status]*/; // Status

//Dateneingang von Registervariable
$string = explode("
", trim(RegVar_GetBuffer(16961 /*[13 eHZ1 Haushalt\eHZ1 Register Variable]*/)));
for($i = 0; $i < count($string); $i++)
{
    $id = strstr($string[$i], "(", true);
    $value = strstr($string[$i], "(");
    $check = strpos($value, "*");
    if($check !== false)
    {
       $value = strstr($value, "*", true);
        $data = substr($value, 1);
        SetValue($eHZdata[$id], number_format((float)$data, 2, ',', ''));
    }
    else
    {
        $data = substr(trim($value), 1, -1);
        if(strlen($data) <= 4)
        {
           if($eHZdata[$id] == $Netzperiodendauer)
            {
               $data = hexdec($data)/100;
            }
            elseif(($eHZdata[$id] == $var1) || ($eHZdata[$id] == $var2))
            {
               $data = $data;
            }
            else
            {
               $data = hexdec($data);
            }
          }
        SetValue($eHZdata[$id], (float)$data);
    }
}
$wirk_gesamt = GetValue(51462 /*[13 eHZ1 Haushalt\Wirkleistung L1]*/) + GetValue(52669 /*[13 eHZ1 Haushalt\Wirkleistung L2]*/) + GetValue(15335 /*[13 eHZ1 Haushalt\Wirkleistung L3]*/);
SetValue(19726 /*[13 eHZ1 Haushalt\Wirkleistung Summe]*/,$wirk_gesamt);
?>

Fehler:
Notice: Undefined offset: 0 in C:\IP-Symcon\scripts\46568.ips.php on line 48
Notice: Undefined offset: 0 in C:\IP-Symcon\scripts\46568.ips.php on line 52
Notice: Undefined offset: 0 in C:\IP-Symcon\scripts\46568.ips.php on line 52
Notice: Undefined offset: 0 in C:\IP-Symcon\scripts\46568.ips.php on line 61
Warning: Variable #0 existiert nicht in C:\IP-Symcon\scripts\46568.ips.php on line 61

Analog dazu habe ich den eHZ2 - den Wärmepumpenzähler aufgebaut. Ähnliche Probleme aber eniger Variablen :wink:

<?
$eHZdata = array("1-0:0.0.0*255" => 43350, // Zaehlernummer
					 "1-0:1.8.1*255" => 18930, // NT Niedertarif
					 "1-0:1.8.2*255" => 55979, // HT Hochtarif
					 "1-0:96.5.5*255" => 30324, // Status Hex
					 "0-0:96.1.255*255" => 10873, // Fabriknummer
					  );

//Dateneingang von Registervariable
$string = explode("
", trim(RegVar_GetBuffer(54020)));
echo "String: $string
";

for($i = 0; $i < count($string); $i++)
{
    $id = strstr($string[$i], "(", true);
    $value = strstr($string[$i], "(");
    $check = strpos($value, "*");
    if($check !== false)
    {
       $value = strstr($value, "*", true);
        $data = substr($value, 1);
        SetValue($eHZdata[$id], number_format((float)$data, 2, ',', ''));
    }
    else
    {
        
        SetValue($eHZdata[$id], (float)$data);
    }
}
$verbrauch_gesamt = GetValue(18930) + GetValue(55979);
SetValue(19730,$verbrauch_gesamt);
?>

Fehler:
String: Array
Notice: Undefined offset: 0 in C:\IP-Symcon\scripts\42056.ips.php on line 27
Notice: Undefined variable: data in C:\IP-Symcon\scripts\42056.ips.php on line 27
Warning: Variable #0 existiert nicht in C:\IP-Symcon\scripts\42056.ips.php on line 27

Für was hab ich dir denn das andere Script gepostet, bestimmt nicht dazu, dass Du das alte wieder verwendest. :confused:

Ich hab mir jetzt mal die Arbeit gemacht und deine Daten getestet. Mit dem von mir geposteten Script, funktioniert es einwandfrei.

Man hat ja auch sonst nichts zutun. :rolleyes:

Bei uns wurden früher solche Leute zum Aktivist der sozialistischen Arbeit gemacht.

===> Aktivist der sozialistischen Arbeit

:D:D:D

Hallo Rainer,

erstmal vielen Dank für Deine Mühe. War heute den ganzen Tag am Bau und konnte mich nicht drum kümmern. Mein Fehler, ich habe in Dein Script oben meine Variablen in das Array eingebaut. Und zwar alle die der Zähler liefert. War das ein Denkfehler?
Morgen nehme ich Dein komplettes Script und änderen nur noch die ID’s auf meine Variablen.
Meine zweiten Zähler will ich allein schaffen, tue mir aber sehr schwer mir den Funktionen zum Isolieren von Daten in den Strings und wie Du dann in der Schleife die Variablen füllst.

Gute Nacht und nochmals Danke nach Nidda,
Aktivist kommt von Aktiv :wink:
Grüße, Stromer

… oder „verdienter Traktorist des Volkes“…:smiley:

Hallo Herr Steiner,

mittlerweile ist ein halbes Jahr vergangen. Alle jetzt neu installierte Zähler haben SML. Hat sich beim IPS Team in dieser Sache etwas getan? Gibt es einen neuen Stand, bzw, wird daran eventuell doch gearbeitet?

Herzliche Grüße, Stromer

Hast Du die Integration schon hinbekommen … ansonsten nochmals melden.

Hallo zusammen,

ich habe seit kurzem nun auch ein EHZ-Zähler. Foto im Anhang.

Ich habe diesen und auch andere Thread durchgelesen.
Es hängt bei mir noch ander Schnittstelle um überhaupt irgendwas aus dem Zähler rauszukitzeln. Ich habe einen EMH-Zähler „SML-EDL21-Smart“.

Ich habe versucht den per selbst gelötetem seriellem (Nullmodem-)-Kabel auszulesen. Bei mir kommt noch nichts rein.

Steckerbelegung:
EMH --> COM1
2 --> 3
3 --> 2
4 --> 4
5 --> 5

Frage:
Kommt an dem rückseitig hochgeführten Anschluss überhaupt was „lesbares“ raus? Brauch ich evtl. ein komplett belegtes Nullmodemkabel?

Merci vielmools

Kommt an dem rückseitig hochgeführten Anschluss überhaupt was „lesbares“ raus?

Das das Teil SML spricht, kommt da nix lesbares raus. Ansonsten wird die hintere Schnittstelle wie RS232 behandelt.

Für etwa 80 Euro gibt es im Web einen optischen Kommunikationskopf nebst Software „Cockpit“. Wenn Interesse besteht - habe so ein Teil bei mir noch neu und unbenutzt rumliegen. Mein EHZ war leider nicht sehr kooperativ…

Hallo RWN ,

bin über Google auf diesen sehr interessanten Beitrag gestoßen weil ich seit kurzem auch Besitzer eines Hager EHZ (361) bin ,und nach einer Lösung suche meine Daten aufzuzeichnen bzw. auszuwerten .
Ich besitze den Optischeninfrarotkopf und com1 modul der Firma co-met mit hilfe der ich die Daten per URL wenn benötigt auslesen kann , was über z.B den kostenlosen Iphone App auch möglich ist das heißt über einen link auf das com1 moduls bekomme ich die Datentelegramme übers netzwerk/internet wohin ich sie haben will ( http:// IP_des_com1_moduls:port) .

Jetzt meine Frage an dich wie bekomme ich die Daten in dein PHP script ???

ist das deine Datenübergabe von der RS232 ???

Genau, so ist es. Da ist allerdings noch ein Cutter dazwischen.

Danke RWN für die schnelle Antwort ,was meinst du mit dem Cutter?
ich habe versucht über file_get_contents auf die Daten zu kommen aber irgendwas mache ich falsch :slight_smile:

$homepage = file_get_contents(‚http://www.example.com/‘);

ist es eigentlich möglich die Daten Telegramme direkt in eine Datenbank einzulesen ?

MfG
Toni