eHZ EMH SML Protokoll auswerten (veraltet kein Support mehr!)

Habe aber irrtümlich das Script gelöscht und mir auch nicht den Code notiert.

Zum Glück, benutzt Du ja IPS und das hat für solche Fälle vorgesorgt. Deine gelöschten Scripts, findest Du im Script Ordner unter deleted. :wink:

@Bernd,

normalerweise gibt EMH überhaupt keine Auskunft an Privatpersonen.

Um nochmal zum parametrieren der Zähler zukommen, dafür gibt es ja Software und ich denke mal, die wenigsten Energieversorger werden wissen wie sie einen Zähler ansteuern. Dafür haben sie ja, wenn überhaupt die Software oder einen Zulieferer der dieses alles übernimmt.

Hallo

Vielen Dank für das Skript. Ich habe jetzt soweit alles angeschlossen und konfiguriert. Leider verstehe ich das mit den OBISkennzahlen noch nicht ganz. Wie muss ich das skript anpassen damit ich die Daten bekomme. ? Ich habe einen EMH eHz

Ich habe mal ein log der RegV /comport angehängt.

Danke schon mal

Oliver

ehz.txt (12.7 KB)

Comdump.txt (13.9 KB)

Ist das alles was da aus dem Zähler kommt. Mehr als 2 mal die Herstellerkennung, ist da nicht drinnen. Keine Daten.

Ich fürchte da kommt dann wohl nicht mehr… Kann das vom Energieversorger beschränkt wurden sein (EWR) ?? bzw. kann man das per „optischer Taste“ einschalten.

Danke

Oliver

Hallo Rainer

Wir haben jetzt durch unsere PV einen neuen Zähler bekommen (Zweirichtungszähler) der hoffentlich etwas gesprächiger ist.
Ich habe mal ein Dump angehängt. Evtl. kannst Du mal „schnell“ drüberschauen.

Vielen Dank

Oliver
dump.txt (181 KB)

Jo, das sieht besser aus. Bezug-Lieferung usw, ist vorhanden. Wenn Du das Script entsprechend anpasst mit den Werten, sollte eigentlich alles funktionieren.

Wenn Du das Script entsprechend anpasst mit den Werten

Ich fürchte da brauche ich ein wenig Hilfe falls möglich.

Danke

Oliver

So
ich bastele nun schon 2 Tage an dem Skript rum, und habe jetzt eine Anzeige der Wirkleistung. War aber wohl eher ein Zufallstreffer. :frowning: Ich werde aus dem SML-Protokoll in zusammenhang mit dem Skript von Rainer nicht schlau…
evtl. hat jemand noch einen Tipp oder So wie ich das Skript anpassen muss um die restlichen Werte zu erhalten. Es handelt sich um einen eHZ von Hager !

Ich will keine „Fertiglösung“ sondern nur etwas Starthilfe um das zu verstehen.

Danke

Oliver

Hallo Oliver,

in meinem Script, stehen doch die Obiszahlen als Hex drinnen. Jetzt suchst Du dir in deinem Code deine raus und trägst sie im Script ein. es sind 1 bis 2 Änderungen nötig statt 1 kommt 2 rein.

Ich kannn heute so ab 20 Uhr mal schauen, dann schreib ich dir es zusammen wenn Du nicht weiter kommst.

Hallo Rainer

wenn Du dafür später Zeit finden würdest, wäre das klasse. Ich stehe grade komplett auf der Leitung.

Danke

Oliver

Update:
Wirkenergie sowie Hersteller ID scheint jetzt zu klappen.
Nur die Zählerstände bekomme ich einfach nicht hin. Es kommen zwar Daten, aber die stimmen nicht mit der Anzeige auf dem Zähler überein.

Das habe ich gefunden:

07| 01 00 00 00 09 FF
07| 01 00 01 08 00 FF
07| 01 00 01 08 01 FF
07| 01 00 01 08 02 FF --> Lieferzähler ?
07| 01 00 02 08 00 FF
07| 01 00 02 08 01 FF
07| 01 00 02 08 02 FF
07| 01 00 0F 07 00 FF --> Wirkleistung gesamt
07| 81 81 C7 82 05 FF --> Herstellerkennung

evtl. hängt es an der umrechnung oder so ?

Oliver

07| 01 00 01 08 00 FF -> Wirk-Energie Total Bezug
07| 01 00 01 08 01 FF -> Wirk-Energie Tarif1 Bezug
07| 01 00 01 08 02 FF --> Wirk-Energie Tarif2 Bezug
07| 01 00 02 08 00 FF -> Wirk-Energie Total Lieferung
07| 01 00 02 08 01 FF -> Wirk-Energie Tarif 1 Lieferung
07| 01 00 02 08 02 FF -> Wirk-Energie Tarif 2 Lieferung
07| 01 00 0F 07 00 FF --> Wirkleistung gesamt
07| 81 81 C7 82 05 FF --> Herstellerkennung

