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

Hallo zusammen,

ich überarbeite grade die ganze Auswertung. Die ganze Sucherei und Anpassung geht mir auf die Nerven.

Wer hätte denn Interesse zum testen bei Bereitstellung seiner Daten(HexDump) und Angabe des Zählers sowie passenden Werten zum Dump.

Wie lest ihr die Daten aus. Seriell, Netzwerk…oder…

Wenn es so funktioniert wie ich mir das vorstelle, mach ich eventuell ein Modul mit allen was dazu gehört.

Erste Versuche sehen gut aus.:smiley:

Ich … hier … ICH! :smiley:
Ich würde Dich gerne unterstützen wollen. Was steht an?

Übrigens … da kommt Ihr nie drauf.
Ich habe ja einen neuen Zähler bekommen. Den konnte ich irgendwie nicht auslesen und wenn da was raus kam, dann nur Blödsinn. Mein Netzanbieter ist die Westnetz (ehemals RWE). Ich habe mir spaßeshalber mal einen EDL21 PIN Code geordert. Vorhin habe ich ihn eingetragen. Vorher 368 Zeichen (byte); nun 388 Zeichen (byte)
UND alle obis Kennzahlen führen nun Werte!!! All die Arbeit für die Katz -> PIN rein; Werte raus. Krass

Hi,

hab auch gerade einen neuen Zähler gesetzt bekommen; leider aus der Tschechei und vermutlich alles andere als „redefreundlich“.

Seit 2004 drum gebettelt, auch trotz der neuen Gesetze zwischendurch nie einen Wechsel erreicht und nu kommt aus meiner Sicht Müll,
mit den Zielen des Gesetzes überhaupt nicht in Einklang zu bringen; ein Diktat der Versorger:
für kaum was zu gebrauchen!

BTW: passt auf beim Wechsel:
der vorletzte wollte unter Last alle Schrauben lösen und den dann abziehen;
ist zwischendurch der Null in der Luft gewinnt die schwächste Phase volle 400 Volt;
und alle Elektronik krepiert!
Diesmal hab ich ihn zu Anfang gefragt ob er genau so „mutig“ sein wollte;
er begriff sehr schnell und fragte nach dem Hausanschlusskasten;
zog dort dann die entsprechenden Sicherungen.

Welche Daten kommen denn nun rein?

Was ich erwarte sind:
Leistung, bzw. Strom oder irgend was bezüglich der einzelnen Phasen
dito dazu den cos phi jeder einzelnen Phase

Warum wir es erwarten sollten:
moderne Modulwechselrichter für Photovoltaikanlagen (die MickyMouse für den Eigenbedarf) besitzen die Möglichkeit auch den cos anzupassen, neben der Maximalleistung.
Da bei einigen „SmartMetern“ die sogenannte Rücklaufsperre nicht für alle 3-Phasen als Summe berechnet wird (wie bei den alten Ferrari Zählern), und somit in der Praxis 3 getrennte Rücklaufsperren für jede Phase vorhanden sind (falsch, juristisch besser: sein könnten) wird der Kunde „wirtschaftlich inkorrekt behandelt“; um es im Juristenlatein sehr vorsichtig auszudrücken! HIER hab ich was zu gefunden.

Und wenn man auf Heise.de dann noch die Vergleiche der Zählerzwischen den einzelnen eingesetzten Sensorarten liest; dann ist man doch verwundert dass manche überhaupt es geschafft haben eine Zulassung zu erhalten (die Lastunterschiede zwischen Schaltnetzteilen und ohmscher Last sind anscheinend nicht Bestandteil der Prüfnorm). Glückwunsch an die Nutzer elektronisch geregelter Durchlauferhitzer.

Um überhaupt eine Basis zu schaffen sind folgende Informationen an Rainer dringendst erforderlich bezüglich der eingesetzten Zähler:

Hersteller
Modell
per PM Seriennummer
Netzbetreiber
Installationsdatum
verwendete Kommunikationsschnittstelle
dazu verwendete Hardware zur Kommunikation zu IPS
Kommunikationsparameter
was kommt an
dito nach der Eingabe der PIN

und dann hätten wir anhand der Daten die Möglichkeit zu ermitteln:
WAS stand im Auftrag zu o.g. Themen in der Bestellung an den Zählerlieferanten!

