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

Hi, hab dir anhand dieser Anleitung: http://wiki.volkszaehler.org/hardware/channels/meters/power/edl-ehz/emh-ehz-h1 mal Deinen dump „auseinandergenommen“: dump_heuser.txt (1.46 KB)
Ist eigentlich alles drin. Jetzt muss Du nur noch das script an deine Daten anpassen.

Viele Grüße

Michael

Hallo Michael,
ich habe das Script eigentlich angepasst (Siehe Bild und Script).
Die Objekte sind auch alle ok. Ich könnet mir noch vorstelle, das die im Cutter eingesetzten Trennzeichen nicht passen. Hab da lt. Anleitung für den linken 01 01 01 01 und für den rechten 1B 1B 1B 1B angegeben.
Ich bin absolut ratlos.

Grüße
Heuser

<?

if($_IPS[‚SENDER‘] == „RegisterVariable“)
{
// HerstellerID Obiskennung:129-129.199.130.3255 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(54217 /
[eHz\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(22578 /*[eHz\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(54370 /*[eHz\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(15559 /[eHz\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(31792 /*[eHz\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);
}
?>

Richtig. Da die „message“ mit 1B 1B 1B 1B 01 01 01 01 beginnt funktioniert das so nicht. Ich habe (glaube ich) links 1B 1B 1B 1B 01 01 01 01 und rechts 1B 1B 1B 1B. Muss das zu Hause aber nochmal nachschauen.

Hab alles jetzt nochmal völlig neu eingegeben. Wieder nicht in den Floats. Muß nicht im Debug der Register Variable auch ein Datenstrom zu sehen sein? Da ist nämlich nichts.
Der Verlauf:
eHz Client Socket mit IP und Port. (Datenstrom im Debug vorhanden)
dann
eHz Cutter übergeordnet eHz Client Socket (Datenstrom im Debug vorhanden)
dann
Register Variable - übergeordnet eHz Cutter - Ziel ID Auswertescript (kein Datenstrom im Debug vorhanden)

Wo ist der Fehler???:confused:

Deine Cutter Einstellungen sind so korrekt. Alles was der Cutter mit sendchunk rausschickt, muss in der Regvar ankommen. Sicher, dass der richtige Cutter ausgewählt ist.

Ja Rainer, die Verbindung ist zum richtigen Cutter eingestellt. Dann liegt das Problem wohl zwischen Cutter und der RegVar.
Gibt es noch irgendeine verborgene Einstellung im Cutter die ich anpassen muß?
Hab folgendes in der Logs gefunden:

20.03.2013 17:57:53.210 | 12412 | WARNING | Cutter | Truncating buffer to lastest 64kb
20.03.2013 17:57:54.676 | 12412 | WARNING | Cutter | Buffer is >8kb
20.03.2013 17:57:54.676 | 12412 | WARNING | Cutter | Truncating buffer to lastest 64kb
20.03.2013 17:57:54.707 | 12412 | WARNING | Cutter | Buffer is >8kb
20.03.2013 17:57:54.707 | 12412 | WARNING | Cutter | Truncating buffer to lastest 64kb
20.03.2013 17:57:56.174 | 12412 | WARNING | Cutter | Buffer is >8kb
20.03.2013 17:57:56.174 | 12412 | WARNING | Cutter | Truncating buffer to lastest 64kb
20.03.2013 17:57:56.205 | 12412 | WARNING | Cutter | Buffer is >8kb
20.03.2013 17:57:56.205 | 12412 | WARNING | Cutter | Truncating buffer to lastest 64kb
20.03.2013 17:57:57.656 | 12412 | WARNING | Cutter | Buffer is >8kb
20.03.2013 17:57:57.656 | 12412 | WARNING | Cutter | Truncating buffer to lastest 64kb
20.03.2013 17:57:57.687 | 12412 | WARNING | Cutter | Buffer is >8kb
20.03.2013 17:57:57.687 | 12412 | WARNING | Cutter | Truncating buffer to lastest 64kb
20.03.2013 17:57:59.153 | 12412 | WARNING | Cutter | Buffer is >8kb
20.03.2013 17:57:59.153 | 12412 | WARNING | Cutter | Truncating buffer to lastest 64kb
20.03.2013 17:57:59.184 | 12412 | WARNING | Cutter | Buffer is >8kb
20.03.2013 17:57:59.184 | 12412 | WARNING | Cutter | Truncating buffer to lastest 64kb
20.03.2013 17:58:00.651 | 12412 | WARNING | Cutter | Buffer is >8kb
20.03.2013 17:58:00.651 | 12412 | WARNING | Cutter | Truncating buffer to lastest 64kb
20.03.2013 17:58:00.682 | 12412 | WARNING | Cutter | Buffer is >8kb
20.03.2013 17:58:00.682 | 12412 | WARNING | Cutter | Truncating buffer to lastest 64kb
20.03.2013 17:58:02.148 | 12412 | WARNING | Cutter | Buffer is >8kb
20.03.2013 17:58:02.148 | 12412 | WARNING | Cutter | Truncating buffer to lastest 64kb
20.03.2013 17:58:02.180 | 12412 | WARNING | Cutter | Buffer is >8kb
20.03.2013 17:58:02.180 | 12412 | WARNING | Cutter | Truncating buffer to lastest 64kb

Die Daten werden abgeschnitten, da zu groß. Allerdings, sollten die Daten vom Zähler die Grenze nicht erreichen. Start mal deinen Dienst neu.

Den Dienst hatte ich schon mehrfach neu gestartet. Kann es sein, das der eHz zu große Datenmengen liefert? Was ist, wenn man die Daten buffert?

Neue Beobachtung:
Sobald ich das rechte Trennzeichen im Cutter entferne, sprudeln die Daten.
Setze ich wieder 1B 1B 1B 1B, ist wieder Funkstille.

Der Cutter buffert ja aber nur bis zu einer gewissen Größe. Das kann man auch nicht ändern. Laut deinem Dump vom Cutter, gehen die Daten auch sauber raus.

Was steht denn bei SENDCHUNK im Debug vom Cutter für eine Länge ganz rechts.

Der Datenstrom hat im Client Socket unter RECEIVED eine Länge von 719 und 98
und im Cutter Receiver Data Länge 98 und 71, im CURRENTBUFFER 65536

Man kann beobachten wie der Buffer im Cutter mit +719 bis 65536 vollläuft.

So, der Cutter läuft und ich bekomme nun Daten zur RegVar. Leider ergibt das Auswertescript nach der Ausführung kein Auswertung. Mir scheint es, als könnte das Script mit den an der RegVar vorlliegenden Daten nichts anfangen kann. Hat jemand eine Idee?
Anbei die Dumb-Datei.

Danke
Heuser

dump.txt (5.7 KB)

Du wirst da substr noch ein bischen anpassen müssen, ich habs mir nicht angesehen und im Moment auch keine Zeit dazu.

Hab mal schnell über den Dump gesehen. Sollte mit den Einstellungen aus Post 1 passen. 9,5 und 7,5

Hallo Rainer,
erstmal 1000 Dank für deine Unterstützung.
Ich hab die Einstellungen aus Post 1 übernommen. Gleiche Ergebnis wie vorher. Die Floats bleiben leer. :frowning:

Hm, habs grad mal durch mein Testscript laufen lassen, hier funktioniert es.

aus deinem Dump:

Bezug 1: 8474,16 KWh
Bezug 2: 1,02 KWh
Zählerstand: 8475,18 KWh
Wirkleistung: 3601,70 W
Lieferung 1: 5262,06 KWh

Vielleicht habe ich einen Denkfehler drin. Kannst Du mir das Testscript mal zukommen lassen? Ich bin langsam Betriebsblind geworden. :wink:

Dazu musst Du aber einige Instanzen anlegen. Das gibt vielleicht nur noch mehr durcheinander.

Wenn Du willst, schau ich mir das ganze mal per Teamvierwer an. Daten dann per PM.

Rainer,
hier ist der richtige Dump

dump .txt (12.8 KB)