Ich verstehe nicht so richtig um was es hier geht- ein Fehler in vzlogger? 
Falls nein: warum nicht einfach diesen verwenden???

Viele Grüße,
Andreas

> Am 08.03.2019 um 09:46 schrieb Frank Richter <frank.richte...@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-mich...@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-boun...@demo.volkszaehler.org> 
>> Im Auftrag von Frank Richter
>> Gesendet: Freitag, 8. März 2019 00:07
>> An: volkszaehler.org - users <volkszaehler-users@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-mich...@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@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 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
>> 
>>  
>> 
>>  
>> 
>>  

Antwort per Email an