Mein privat bezahlter EMH Zähler sitzt in Reihe zum Versorgerzähler; ist seit Juni 2012 in Betrieb und obwohl er mein Eigentum ist, ich eine Rechnung von comet vorlegen konnte weigerte sich EMH (die sitzen quasi bei mir um die Ecke) zusätzliche Daten per Software frei zu schiessen. Der liefert Zählerstand und glücklicherweise den Momentanverbrauch über alle 3 Phasen; aber nicht mehr!

Der Carlo Gavazzi, welchen ich bei meinem ehemaligen Arbeitgeber gesetzt hatte mit dem alten Protokoll und der RS485 Schnittstelle hingegen war ein Traum.

mfg

BerndJ

Hier mal ein aktueller Dump:

1B 1B 1B 1B 01 01 01 01 76 07 00 0E 00 12 4F 9B 62 00 62 00 72 63 01 01 76 01 01 07 00 0E 00 1F 1A 89 0B 09 01 45 4D 48 00 00 6C FA 50 01 01 63 A0 12 00 76 07 00 0E 00 12 4F 9C 62 00 62 00 72 63 07 01 77 01 0B 09 01 45 4D 48 00 00 6C FA 50 07 01 00 62 0A FF FF 72 62 01 65 00 1F EA 86 7A 77 07 81 81 C7 82 03 FF 01 01 01 01 04 45 4D 48 01 77 07 01 00 00 00 09 FF 01 01 01 01 0B 09 01 45 4D 48 00 00 6C FA 50 01 77 07 01 00 01 08 00 FF 64 01 01 A2 01 62 1E 52 FF 56 00 00 00 33 3A 01 77 07 01 00 02 08 00 FF 64 01 01 A2 01 62 1E 52 FF 56 00 00 4D B5 7F 01 77 07 01 00 01 08 01 FF 01 01 62 1E 52 FF 56 00 00 00 33 3A 01 77 07 01 00 02 08 01 FF 01 01 62 1E 52 FF 56 00 00 4D B5 7F 01 77 07 01 00 01 08 02 FF 01 01 62 1E 52 FF 56 00 00 00 00 00 01 77 07 01 00 02 08 02 FF 01 01 62 1E 52 FF 56 00 00 00 00 00 01 77 07 01 00 10 07 00 FF 01 01 62 1B 52 FF 55 FF FF B5 8C 01 77 07 81 81 C7 82 05 FF 01 01 01 01 83 02 D0 4D B7 50 1A 2B DF E8 3D 0B A5 01 8D 2F 55 C0 48 64 D2 16 C1 E9 D6 7B CA E4 C1 87 C3 59 25 8E 4E 6C 8B CD 38 55 07 2F 9B B8 4D E7 0B A4 4A 10 01 01 01 63 AC AB 00 76 07 00 0E 00 12 4F 9D 62 00 62 00 72 63 02 01 71 01 63 47 2D 00 1B 1B 1B 1B 1A 00 B7 CB

und die aktuellen Werte:

  • 1.8.0 -> 1 kWh
  • 2.8.0 -> 509 kWh
  • Leistung -> ~ 2000 Watt

Eine kleine Übersicht von deiner Auswertung.

2000W kann ich allerdings nirgends finden?

Hallo RWN,

leider kann ich das für mich so nicht nachvollziehen. Ich habe die Zahlen/Zeichenkolonne durch Dein Script gejagt und bekomme da komplett andere Werte raus.
Kannst Du mir mal Dein, für meinen Fall angelegtes, Script zusenden?

[b]Hallo zusammen,

ein erstes Testscript.

Für alle die mal testen wollen und eventuell noch einen Dump übrig haben.:smiley:

Eine Kategorie mit Namen SML2018 in Root/Home anlegen.

Registervariable unter das Script.

Comport, TCP…usw nach euerer Hardware entsprechend verknüpfen.
z.B. Comport -> Cutter -> Registervariable -> Script.

Im Cutter müssen vorerst noch die Trennzeichen eingetragen werden
Script in der angelegte Kategorie SML2018 einfügen. Name egal.

Variablen werden automatisch angelegt. Wer mit den Nummern nicht klar kommt, kann auch die Namen ändern. Im Testmodus allerdings nicht sehr hilfreich.

Die Leistung wird eventuell noch nicht korrekt angezeigt!
Der Hersteller und die ServerId wird noch nicht ausgegeben!

Ansonsten testen und Fehler in der Auswertung melden.

Wenn ihr einen Dump postet, bitte in Hex und mit den abgelesenen Werten vom Zähler mit den Nummern z.B 1.0.8 => 24 KWh…usw.

Script:[/b]

