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 >> >> >> >> >> >>