Zähler auslesen

Nun habe ich gerade hier im Forum was gefunden :

LIAN 98(de) : Protokoll IEC 62056-21 / IEC 61107, Telegrammstruktur

Ich kämpfe …:p:D

Du weisst aber schon, dass Du 2 verschiedene Sachen durcheinander bringst. :confused:

Nun laß mich doch nicht im Dunkeln tappen …:smiley:

1B 1B 1B 1B 01 01 01 01 Escape-Sequenz
76 Liste mit 6 Einträgen
07 00 14 04 EC 6D 20 transactionID (7 Byte)
62 00 groupNo
62 00 abortOnError
72 Liste mit 2 Einträgen
63 01 01 Nachricht 0101 = SML_PublicOpen.Res
76 Liste mit 6 Einträgen
1 codepage (leer)
1 clientID (leer)
07 00 14 01 82 24 60 reqFileID
0B 06 45 4D 48 xx xx xx xx xx xx serverID
1 username (leer)
1 password (leer)
63 B7 96 CRC
0 Ende Nachricht
76 Liste mit 6 Einträgen
07 00 14 04 EC 6D 21 transactionID
62 00 groupNo
62 00 abortOnError
72 Liste mit 2 Einträgen
63 07 01 Nachricht 0701 = SML_GetList.Res
77 Liste mit 7 Einträgen
1 clientID (leer)
0B 06 45 4D 48 xx xx xx xx xx xx serverID
1 listName (leer)
72 Liste mit 2 Einträgen = actSensorTime
62 01 Typ = secIndex
65 01 82 78 48 Sekunden-Index als unsigned 32
77 Liste mit 7 Einträgen = valList mit ValListEntries
77 (1)
07 81 81 C7 82 03 FF objName 129-129:199.130.3255
Herstelleridentifikation
01 status (leer)
01 valTime (leer)
01 unit (leer)
01 scaler (leer)
04 45 4D 48 value
01 valueSignature (leer)
77 (2)
07 01 00 00 00 09 FF objName 1-0:0.0.9
255
Geräteidentifikation
01 status
01 valTime
01 unit
01 scaler
0B 06 45 4D 48 xx xx xx xx xx xx value
01 valueSignature
77 (3)
07 01 00 01 08 00 FF objName 1-0:1.8.0*255
Wirkarbeit Bezug total
63 01 82 status = unsigned 16
01 valTime
62 1E unit (unsigned8) 1E = Wh
52 FF scaler (int8) -1 = 10^-1 = /10
56 00 01 29 71 4F value 19493967/10 = 1949396,7 Wh = 1949,3967 kWh
01 valueSignature (leer)
77 (4)
07 01 00 01 08 01 FF objName 1-0:1.8.1
255
Wirkarbeit Bezug Tarif 1
01 status (leer)
01 valTime (leer)
62 1E unit (unsigned8) 1E = Wh
52 FF scaler (int8) -1 = 10^-1 = /10
56 00 01 29 71 4F value 19493967/10 = 1949396,7 Wh = 1949,3967 kWh
01 valueSignature (leer)
77 (5)
07 01 00 01 08 02 FF objName 1-0:1.8.2
255
Wirkarbeit Bezug Tarif 2
01 status (leer)
01 valTime (leer)
62 1E unit (unsigned8) 1E = Wh
52 FF scaler (int8) -1 = 10^-1 = /10
56 00 00 00 00 00 value 0
01 valueSignature (leer)
77 (6)
07 01 00 0F 07 00 FF objName 1-0:15.7.0
255
Wirkleistung total
01 status (leer)
01 valTime (leer)
62 1B unit (unsigned8) 1B = W
52 FF scaler (int8) -1 = 10^-1 = /10
55 00 00 11 51 value 4433/10 = 443,3 W
01 valueSignature (leer)
77 (7)
07 81 81 C7 82 05 FF objName 129-129:199.130.5
255
Public Key des Zählers
01 status (leer)
01 valTime (leer)
01 unit (leer)
01 scaler (leer)
83 xx xx xx xx xx xx xx xx xx xx value
xx xx xx xx xx xx xx xx xx xx
xx xx xx xx xx xx xx xx xx xx
xx xx xx xx xx xx xx xx xx xx
xx xx xx xx xx xx xx xx xx
01 valueSignature (leer)
01 listSignature (leer)
01 actGatewayTime (leer)
63 C1 04 CRC
00 Ende Nachricht
76
07 00 14 04 EC 6D 24 transactionID
62 00 groupNo
62 00 abortOnError
72
63 02 01 Nachricht 0201 = SML_PublicClose.Res
71
01 Signature (leer)
63 DD 06 CRC
00 Ende
00 Ende
1B 1B 1B 1B Escape-Sequenz
1A 01 64 62 Ende Nachricht mit Füllbyte und Prüfsumme
00 Ende