<?
$smlDataEnergie = array('Wirk-Energie Total Bezug' => chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x00).chr(0xFF),
       'Wirk-Energie Tarif 1 Bezug' => chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x01).chr(0xFF),
       'Wirk-Energie Tarif 2 Bezug' => chr(0x01).chr(0x00).chr(0x01).chr(0x08).chr(0x02).chr(0xFF),
       'Wirk-Energie Total Lieferung' => chr(0x01).chr(0x00).chr(0x02).chr(0x08).chr(0x00).chr(0xFF),
       'Wirk-Energie Tarif 1 Lieferung' => chr(0x01).chr(0x00).chr(0x02).chr(0x08).chr(0x01).chr(0xFF),
       'Wirk-Energie Tarif 2 Lieferung' => chr(0x01).chr(0x00).chr(0x02).chr(0x08).chr(0x02).chr(0xFF));
      
      
$smlDataPower = array('Wirk-Leistung Total1' => chr(0x01).chr(0x00).chr(0x10).chr(0x07).chr(0x00).chr(0xFF),
        'Wirk-Leistung Total2' => chr(0x01).chr(0x00).chr(0x0F).chr(0x07).chr(0x00).chr(0xFF),
        'Wirkleistung L1' => chr(0x01).chr(0x00).chr(0x23).chr(0x07).chr(0x00).chr(0xFF),
        'Wirkleistung L2' => chr(0x01).chr(0x00).chr(0x37).chr(0x07).chr(0x00).chr(0xFF),
        'Wirkleistung L3' => chr(0x01).chr(0x00).chr(0x4B).chr(0x07).chr(0x00).chr(0xFF));      
   
    
if($_IPS['SENDER'] == "RegisterVariable")
{
 
 $sml =  explode(chr(0x01).chr(0x77).chr(0x07), $_IPS['VALUE']);
 
 for($i=0; $i < count($sml); $i++)
 {
  $dataKennung = substr($sml[$i], 0, 6);
  $dataWertEnergie = substr($sml[$i], -5, 5);
  $dataWertPower = substr($sml[$i], -2, 2);
  
  
  
  
  
  if(in_array($dataKennung, $smlDataEnergie, true))
  {
   $smlIndexEnergie = Str2Hex(substr($dataKennung, 2, -1));
   $smlValueEnergie = hexdec(Str2Hex($dataWertEnergie))/10000;
   $varIdentEnergie = hexdec($smlIndexEnergie);
   
   
   $ModuleID = @IPS_GetCategoryIDByName("SML2018", 0); // prüfen ob KategorieID exsistiert
   $varSml = @IPS_GetObjectIDByIdent("SML_".$varIdentEnergie, $ModuleID); // IDs der Variablen
  
   
   
   if(!IPS_VariableExists($varSml)) // Prüfen ob ID der Variablen bereits vorhanden, wenn Nein, anlegen
   {
    $varSml = IPS_CreateVariable(2); // Variable Float anlegen
    @IPS_SetName($varSml, "SML_".$smlIndexEnergie); // Der neu generierten ID einen Namen zuweisen
         IPS_SetVariableCustomProfile($varSml, "~Electricity"); // Profil setzen
    IPS_SetParent($varSml, $ModuleID); // nach Kategorie verschieben
    IPS_SetIdent($varSml, "SML_".$varIdentEnergie);
   }
   
   SetValue($varSml, $smlValueEnergie);
  }
  
  if(in_array($dataKennung, $smlDataPower, true))
  {
   $smlIndexPower = Str2Hex(substr($dataKennung, 2, -1));
   $smlValuePower = hexdec(Str2Hex($dataWertPower))/100; //verschiedene Teiler !!!
   $varIdentPower = hexdec($smlIndexPower);
   
   
   
  
   $ModuleID = @IPS_GetCategoryIDByName("SML2018", 0); // prüfen ob KategorieID exsistiert
   $varSml = @IPS_GetObjectIDByIdent("SML_".$varIdentPower, $ModuleID); // IDs der Variablen
   
   if(!IPS_VariableExists($varSml)) // Prüfen ob ID der Variablen bereits vorhanden, wenn Nein, anlegen
   {
    $varSml = IPS_CreateVariable(2); // Variable Float anlegen
    @IPS_SetName($varSml, "SML_".$smlIndexPower); // Der neu generierten ID einen Namen zuweisen
         IPS_SetVariableCustomProfile($varSml, "~Watt.14490"); // Profil setzen
    IPS_SetParent($varSml, $ModuleID); // nach Kategorie verschieben
    IPS_SetIdent($varSml, "SML_".$varIdentPower);
   }
   
   SetValue($varSml, $smlValuePower);
  }
 }
}
function Str2Hex($daten)
{
 $hex = "";
 for($i=0; $i<strlen($daten); $i++)
 $hex .= sprintf("%02X ", ord($daten[$i]));
 return $hex;
}?>