Hallo Rainer

Vielen Dank für die Zuordnung. Leider sind die Werte für die Zählerstände die ich bekomme nicht die der Zähler anzeigt.

Bsp. Zählerstand Bezug: 257 kWh --> laut Skript 1009,00 kWh.

Ich glaube irgendwas habe ich noch nicht verstanden… Sorry

Oliver

Stell doch dein Script mal rein und lass mich nicht immer raten.

Das Script im ersten Post, sollte doch passen bis auf die Lieferung oder nicht.?

Edit: Hab mir grad mal deinen Dump angesehen, ist doch etwas anderst. Die Stellen, sind teilweise verschoben. Folglich muss substr angepasst werden.

Hallo Rainer

Danke für deine Hilfe

Hier ist mein(Dein)Script

<?

  if($_IPS['SENDER'] == "RegisterVariable")
{
    // HerstellerID Obiskennung:129-129.199.130.3*255 Hex:81 81 C7 82 05 FF
    if(strpos($_IPS['VALUE'], chr(0x81).chr(0x81).chr(0xC7).chr(0x82).chr(0x05).chr(0xFF)) !== false)
    {
        $herstellerID = explode(chr(0x81).chr(0x81).chr(0xC7).chr(0x82).chr(0x03).chr(0xFF), $_IPS['VALUE']);
        SetValue(22224 /*[Keller\Technikraum\EHz\ID]*/, substr($herstellerID[1], 5, 3));
    }
    else
    {
       LogMessage();
    }

    // Zählerstand (Wirk-Energie Total Bezug) Obiskennung:1-0.1.8.0*255 Hex:01 00 01 08 00 FF
    if(strpos($_IPS['VALUE'], chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x01).chr(0xFF)) !== false)
    {
       $zaehlerstand = explode(chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x01).chr(0xFF), $_IPS['VALUE']);
       SetValue(14844 /*[Keller\Technikraum\EHz\Zählerstand 1]*/, hexdec(Str2Hex(substr($zaehlerstand[1], 9, 5)))/10000);
    }
    else
    {
       LogMessage();
    }

    // Wirkleistung (Wirk-Leistung Total) Obiskennung:1-0.15.7.0*255 Hex:01 00 0F 07 00 FF
    if(strpos($_IPS['VALUE'], chr(0x01).chr(0x00).chr(0x0F).chr(0x07).chr(0x00).chr(0xFF)) !== false)
    {
       $wirkleistung = explode(chr(0x01).chr(0x00).chr(0x0F).chr(0x07).chr(0x00).chr(0xFF), $_IPS['VALUE']);
       SetValue(10516 /*[Keller\Technikraum\EHz\Wirkleistung Roh]*/, hexdec(Str2Hex(substr($wirkleistung[1], 7, 4))));
    }
   else
    {
       LogMessage();
    }

    // Bezug Tarif 1 (Wirk-Energie Tarif 1 Bezug) Obiskennung:1-0.1.8.1*255 Hex:01 00 02 08 00 FF
   if(strpos($_IPS['VALUE'], chr(0x01).chr(0x00).chr(0x02).chr(0x08).chr(0x00).chr(0xFF)) !== false)
    {
        $bezugTarif1 = explode(chr(0x01).chr(0x00).chr(0x02).chr(0x08).chr(0x00).chr(0xFF), $_IPS['VALUE']);
        SetValue(51318 /*[Keller\Technikraum\EHz\Zählerstand 2]*/, hexdec(Str2Hex(substr($bezugTarif1[1], 7, 5)))/10000);
    }
    else
    {
       LogMessage();
    }
}

function Str2Hex($daten)
{
    $hex = "";
     for($i=0; $i<strlen($daten); $i++)
   $hex .= sprintf("%02X ", ord($daten[$i]));
     return $hex;
}