Quelle: volkszaehler.org - wiki - EMH eHZ-H

So kommt es im wesentlichen auch aus meinem emh raus.

Warum auch immer, aber in einem anderen Thread habe ich zu einem ähnlichen Thema keine Resonanz bekommen. :rolleyes:
Vom Support wurde mir leider geschrieben, dass „Bastelprojekte“ nicht supportet werden :mad:

So wie ich hier lese, scheint es aber doch zu gehen :slight_smile: Wer kann Starthilfe geben …
Ich habe einen Zähler von Itron und möchte ihn mittels Y-Node in IPS integrieren. Da Udo den gleichen Zähler hat (Projektbeschreibung) und erfolgreich zum sprechen gebracht hat, war ich sehr optimistisch ihn auch in IPS integrieren zu können … war ich :frowning:

Wie beim Volkszähler beschrieben habe ich mittels Putty getestet … soweit alles gut. Wie fängt man dann aber in IPS an?

Hallo zusammen an alle die mir vielleicht helfen können!
Insbesondere glaube ich, dass Harry und Michael ein ähnliches Problem hatten.
Es geht um das auslesen der aktuellen Leistung vom EMH Zähler (Zweirichtungszähler).

Wenn die PV-Anlage nichts produziert (also Nachts) kann ich Werte auslesen die einwandfrei plausibel sind (z.B. 00 00 14 4C = 519,6 W)

Wenn die PV Anlage in Betrieb ist bekomme ich als Wert z.B. FF FF E0 C7 was Dezimal 429495930,3 W bedeuten würde. Soviel kann meine 17kwp Anlage aber gar nie produzieren und einspeisen.
Irgendwie muss der Wert codiert sein. Dachte zuerst man müsste FF FF FF FF subtrahieren und dann mit -1 multiplizieren -das kann aber nach Vergleich mit den Daten der PV-Anlage auch nicht sein.

Doku von EMH zum Zähler leider Fehlanzeige. Nichts passendes im Internet zu finden.

@Harry, @Michael, wie habt Ihr das bei euch gelöst?

Viele Grüße Alexander

Sch… Doppelposts, vielleicht das

Gruß
Bruno

Hallo Bruno,

ich bin noch neu hier, was habe ich falsch gemacht? Habe mal gegoogelt, unter Doppelposts versteht man viele verschiedene Aspekte. Was genau habe ich falsch gemacht?

Hätte ich einen neuen Thread aufmachen sollen?

Danke für den Link auf den anderen Thread. Ich kann aber nicht erkennen, dass das Script von Harry die führenden FF in dem Integer32 Wert, das die DezimalZahl so groß macht, irgendwie behandelt.

Also denke ich, dass meine Frage nicht schon irgendwo anders beantwortet wird und glaube diese zurecht gestellt zu haben.

Beste Grüße
Alexander

1.) Meinte doch nicht Dich, Du hast ja nur einmal gefragt :wink:

2.) Das Zählerthema hatte ich nur gerade gesehen und dachte es könnte Dir weiterhelfen, da der Doppelpost darüber stand. Details kenne ich nicht, pardon. :o

Gruß
Bruno

