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

Frank Richter frank.richter83 at gmail.com
Fri Mar 8 11:06:27 CET 2019


Weil du dich "nicht so richtig auskennst", willst du also lieber was
schlecht programmiertes reparieren, als was funktionierendes zu verwenden?
Total logisch...

Und das Bayernwerk und die Volkszaehler-ML sollen sich damit rumschlagen ;-)

Versuchs mal damit:

http://php.net/manual/de/function.hexdec.php#97172

Statt $dec > $_dec muss es aber IMHO $dec >= $_dec heißen.

Grüße
Frank

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

> Morgen,
>
> freilich gibts SML Parser, aber das Smartmeter Plugin kann halt über das
> grafische Webif eingestellt werden. Da ich mich nicht so richtig auskenne
> möchte ich den Fehler halt in dieser Klasse ausmerzen. Außerdem schickt das
> Plugin die ausgelesenen Daten direkt über UDP an den Loxone Miniserver.
>
> Nein, es geht hier nicht um einen Fehler im vzlogger, sondern um einen
> Fehler in der SML Klasse von dem Smartmeter Plugin.
>
> Ich hoffte eigentlich nur auf eure PHP Kenntnisse und ihr versteht
> vermutlich das SML Protokoll. Ich möchte nur einen Tipp, wie man genau an
> der Stelle Case 5 den Code so abändert, das der Wert richtig berechnet
> wird. Sonst nichts 😀
>
> Gruß
> Michael
>
> Von meinem iPhone gesendet
>
> Am 08.03.2019 um 09:46 schrieb Frank Richter <frank.richter83 at gmail.com>:
>
> 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/bc440592/attachment-0001.html>


More information about the volkszaehler-users mailing list