function LogMessage()
{
    // Fehlermeldung nach logs schreiben
    $log = IPS_GetKernelDir()."logs\\Error eHZ_EMH.txt";
    $fp = fopen($log, "a");
    fwrite($fp, date("H:i:s ")."Datenlaenge: ".strlen($_IPS['VALUE'])." Daten: ".Str2Hex($_IPS['VALUE'])."
");
    fclose($fp);
}
?>

Danke

Oliver

Hier mal angepasst. Lieferung musst Du noch dazu machen. Ist dann auch 11,8

Testen und Vollzug melden. :wink:

<?

if($_IPS['SENDER'] == "RegisterVariable")
{
    // HerstellerID Obiskennung:129-129.199.130.3*255 Hex:81 81 C7 82 03 FF
    if(strpos($_IPS['VALUE'], chr(0x81).chr(0x81).chr(0xC7).chr(0x82).chr(0x03).chr(0xFF)) !== false)
    {
        $herstellerID = explode(chr(0x81).chr(0x81).chr(0xC7).chr(0x82).chr(0x03).chr(0xFF), $_IPS['VALUE']);
        SetValue(50710 /*[eHZ\SML\Hersteller]*/, substr($herstellerID[1], 5, 3));
    }
    else
    {
       LogMessage();
    }

    // Zählerstand (Wirk-Energie Total Bezug) Obiskennung:1-0.1.8.0*255 Hex:01 00 01 08 00 FF
    if(strpos($_IPS['VALUE'], chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x00).chr(0xFF)) !== false)
    {
       $zaehlerstand = explode(chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x00).chr(0xFF), $_IPS['VALUE']);
       SetValue(35552 /*[eHZ\SML\Zählerstand]*/, hexdec(Str2Hex(substr($zaehlerstand[1], 11, 8)))/10000);
    }
    else
    {
       LogMessage();
    }

    // Wirkleistung (Wirk-Leistung Total) Obiskennung:1-0.15.7.0*255 Hex:01 00 0F 07 00 FF
    if(strpos($_IPS['VALUE'], chr(0x01).chr(0x00).chr(0x0F).chr(0x07).chr(0x00).chr(0xFF)) !== false)
    {
       $wirkleistung = explode(chr(0x01).chr(0x00).chr(0x0F).chr(0x07).chr(0x00).chr(0xFF), $_IPS['VALUE']);
       SetValue(45421 /*[eHZ\SML\Wirkleistung]*/, hexdec(Str2Hex(substr($wirkleistung[1], 7, 4)))/10);
    }
   else
    {
       LogMessage();
    }

    // Bezug Tarif 1 (Wirk-Energie Tarif 1 Bezug) Obiskennung:1-0.1.8.1*255 Hex:01 00 01 08 01 FF
   if(strpos($_IPS['VALUE'], chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x01).chr(0xFF)) !== false)
    {
        $bezugTarif1 = explode(chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x01).chr(0xFF), $_IPS['VALUE']);
        SetValue(31449 /*[eHZ\SML\Bezug Tarif 1]*/, hexdec(Str2Hex(substr($bezugTarif1[1], 7, 8)))/10000);
    }
    else
    {
       LogMessage();
    }

    // Bezug Tarif 2 ((Wirk-Energie Tarif 2 Bezug) Obiskennung:1-0.1.8.2*255 Hex:01 00 01 08 02 FF
    if(strpos($_IPS['VALUE'], chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x02).chr(0xFF)) !== false)
    {
        $bezugTarif2 = explode(chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x02).chr(0xFF), $_IPS['VALUE']);
        SetValue(11116 /*[eHZ\SML\Bezug Tarif 2]*/, hexdec(Str2Hex(substr($bezugTarif2[1], 7, 8)))/10000);
    }
   else
    {
       LogMessage();
    }
}

function Str2Hex($daten)
{
    $hex = "";
     for($i=0; $i<strlen($daten); $i++)
   $hex .= sprintf("%02X ", ord($daten[$i]));
     return $hex;
}

function LogMessage()
{
    // Fehlermeldung nach logs schreiben
    $log = IPS_GetKernelDir()."logs\\Error eHZ_EMH.txt";
    $fp = fopen($log, "a");
    fwrite($fp, date("H:i:s ")."Datenlaenge: ".strlen($_IPS['VALUE'])." Daten: ".Str2Hex($_IPS['VALUE'])."
");
    fclose($fp);
}
?>

VOLLZUG

Es klappt :smiley:

Vielen vielen Dank für deine Geduld und Zeit

oliver

Hallo Rainer, ich nochmal

gibt es eigentlich eine Unterscheidung zwischen Lieferung oder Bezug bei der Wirkleistung ?? Wenn eingespeist wird, müsste doch eigentlich ein(-) oder so vorangestellt sein.??

Danke nochmal

Oliver

Jaaaaaa … Es funktioniert.
Ich gebe zu dass ich eher „ich habe es verstanden“ schreiben müsste. Danke für die vorangegangene Arbeit.

Hallo zusammen,

ich habe mal das letzte Auswertescript in meiner IPS eingebunden. Ich bekommen vom Cutter auch ordentlich Daten geliefert aber ich bekomme keine Werte zu den Variablen.
Mein Zähler ist ein Zweirichtungszähler von EMH (eHZ-HW8E2A5L0EQ2P)
Ich hab mal mein Dump angehängt. Was könnte falsch sein?

Viele Grüße
Heuser

dump.txt (8.06 KB)