Ich bin mir nicht sicher was du mir sagen möchtest, aber nur zu deiner Erklärung, Bruno.

  • Ich habe am 11.02.2013 ein Thema erstellt, wo ich trotz Suche vorab kein anderes Thema gefunden habe. Hier hatte mir aber keiner helfen können.:frowning:
  • Nach Rücksprache mit dem IPS-Support wurde mir dann mitgeteilt das von deren Seite keine Bastelprojekte unterstützt werden.:mad:
  • Dann habe ich mich an „Volkszähler-Udo“ gewandt, der mir riet ein Post in diesem Thema zu erstellen. Habe ich am 04.12.2013 auch gemacht. Leider kam auch hier keine Resonanz:(
  • Nach erneuter Rücksprache mit Udo riet er mir, mich an harry28 zu wenden. Der hat mir dann in meinem Ursprungsthema geantwortet. Hier schon einmal Danke an harry28 :slight_smile:

Heute hat dann alexox ein Problem gepostet und jetzt meldest du dich mit so einem Beitrag … also was möchtest du mir vorwerfen Bruno, habe ich etwas falsch gemacht :confused:

Frage mich nur warum das Zeug zweimal gepostet werden muss. Behaupte mal, dass der erste Post schon gelesen wurde, vielleicht nur von denen, die nicht helfen konnten. Der zweite Post wurde offensichtlich auch nur von den gleichen Personen gelesen, also wieder keine Hilfe. :wink:

Von dem her sehe ich einfach keinen Sinn dahinter mehrfach das Gleiche zu fragen. Vielleicht gibt es aber gute Gründe es anders zu machen, dann korrigiere ich mich gerne.

Gruß
Bruno

Hallo zusammen,

ich denke ich habe einen vielversprechenden Ansatz negative Werte bei der Leistung vom Zähler richtig zu dekodieren.
Ich will hier nicht nur Fragen stellen, sondern auch meine Erkenntnisse teilen. Deshalb findet ihr hier meinen Lösungsansatz:

In einer Doku von VDE war der Hinweis, die führenden ‚FF‘ einfach wegzulassen.

Zitat:
6…2…3… Datentypen Unsigned8, Unsigned16, Unsigned32 und Unsigned64
(125) Diese vorzeichenlosen Integer-Datentypen werden wie folgt kodiert, wobei in der
Datenübertragung jeweils ganze Bytes, die führende Nullen enthalten, weggelassen
werden dürfen:
Zitat Ende, Quelle http://www.vde.com/de/fnn/arbeitsgebiete/messwesen/Sym2/Infomaterial/Documents/SML_081112_103.pdf

Nur weglassen alleine brachte nicht die Lösung.
Ich denke man muss das die Zahlen als Zweierkomplement interpretieren. Jetzt macht auch Sinn für mich, warum man, wenn im Scaler FF steht, durch 10 dividieren muss um plausible Werte zu erhalten. FF ist im Zweierkomplement -1 , also ausgelesener Wert * 10 hoch -1 sprich dividiert durch 10.

Mal schauen, was die Leistungswerte bei Rücklieferung ins Netz morgen sagen, wenn die PV-Anlage wieder produziert!

Als nächstes werde ich den Eigenverbrauch berechnen, bzw. die augenblickliche verbrauchte Leistung im Haus, wenn ein Teil aus dem EVU-Netz kommt und ein Teil von meiner PV-Anlage. Wahrscheinlich muss ich da noch aufpassen, dass ich irgendwie die Zählerstände synchron abrufen kann, weil nur Werte die zur gleichen Zeit gemessen wurde auch wirklich miteinander verrechnet werden dürfen. Gab es da schon Ansätze von jemandem?

Viele Grüße

Alexander

PS: soweit mein überarbeitetes Script zum dekodieren und berechnen der Werte:



<?

function bin2si($bin,$bits=32)
{
    if (strlen($bin)==$bits)
    {
        if (substr($bin,0,1) == 0) // positive or zero
        {
            $si = base_convert($bin,2,10);
        }
        else // negative
        {
            $si = base_convert($bin,2,10);
            $si = -(pow(2,$bits)-$si);
        }
        return $si;
    }
}


function read_value($obj_raw, $objName, $objLength, $obj_position,$integer_length)
{

$obj = str_split(substr(bin2hex($obj_raw),strpos(bin2hex($obj_raw),$objName)+16,$objLength),2);
//print_r($obj);
 $result = '';

foreach($obj_position as $index) {
  $result = $result . $obj[$index]; }


$scaler = base_convert($obj[5],16,2);
$scaler = str_repeat('0',8-strlen($scaler)) . $scaler;
$scaler = bin2si($scaler,8);
//echo 'S:' . $scaler;

$bin = base_convert($result,16,2);
$bin = str_repeat('0',$integer_length-strlen($bin)) . $bin;
//echo 'Binary:' . $bin;

return bin2si($bin,$integer_length)* pow(10,$scaler);
}


?>


Halo zusammen,

da ich mittlerweile auch in den Genuss einer Photovoltaikanlage und dem einhergehenden Tausch des Stromzählers zu einem mit SML Protokoll gekommen bin, such ich immernoch nach der Lösung die vermeintliche negative Wirkleistung (Einfluss Strombezug, Erzeugung) in „sinnvolle“ Werte zu wandeln.
Die Lösung von alexox verstehe ich ehrlich gesagt nicht, vielleicht kann mir jemand nochmals kurz erklären ob es möglich ist die derzeitige Wirkleistung trotz Photovoltaikeinspeisung aus den SML Daten zu extrahieren. Wenn nichts eingespeist wird passen die Werte des Stromzählers und die in IPS (aus dem SML Stream) fast überein!

Danke
spooniester

Habe auch das Problem dass mein Stromzähler (nicht der PV-Zähler) beim aktuellen Verbrauch/Bezug PV immer mit drin hat, darum berechne ich meinen aktuellen Stromverbrauch selbst und zwar über die Zählerstände.

Hallo,

ich habe es mittlerweile hinbekomme auch die negativen Verbräuche (Einspeisung/Bezug) die der Stromzähler anzeigt in IPS aus dem SML-Stream zu erfassen. Zweierkomplement war hier das richtige Stichwort.

Falls Interesse besteht könnte ich hier die Funktion veröffentlichen (<- ist aber auch nur zusammengekl**t)

Gruß
spooniester