GROSSARTIG! :smiley: :loveips:
Nach fast 3 1/2 Wochen monitoring-Abstinenz endlich wieder Werte. VIelen, lieben Dank für Deine Arbeit und das tolle Script.

Einzig die Leistung fehlt mir noch (verschmerzbar; bekomme ich aus meinem SMA Wechselrichter heraus).
Schön wäre auch noch die Zählernummer. Damit könnte ich mir eine Seite generieren, auf der ich alle notwendigen Infos habe, wenn ich mal die Zählerstände melden muss. Sonst ist immer die Frage: welcher Zählerstand ist denn nun welcher Zähler? Sicher kann ich mir das auch statisch anlegen, aber ich meine ich hätte es aus meinem alten Zähler heraus auslesen können. Vllt. geht das auch gar nicht, dann bitte die geschriebene Anforderung einfach vergessen. :smiley:

Du kannst mir gerne deine Zählernummer per PM senden.
ich wüsste jetzt aber nicht das die schon mal drin gestanden hat.

ServerID ist klar, kommt noch.

Was passt an der Leistung noch nicht?

Der echte Wert (also abgelesen am eHz) für Leistung ist: 1954 Watt
Der durch das Script ermittelte Wert für Leistung ist: 465,2 Watt

Schwierig an der Stelle ist die Tatsache, dass ich nicht weiß ob die beiden Werte zur gleichen Zeit ermittelt sind. Ich habe versucht den Wert am eHz abzulesen in dem Augenblick, als das Script den Wert erneuert hat. Aber wer weiß …
465,2 * 4 = 1860,8 (???)

Kurz: zwischen beiden Werten liegen Welten. Da kann was nicht stimmen.

Ersetz mal bitte diese Zeile.

$smlValuePower = hexdec(Str2Hex($dataWertPower))/10/2; //verschiedene Teiler !!!

Ich hab meinen neuen Zähler jetzt mal in Betrieb genommen. Da passt alles ohne Teiler :confused:

Es stimmt noch immer nicht.

Ausgelesener Wert: 2607 Watt
tatsächlicher Wert: 1339 Watt

Ich habe jetzt einfach in Deinem Script den Wert zusätzlich durch 2 geteilt. Dann komme ich in etwa richtig raus.

$smlValuePower = hexdec(Str2Hex($dataWertPower))/10/4; //verschiedene Teiler !!!

Ich schau mir das nächste Woche genau an.

Setzt diese Zeile noch mal unter deine letzte gepostete.

echo Str2Hex($dataWertPower);

Und schreib mal den Wert hier rein bei genau 100 Watt. 0 Watt wär mir lieber.:D[b]

Kannst dafür im Meldungsfenster nachsehen
[/b]

7B 3B
7B C0
7B 3B
7B 8F
7B 0A

Das kommt da raus.

[b]Guten Morgen,

es wird in den nächsten Tagen, Wochen ein komplett neues Script geben.
Zeiten ändern sich, Auswertungen auch.
Ich werde dafür einen neuen Thread aufmachen.

Den ganzen Thread, werde ich als Obsolet Kennzeichnen und bei Bekanntgabe des neues Script zu machen.!

Wer möchte, kann gerne noch einen Dump senden.[/b]

Hallo zusammen,

Vielen Dank, hoffe das deine Bemühen mich mal in die Lage versetzt meinen Zähler zu verbinden. Hat einer einen Tip wie ich die Anbindung IR IPS (Hardware) am besten mache. Mein IPS läuft auf einer Himbeere nicht weit vom Zähler weg? Oder soll ich besser via IR zu IP gehen? Hinter dem Zähler habe ich das hager Modul verbaut.

Würde mich sehr interessieren wie ihr dies gelöst habt?

Danke und Grüße,
Daniel

Gesendet von iPhone mit Tapatalk

Hallo Daniel,

ich würde auf IP gehen.

Hi,

Danke für dein Feedback!
Welche Hardware würdest du empfehlen?

Grüße aus Köln,
Daniel

Gesendet von iPhone mit Tapatalk