[vz-users] WG: Zählerwechsel (optische Schnittstelle)

Frank Richter frank.richter83 at gmail.com
Fri Mar 8 09:46:22 CET 2019


Moin Michael,

was hast du denn eigentlich vor mit den Daten? Ist ja nicht so dass es
keine . funktionierenden SML-Parser gäbe...

Grüße
Frank

Michael Kaufmann <kaufmann-michael at outlook.com> schrieb am Fr., 8. März
2019, 09:37:

> Guten Morgen,
>
>
>
> der Code war zuvor so:
>
>
>
> case '5x': # Integer
>
>                 return hexdec($this->read($LEN-1));
>
>                 break;
>
>
>
> Bei negativen Werten, also Lieferung, wurde der Wert manchmal >65000 mit
> diesem Code. Es wurde anscheinend nicht berücksichtigt, dass der Wert auch
> mal negativ werden kann. Da der Wert >65000 war, ging ich davon aus, das es
> sich hier um 16 Bit Wert handeln muss. Dem ist halt nicht so, da ich nur 1
> Byte habe, im Beispiel hier 82hex.
>
>
>
> Die Funktion hexdec rechnet anscheinend wie ein Taschenrechner. Wenn ich
> im Windowsrechner 82hex umwandle in dez, kommt der Rechner nämlich auch auf
> 130. Das ist aber falsch.
>
>
>
> Nur so kommt man auf das richtige Ergebnis:
>
> 7 6 5 4 3 2 1 0 Bitwertigkeit
> 1 0 0 0 0 0 1 0 (82hex in Binärdarstellung)
> -128+0+0+0+0+0+2+0= -126 Watt
>
> Da ich es damals noch nicht gewusst habe, das man das mittel 2er
> Komplement berechnen muss, habe ich mir beholfen, und den Code so
> umgestaltet:
>
>
>
> case '5x': # Integer
>
>                                                                $temp =
> hexdec($this->read($LEN-1));
>
>
> $this->debug('Value: ('.$temp.')');
>
>
> if($temp>32768){
>
>
> return $temp -= 65536;
>
>                                                                }
>
>                                                                else{
>
>
> return $temp;
>
>                                                                }
>
>                 break;
>
>
>
> Ihr dürft aber bitte nicht vergessen, das ich mit PHP überhaupt nicht
> auskenne J
>
>
>
> Die SML Parser Klasse habe ich vom Loxberry Projekt. Hier gibt’s ein
> Smartmeter Plugin, das dieses Code verwendet. Allerdings kann mir der Autor
> auch nicht helfen, da er die Klasse von jemanden bekommen hat. Ist aber
> eigentlich auch egal. Ich will ja lernen und den Fehler selber beheben.
>
>
>
> Wir wissen nun, dass der Code so einfach falsch ist. Wie kann man in PHP
> den Wert richtig berechnen?
>
>
>
> Das Plugin Smartmeter gibt es auch her, die Leistungen mit 1.8.0 und 2.8.0
> (Kwh Lieferung und Bezug in Bezug auf Zeit zu berechnen). Ich möchte aber
> nicht dieses Verfahren verwenden, nur weil der Code falsch ist.
>
>
>
> Vielen Dank schonmal für eure Tipps.
>
>
>
> Gruß
>
> Michael
>
>
>
> *Von:* volkszaehler-users <
> volkszaehler-users-bounces at demo.volkszaehler.org> *Im Auftrag von *Frank
> Richter
> *Gesendet:* Freitag, 8. März 2019 00:07
> *An:* volkszaehler.org - users <volkszaehler-users at demo.volkszaehler.org>
> *Betreff:* Re: [vz-users] WG: Zählerwechsel (optische Schnittstelle)
>
>
>
> Hallo nochmal,
>
>
>
> dein Code bildet ein 16 Bit Zweierkomplement bei 8 Bit Nutzdaten. Das kann
> natürlich nicht funktionieren.
>
>
>
> Dürfen wir erfahren wo dieser PHP-Code herkommt?
>
>
>
> Grüße
>
> Frank
>
>
>
> Michael Kaufmann <kaufmann-michael at outlook.com> schrieb am Do., 7. März
> 2019, 13:45:
>
> Servus nochmal,
>
>
>
> habe den Fehler gefunden. Aber leider noch keine Lösung dafür J
>
>
>
> 2. Beispiel: Zähler zeigt 130 W Lieferung (A-), also -130W an: Im
> empfangenen SML Protokoll wird aber +130W ausgegeben. Logdatei 130W
> A-.log‘.
>
>
>
>
> http://bildhost.unter-limit.de/archiv.php?bild=367&bild_name=130alog061K2.jpg
>
>
>
> 77              => 7x = Liste, x7 = Liste mit 7 Einträgen
>
> 070100100700FF  => 07 = Länge in Bytes,  0100100700FF OBIS Kennzahl =>
> 16.7.0 = Gesamtwirkleistung
>
> 01             => Status: ohne Wert bzw. 01=optional
>
> 01             => ValTime: ohne Wert bzw. 01=optional
>
> 62 1B           => 6x xx = unsigned Integer, x2 xx = Länge 2 Byte, xx 1B =
> Unit: 1B = 27dez = Watt
>
> 52 00           => 5x xx = Integer, x2 xx = Länge 2 Byte, xx 00 = Scaler:
> 0 à 10^0 = 1
>
> 52 82           => Value: 5x xx = Integer, x2 xx = Länge 2 Byte, Value 82
> hex = 130 dez (entspricht +130 Watt)
>
> 01                         => ValueSignature: ohne Werte bzw. 01=optional
>
>
>
> Man darf den Wert nicht einfach von hex auf dez umrechnen, sondern man
> muss das 2er Komplement verwenden.
>
>
>
> 7 6 5 4 3 2 1 0 Bitwertigkeit
> 1 0 0 0 0 0 1 0 (82hex in Binärdarstellung)
> -128+0+0+0+0+0+2+0= -126 Watt
>
>
>
> Wie habt ihr das beim Volkszähler gelöst. Bei meinem Skript wird es
> momentan so umgerechnet.
>
>
>
> case '5x': # Integer
>
>                 $temp = hexdec($this->read($LEN-1));
>
>                 $this->debug('Value: ('.$temp.')');
>
>                 if($temp>32768){
>
>                     return $temp -= 65536;
>
>                 }
>
>                 else{
>
>                     return $temp;
>
>                 }
>
>                 break;
>
> So einfach darf man es sich aber nicht machen. Ich kann leider nicht so
> gut PHP programmieren. Habt ihr einen Vorschlag oder einen Tipp?
>
>
>
> Vielen Dank.
>
>
>
> Gruß
>
> Michael
>
>
>
>
>
> *Von:* Michael Kaufmann
> *Gesendet:* Sonntag, 24. Februar 2019 15:41
> *An:* volkszaehler-users at demo.volkszaehler.org
> *Betreff:* WG: Zählerwechsel (optische Schnittstelle)
>
>
>
> Hallo zusammen,
>
>
>
> ich habe gerade die Email an das bayerwerk geschickt, da die ich folgendes
> Problem mit der übertragenen Leistung über die Info Schnittstelle habe.
>
>
>
> Habe ich irgendwo einen Denkfehler? Auch wenn das PHP Skript nicht von
> volkszähler.org <http://xn--volkszhler-v5a.org> ist, der SML Datenstrom
> ist doch das selbe. Interpretiere ich den SML Datenstrom falsch?
>
>
>
> Wenn ich über die PV Einspeise, sollte die Leistung negativ übertragen
> werden. Wenn ich beziehe, wird die Leistung positiv übertragen. Im Prinzip
> funktioniert dies schon, allerdings wird die Leistung positiv übertragen,
> wenn sich die Leistung in einem Bereich von 0W bis ca. -135W. Ab -140W
> (also A- Lieferung) wird auch -140W übertragen, bzw. ein Wert mit
> Vorzeichen. 140W Toleranz kann doch auch nicht sein oder?
>
>
>
> Auszug aus der Email ans Bayernwerk:
>
> wie besprochen hier die verschiedenen Beispiele SML Log <-> tatsächliche
> Anzeige der Leistung am Iskra MT691. Die Obis Kennzahlen 1.8.0 und 2.8.0 in
> kWh werden korrekt übermittelt. Nur die übertragene Leistung macht
> Probleme.
>
> Die Logdateien können z. B. mit Notepad++ geöffnet werden. Notepad++
> stellt die Zeilenumbrüche korrekt dar.
>
>
>
> Die SML Protokollbeschreibung ist zu finden unter
> https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR03109/TR-03109-1_Anlage_Feinspezifikation_Drahtgebundene_LMN-Schnittstelle_Teilb.pdf?__blob=publicationFile&v=2.
> Die Methode „GetListResponse“ ist auf Seite 36 beschrieben.
>
>
>
> *Übersicht:*
>
> 1. Beispiel, fehlerhaft. Zähler zeigt 90W Lieferung (A-) an: Im
> empfangenen SML Protokoll wird aber +164W ausgegeben. Logdatei 90W A-.log‘.
>
> 2. Beispiel, fehlerhaft. Zähler zeigt 130 W Lieferung (A-), also -130W
> an: Im empfangenen SML Protokoll wird aber +130W ausgegeben. Logdatei 130W
> A-.log‘.
>
> 3. Beispiel, okay. Zähler zeigt 140 W Lieferung (A-), also -140W an: Im
> empfangenen SML Protokoll wird -140  ausgegeben. Logdatei 140W A-.log‘.
>
> 4. Beispiel, okay. Zähler zeigt 28W Bezug (A+), also +28 W an: Im
> empfangenen SML Protokoll wird auch 28W ausgegeben. Logdatei 30 W A+.log‘.
>
>
>
> *Fazit: Zähler überträgt bis ca. -130W Lieferung positive Werte. Ab ca.
> -140W Lieferung, werden die korrekten Werte übertragen. Positive Leistung
> (A+) wird aber auch im niedrigerem Leistungsbereich <100W korrekt
> übertragen. Siehe dazu Beispiel 4. *
>
>
>
> 1. Beispiel: Zähler zeigt 90W Lieferung (A-) an: Im empfangenen SML
> Protokoll wird aber +164W ausgegeben. Logdatei 90W A-.log‘.
>
>
>
>
> http://bildhost.unter-limit.de/archiv.php?bild=366&bild_name=90alogI6SFT.jpg
>
>
>
> 77              => 7x = Liste, x7 = Liste mit 7 Einträgen
>
> 070100100700FF  => 07 = Länge in Bytes,  0100100700FF OBIS Kennzahl =>
> 16.7.0 = Gesamtwirkleistung
>
> 01             => Status: ohne Wert bzw. 01=optional
>
> 01             => ValTime: ohne Wert bzw. 01=optional
>
> 62 1B           => 6x xx = unsigned Integer, x2 xx = Länge 2 Byte, xx 1B =
> Unit: 1B = 27dez = Watt
>
> 52 00           => 5x xx = Integer, x2 xx = Länge 2 Byte, xx 00 = Scaler:
> 0 à 10^0 = 1
>
> 52 A4           => Value: 5x xx = Integer, x2 xx = Länge 2 Byte, Value A4
> hex = 164 dez (entspricht +164 Watt)
>
> 01             => ValueSignature: ohne Werte bzw. 01=optional
>
>
>
> Obwohl der Zähler 90W Lieferung (A-) anzeigt, wird über das SML Protokoll
> +164 Watt vom Zähler geschickt.
>
>
>
> http://bildhost.unter-limit.de/archiv.php?bild=361&bild_name=90wa10X6A.jpg
>
>
>
>
>
> 2. Beispiel: Zähler zeigt 130 W Lieferung (A-), also -130W an: Im
> empfangenen SML Protokoll wird aber +130W ausgegeben. Logdatei 130W
> A-.log‘.
>
>
>
>
> http://bildhost.unter-limit.de/archiv.php?bild=367&bild_name=130alog061K2.jpg
>
>
>
> 77              => 7x = Liste, x7 = Liste mit 7 Einträgen
>
> 070100100700FF  => 07 = Länge in Bytes,  0100100700FF OBIS Kennzahl =>
> 16.7.0 = Gesamtwirkleistung
>
> 01             => Status: ohne Wert bzw. 01=optional
>
> 01             => ValTime: ohne Wert bzw. 01=optional
>
> 62 1B           => 6x xx = unsigned Integer, x2 xx = Länge 2 Byte, xx 1B =
> Unit: 1B = 27dez = Watt
>
> 52 00           => 5x xx = Integer, x2 xx = Länge 2 Byte, xx 00 = Scaler:
> 0 à 10^0 = 1
>
> 52 82           => Value: 5x xx = Integer, x2 xx = Länge 2 Byte, Value 84
> hex = 130 dez (entspricht +130 Watt)
>
> 01                         => ValueSignature: ohne Werte bzw. 01=optional
>
>
>
> http://bildhost.unter-limit.de/archiv.php?bild=362&bild_name=130waEBVR7.jpg
>
>
>
>
>
> 3. Beispiel: Zähler zeigt 140 W Lieferung (A-), also -140W an: Im
> empfangenen SML Protokoll wird -140  ausgegeben. Logdatei 140W A-.log‘.
>
>
>
>
> http://bildhost.unter-limit.de/archiv.php?bild=368&bild_name=140alogBYTTI.jpg
>
>
>
> 77              => 7x = Liste, x7 = Liste mit 7 Einträgen
>
> 070100100700FF  => 07 = Länge in Bytes,  0100100700FF OBIS Kennzahl =>
> 16.7.0 = Gesamtwirkleistung
>
> 01             => Status: ohne Wert bzw. 01=optional
>
> 01             => ValTime: ohne Wert bzw. 01=optional
>
> 62 1B           => 6x xx = unsigned Integer, x2 xx = Länge 2 Byte, xx 1B =
> Unit: 1B = 27dez = Watt
>
> 52 00           => 5x xx = Integer, x2 xx = Länge 2 Byte, xx 00 = Scaler:
> 0 à 10^0 = 1
>
> 53 FF 74        => Value: 5x xx xx = Integer, x3 xx xx = Länge 3 Byte,
> Value FF 74 hex = 65396 dez (16bit entsprechen 65536, 65396 – 65536 = -140
> Watt)
>
> 01              => ValueSignature: ohne Werte bzw. 01=optional
>
>
>
> http://bildhost.unter-limit.de/archiv.php?bild=363&bild_name=140waLS9OG.jpg
>
>
>
>
>
> 4. Beispiel: Zähler zeigt 28W Bezug (A+), also +28 W an: Im empfangenen
> SML Protokoll wird auch 28W ausgegeben. Logdatei 30 W A+.log‘.
>
>
>
>
> http://bildhost.unter-limit.de/archiv.php?bild=365&bild_name=30alogSA09T.jpg
>
>
>
> 77              => 7x = Liste, x7 = Liste mit 7 Einträgen
>
> 070100100700FF  => 07 = Länge in Bytes,  0100100700FF OBIS Kennzahl =>
> 16.7.0 = Gesamtwirkleistung
>
> 01             => Status: ohne Wert bzw. 01=optional
>
> 01             => ValTime: ohne Wert bzw. 01=optional
>
> 62 1B           => 6x xx = unsigned Integer, x2 xx = Länge 2 Byte, xx 1B =
> Unit: 1B = 27dez = Watt
>
> 52 00           => 5x xx = Integer, x2 xx = Länge 2 Byte, xx 00 = Scaler:
> 0 à 10^0 = 1
>
> 52 1C           => Value: 5x xx = Integer, x2 xx xx = Länge 2 Byte, Value
> 1C hex = 28 dez (entspricht +28 Watt)
>
> 01              => ValueSignature: ohne Werte bzw. 01=optional
>
>
>
> http://bildhost.unter-limit.de/archiv.php?bild=364&bild_name=30waHMPKM.jpg
>
>
>
>
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://demo.volkszaehler.org/pipermail/volkszaehler-users/attachments/20190308/34827dee/attachment-0001.html>


More information about the volkszaehler-users mailing list