Neues Plugin: Smartmeter - Stromzähler auslesen

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Prof.Mobilux
    Supermoderator
    • 25.08.2015
    • 4534

    Hallo Leute,

    das Plugin stößt so langsam an seine Grenzen. Viele von Euch haben ja Zähler, die nicht oder nur teilweise unterstützt werden. Historisch bedingt ist das Plugin aus einem kleinen Skript entstanden, welches ich mal selbst für meinen Zähler erstellt hatte (noch im "alten" Loxoneforum).

    Die D0-Schnittstelle zum Zähler habe ich selbst implementiert. Dann kamen SML-Zähler dazu. Dafür hatte Wörsty ein eigenes Plugin und dort eine SML-Library benutzt, die aber "von extern" kam. Diese habe ich dann in mein Plugin übernommen. Leider wird aber die SML-Library nicht mehr gepflegt, Wörsty und ich haben keine Zeit dort die Fehler zu suchen und zu beheben. Viele Zähler haben trotz standardisiertem Protokoll ihre "Eigenheiten": Startsequenzen, Senden per Aufforderung oder zyklisch, Wartezeiten etc. pp.

    Dann kamen Leute mit verschlüsselten Zählern (AES-Verschlüsselung, OMS-Protokoll). Das konnten wir nie implementieren, da es keine passende Library gibt (weder Perl, noch PHP oder Nodejs).

    Kurzum: Der Pflegeaufwand ist extrem hoch und ohne eigene Hardware wirklich extrem schwer zu programmieren/testen. Ich habe daher in den letzten Tagen ein wenig mit vzlogger herumgespielt. Das ist der "Datengrabber" von http://www.volkszaehler.org vzlogger unterstützt wohl von allen Librarys am meisten Zähler und lässt sich am flexibelsten konfigurieren.

    Mir ist es gelungen, vzlogger so in das Plugin einzubinden (provisorisch natürlich ;-)), dass ich es im Plugin nutzen kann. Ich habe daher beschlossen, das Plugin auf vzlogger umzubauen.

    Alle, die aktuell noch einen nicht unterstützen Zähler haben, können im Wiki von http://www.volkszaehler.org mal schauen, ob ihr Zähler unterstützt wird. Wenn ja, wird er demnächst auch vom Plugin unterstützt werden :-)
    Zuletzt geändert von Prof.Mobilux; 11.01.2019, 16:36.
    🇺🇦 Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine


    LoxBerry - Beyond the Limits

    Kommentar

    • Oli
      LoxBus Spammer
      • 25.08.2015
      • 293

      Hallo,
      das sind ja super Neuigkeiten! Ich habe mit dem vzlogger schonmal probiert meinen Zähler auszulesen und es hat auch geklappt. Leider lieferte die Info-Schnittstelle nur den gesamten Verbrauch. Jetzt habe ich meinen Energieversorger so lange genervt, bis dieser mir erlaubt hat eine abgeklebte/versiegelte MSB-Schnittstelle am Easymeter Q3C zu nutzen. Diese sendet ohne Aufforderung alle 2 Sekunden einen Datensatz. Dieser beinhaltet neben den Verbrauch auch die Leistung der 3 Leiter und die Summenleistung. Im Log vom Smartmeter Plugin 1.0 bekomme ich auch Werte, allerdings nur in der Übersicht und nicht unter den OBIS Werte...
      Folglich kann auch nichts zum Miniserver gesendet oder per HTTP abgerufen werden. Gibt es für mich ein Howto oder soll ich mich lieber auf das VZ Plugin freuen?

      01304DD6: Found configuration for 01304DD6
      01304DD6: Manual settings.
      01304DD6: Protocol: genericsml
      01304DD6: Timeout: 10
      01304DD6: Delay: 1
      01304DD6: Device: /dev/serial/smartmeter/01304DD6
      01304DD6: Baudrate:9600/9600 Databits:8 Stopbits:1 Parity:even Handshake:none
      Initial Baudrate: 9600
      Max Baudrate: 9600
      Protocol: genericsml
      Timeout: 10
      Delay: 1
      Setting up port /dev/serial/smartmeter/01304DD6: Baudrate:9600/9600 Databits:8 Stopbits:1 Parity:even Handshake:none
      1B1B1B1B0101010176050013B4746200620072650000010176 0101074553595133430B0901455359110393BFA6010163EC78 0076050013B4756200620072650000070177010B0901455359 110393BFA601726201650942EB927F77078181C78203FF0101 0101044553590177070101010800FF630190726201650942EB 92621E52FC69000000261B8CEF520177070101010801FF6301 90726201650942EB92621E5201650018F65001770701010108 02FF630190726201650942EB92621E52016500000071017707 0101010803FF630190726201650942EB92621E520165000000 710177070101010804FF630190726201650942EB92621E5201 65000000700177070101010805FF630190726201650942EB92 621E520165000000710177070101010806FF63019072620165 0942EB92621E520165000000710177070101010807FF630190 726201650942EB92621E520165000000710177070101010808 FF630190726201650942EB92621E5201650000007001770701 00010700FF0101621B52FE550000EC9B0177070100150700FF 0101621B52FE5500005EDC0177070100290700FF0101621B52 FE550000824401770701003D0700FF0101621B52FE5500000B 7B0177070100600505FF010101016301900101016366AA0076 050013B476620062007265000002017101632FD3001B1B1B1B 1A00476E1B1B1B1B0101010176050013B47762006200726500 000101760101074553595133430B0901455359110393BFA601 01638B8A0076050013B4786200620072650000070177010B09 01455359110393BFA601726201650942EB947F77078181C782 03FF01010101044553590177070101010800FF630190726201 650942EB94621E52FC69000000261B8CFC7301770701010108 01FF630190726201650942EB94621E5201650018F650017707 0101010802FF630190726201650942EB94621E520165000000 710177070101010803FF630190726201650942EB94621E5201 65000000710177070101010804FF630190726201650942EB94 621E520165000000700177070101010805FF63019072620165 0942EB94621E520165000000710177070101010806FF630190 726201650942EB94621E520165000000710177070101010807 FF630190726201650942EB94621E5201650000007101770701 01010808FF630190726201650942EB94621E52016500000070 0177070100010700FF0101621B52FE550000EBF40177070100 150700FF0101621B52FE5500005EB00177070100290700FF01 01621B52FE550000819F01770701003D0700FF0101621B52FE 5500000BA50177070100600505FF0101010163019001010163 DE540076050013B4796200620072650000020171016304E600 1B1B1B1B1A000BFA1B1B1B1B0101010176050013B47A620062 00726500000101760101074553595133430B09014553591103 93BFA6010163F90A0076050013B47B62006200726500000701 77010B0901455359110393BFA601726201650942EB967F7707 8181C78203FF01010101044553590177070101010800FF6301 90726201650942EB96621E52FC69000000261B8D0964017707 0101010801FF630190726201650942EB96621E5201650018F6 500177070101010802FF630190726201650942EB96621E5201 65000000710177070101010803FF630190726201650942EB96 621E520165000000710177070101010804FF63019072620165 0942EB96621E520165000000700177070101010805FF630190 726201650942EB96621E520165000000710177070101010806 FF630190726201650942EB96621E5201650000007101770701 01010807FF630190726201650942EB96621E52016500000071 0177070101010808FF630190726201650942EB96621E520165 000000700177070100010700FF0101621B52FE550000E7DF01 77070100150700FF0101621B52FE5500005E79017707010029 0700FF0101621B52FE5500007DCE01770701003D0700FF0101 621B52FE5500000B980177070100600505FF01010101630190 0101016319010076050013B47C620062007265000002017101 631DF5001B1B1B1B1A00926F1B1B1B1B0101010176050013B4 7D62006200726500000101760101074553595133430B090145 5359110393BFA6010163FBB70076050013B47E620062007265 0000070177010B0901455359110393BFA601726201650942EB 987F77078181C78203FF010101010445535901770701010108 00FF630190726201650942EB98621E52FC69000000261B8D16 280177070101010801FF630190726201650942EB98621E5201 650018F6500177070101010802FF630190726201650942EB98 621E520165000000710177070101010803FF63019072620165 0942EB98621E520165000000710177070101010804FF630190 726201650942EB98621E520165000000700177070101010805 FF630190726201650942EB98621E5201650000007101770701 01010806FF630190726201650942EB98621E52016500000071 0177070101010807FF630190726201650942EB98621E520165 000000710177070101010808FF630190726201650942EB9862 1E520165000000700177070100010700FF0101621B52FE5500 00E58F0177070100150700FF0101621B52FE5500005E500177 070100290700FF0101621B52FE5500007BAF01770701003D07 00FF0101621B52FE5500000B900177070100600505FF010101 01630190010101630B2C0076050013B47F6200620072650000 0201710163EAFB001B1B1B1B1A00227C1B1B1B1B0101010176 050013B4806200620072650000010176010107455359513343 0B0901455359110393BFA60101632B1B0076050013B4816200 620072650000070177010B0901455359110393BFA601726201 650942EB9A7F77078181C78203FF0101010104455359017707 0101010800FF630190726201650942EB9A621E52FC69000000 261B8D22FF0177070101010801FF630190726201650942EB9A 621E5201650018F6500177070101010802FF63019072620165 0942EB9A621E520165000000710177070101010803FF630190 726201650942EB9A621E520165000000710177070101010804 FF630190726201650942EB9A621E52016500000070
      Save raw buffer to /var/run/shm/smartmeter/01304DD6.dump
      Parse /var/run/shm/smartmeter/01304DD6.dump as SML-Protocol.
      Buffer:
      129-129:199.130.3*255(ESY*)
      (16367097838.6*kWh)
      (16359.2*kWh)
      (1.13*kWh)
      (1.13*kWh)
      (1.12*kWh)
      (1.13*kWh)
      (1.13*kWh)
      (1.13*kWh)
      (1.12*kWh)
      1-0:1.7.0*255(60.571*kW)
      (24.284*kW)
      (33.348*kW)
      (2.939*kW)
      (400*)

      Calculate average power for cons.
      Last Reading: . Saved before: 429787.9122 hours. Consumption: 0.0000. Avg. Power: 0.0000,
      Calculate average power for del.
      Last Reading: . Saved before: 429787.9122 hours. Consumption: 0.0000. Avg. Power: 0.0000,
      Save Meter data to /var/run/shm/smartmeter/01304DD6.data.
      All data written to /var/run/shm/smartmeter/01304DD6.xxxx
      01304DD6: UDP String to send: 01304DD6:Last_Update:2019-01-11 20:54:44; 01304DD6:Last_UpdateLoxEpoche:316472084; 01304DD6:Consumption_Total_OBIS_1.8.0:; 01304DD6:Consumption_Tarif1_OBIS_1.8.1:; 01304DD6:Consumption_Tarif2_OBIS_1.8.2:; 01304DD6:Consumption_Tarif3_OBIS_1.8.3:; 01304DD6:Consumption_Tarif4_OBIS_1.8.4:; 01304DD6:Consumption_Tarif5_OBIS_1.8.5:; 01304DD6:Consumption_Tarif6_OBIS_1.8.6:; 01304DD6:Consumption_Tarif7_OBIS_1.8.7:; 01304DD6:Consumption_Tarif8_OBIS_1.8.8:; 01304DD6:Consumption_Tarif9_OBIS_1.8.9:; 01304DD6:Consumption_CalculatedPower_OBIS_1.99.0:0 .0000; 01304DD6:Consumption_Power_OBIS_1.7.0:60.571; 01304DD6elivery_Total_OBIS_2.8.0:; 01304DD6elivery_Tarif1_OBIS_2.8.1:; 01304DD6elivery_Tarif2_OBIS_2.8.2:; 01304DD6elivery_Tarif3_OBIS_2.8.3:; 01304DD6elivery_Tarif4_OBIS_2.8.4:; 01304DD6elivery_Tarif5_OBIS_2.8.5:; 01304DD6elivery_Tarif6_OBIS_2.8.6:; 01304DD6elivery_Tarif7_OBIS_2.8.7:; 01304DD6elivery_Tarif8_OBIS_2.8.8:; 01304DD6elivery_Tarif9_OBIS_2.8.9:; 01304DD6elivery_CalculatedPower_OBIS_2.99.0:0.0000; 01304DD6elivery_Power_OBIS_2.7.0:; 01304DD6:Total_Power_OBIS_15.7.0:; 01304DD6:Total_Power_OBIS_16.7.0:;
      01304DD6: Send Data to lxl1A3E at 192.168.1.3.
      01304DD6: Send OK to lxl1A3E. IP:192.168.1.3 Port:7000

      Kommentar


      • blacksun
        blacksun kommentierte
        Kommentar bearbeiten
        Hallo Oli, schick mir mal ein *.dump File von deinem Zähler. Dann kann ich da nochmal schauen. Den Telegrammstrom, den du gepostet hast, enthalten Leerzeichen. Die kann ich nicht durch den Parser schicken.
        Zuletzt geändert von blacksun; 25.08.2019, 11:43.

      • Oli
        Oli kommentierte
        Kommentar bearbeiten
        Hallo blacksun , wo bekomme ich das*.dump file her? Hab da schon einige Tage nichts mehr mit gemacht...

      • blacksun
        blacksun kommentierte
        Kommentar bearbeiten
        Du findest das Dumpfile auf deinem Loxberry unter
        /var/run/shm/smartmeter/serialnamedeineslesekopfes.dump

        Übrigens steht das auch im Log des Pugins :-)
        Parse /var/run/shm/smartmeter/01304DD6.dump as SML-Protocol.
    • blacksun
      MS Profi
      • 20.01.2016
      • 557

      Das hört sich gut an. Auch wenn ich komplett zufrieden wäre, wenn dein jetziges Plugin, die ausgelesenen Daten in einem kürzeren Intervall <1min. senden würde.

      Ich gehe aber davon aus, das dies mit dem Volkszählerskript dann eh funktioniert.

      Es wird immer besser. Vielen Dank schonmal für die tolle Arbeit!

      Kommentar

      • Gast

        Ich habe einen Lesekopf von Weidmann, der auch gut erkannt wird von Smart Meter. Im Tool EMLOG der Firma Weidmann sieht alles Super aus nur wenn ich das mit Loxberry und dem Smart Meter wiederhole passiert das was so oft gepostet wurde, es kommen keine Werte. Ich bin noch am durchdrehen. Mein Zähler ist der DWS7412.2 und die Werte von 180.0 und 280.0 sind die ich an Loxone weiterreichen will. Der Zähler liefert SML 8N1 mit 9600 unidirektional. Vielleicht kann jemand eine Aussage machen, wäre super.

        Kommentar

        • shot
          Smart Home'r
          • 01.09.2015
          • 55

          Zitat von shot
          Bin mit dem Plugin am üben ....
          Image 1.4.0.2
          Schreib/Lesekopf USB: Weidmann Elektronik Stromzähler
          Zähler ISKRA MT681 / SML
          Smartmeter Plugin V1.0

          Daten für aktuellen Bezug und Einspeisung "CalculatedPower"
          bekomme ich nur sporadisch oder eher nicht.
          Die Daten "Total" kommen an.
          DN03UR3L:Consumption_Tarif1_OBIS_1.8.1:7406.0677 DN03UR3L:Consumption_CalculatedPower_OBIS_1.99.0:0 .0000
          Erst mal vielen Dank für die Arbeit an dem super plugin.

          Habe in meinem Fall und Konfiguration (ISKRA MT681 / SML) des Plugin auf Version: 0.2.4 aufgesetzt.
          Daten kommen nun ohne Ausfälle an.
          Unter Version 1.4.0.2 hatte ich mehr Ausfälle und eher zufällig mal Daten.
          Die Positionierung des Lesekopfes wurde nicht verändert.

          Hab den Test mit Version: 0.2.4 aufgrund eines vorigen posts hier gemacht.

          Kommentar

          • blacksun
            MS Profi
            • 20.01.2016
            • 557

            Wie siehts denn aus mit dem neuem Smartmeterplugin, indem vzlogger integriert ist. Kann man da schon was testen? Wenn du einen Betatester brauchst, melde dich einfach.

            Kommentar

          • Automatisierer
            Smart Home'r
            • 04.10.2018
            • 60

            Hallo zusammen,

            ich habe vor zwei Wochen das Plugin installiert und lese damit meinen EMH ED300L aus.
            Soweit auch alles super.
            Jedoch hängt sich da alle paar Tage was auf.
            Es kommen keine Werte mehr, bzw. nur 0.000.
            Im Plugin sieht alles normal aus.
            Die LED am IR Kopf blinkt dann nicht mehr bei der manuellen Abfrage.
            Abhilfe bringt dann nur ein Neustart des LoxBerry oder das ab und anstecken des IR Kopfes.

            Hat hier jemand eine Idee woran das liegen könnte?
            Ich verwende den Weidmann IR Kopf.

            Gruß
            Miniserver; KNX; Loxberry; Homebridge; Nuki; Roborock; Siemens S7/TIA; DoorBird;

            Kommentar

            • master chief
              Azubi
              • 06.01.2019
              • 4

              also ich habe den Weidmann I/R Kopf und einmal klappt er am RP3 und einmal nicht. Egal welcher USB Port ausgewählt wird. Gibt's da einen Trick?

              Kommentar

              • blacksun
                MS Profi
                • 20.01.2016
                • 557

                Klicke auf die Grafik für eine vergrößerte Ansicht

Name: C013AF82-7EEB-44A3-B042-152EBDC3FCD2.png
Ansichten: 2349
Größe: 237,8 KB
ID: 190201

                Hallo zusammen,

                endlich ist der Schnee vom Dach und meine PV produziert wieder Strom.

                Allerdings gibts jetzt das nächste Problem. Anscheinend wird das Vorzeichen nicht korrekt erkannt vom Smartmeter.

                64kW Verbrauch kann ja nicht sein. Solange die Leistung positiv ist, also Bezug, passt die Anzeige. Wo kann ich das verstellen, dass das Minuszeichen richtig interpretiert wird?

                Viele Grüße
                Angehängte Dateien

                Kommentar

                • blacksun
                  MS Profi
                  • 20.01.2016
                  • 557

                  Ich bin wieder ein Stück weiter gekommen :-)

                  Ich habe in der Datei php_sml_parser.class.php folgende Function angepasst. Abschnitt Case 5x.

                  Die PHP Funktion hexdec erkennt das Vorzeichen nicht. Wenn der umgerechnete Wert jetzt größer als 32768 ist, gehe ich davon aus, das es eigentlich ein negativer Wert ist und ziehe von dieser Zahl 65536 wieder ab.

                  Negativ wird die Leistung, wenn ich ins Netz einspeise.

                  Code:
                    private function parse_sml_data($list_item=0) {
                          global $list_indent;
                          $TYPE_LEN = $this->read(1);
                          if($TYPE_LEN=='00') {
                              return $TYPE_LEN; # EndOfSmlMessage
                          }
                          $TYPE = $TYPE_LEN{0}.'x';     # only high-nibble
                          $LEN  = hexdec($TYPE_LEN{1}); # only low-nibble
                          while($TYPE{0} &0x8) {  # Multi-Byte TypeLen-Field
                              $LEN = $LEN * 0x10;
                              $TYPE_LEN = $this->read(1);
                              $TYPE = $TYPE_LEN{0}.'x';     # only high-nibble
                              $LEN  += hexdec($TYPE_LEN{1}); # only low-nibble
                              $LEN--; # 1 abziehen wegen zusätzlichem TL-Byte
                          }
                          if($LEN==1) return;
                          switch($TYPE) {
                              case '0x': # Octet
                                  #return $this->hex2bin($this->read($LEN-1));
                                  return $this->read($LEN-1);
                                  break;
                              case '5x': # Integer
                                  $temp = hexdec($this->read($LEN-1));
                                  $this->debug('Value: ('.$temp.')');
                                  if($temp>32768){
                                      return $temp -= 65536;
                                  }
                                  else{
                                      return $temp;
                                  }
                                  break;
                              case '6x': # UnsignedInt
                                  return hexdec($this->read($LEN-1));
                                  break;
                              case '7x': # List
                                  $list_indent++;
                                  for($i=1;$i<=$LEN;$i++) $this->parse_sml_data($i);
                                  $list_indent--;
                                  break;
                              default :
                                  $this->error("Error, unexpected type '$TYPE' TL=$TYPE_LEN ".$this->data);
                          }
                          #echo "\n";
                          return $TYPE_LEN;
                      }
                  Allerdings tat sich gleich noch ein weiteres Problem auf. Negative Werte werden nicht per UDP an den Miniserver übertragen, sondern nur eine "0".
                  Fehler liegt in der Datei sm_logger.pl.

                  Code:
                  ### Energy consumption: Power  (OBIS mixture - no standard?)
                          ($power1) = $dumpbuffer =~ /[\n|\r|:]1\.7\.0[\*255|\*00]*\(([-\d\.]+)/;
                          ($power2) = $dumpbuffer =~ /[\n|\r|:]2\.7\.0[\*255|\*00]*\(([-\d\.]+)/;
                          ($power3) = $dumpbuffer =~ /[\n|\r|:]15\.7\.0[\*255|\*00]*\(([-\d\.]+)/;
                          ($power4) = $dumpbuffer =~ /[\n|\r|:]16\.7\.0[\*255|\*00]*\(([-\d\.]+)/;
                  Vorher wars so: ($power4) = $dumpbuffer =~ /[\n|\r|:]16\.7\.0[\*255|\*00]*\(([\d\.]+)/;

                  Jetzt kommt allerdings noch ein wirklicher Hammer!

                  Wenn mein Iskra Zähler MT691 in Display anzeigt, das 100W eingespeist werden, also A-, müsste über die Schnittstelle eigentlich auch -100W ausgegeben werden. Er gibt aber zwischen 200-300W Bezug aus. Bei Leistung 500W A- wird es richtig ausgegeben. Da bin ich grad noch dran mit dem Bayernwerk, was da los ist. Positive Leistung wird über die Schnittstelle korrekt ausgegeben, auch wenn es nur 100W Bezug sind.

                  Kommentar

                  • Gargamel
                    MS Profi
                    • 16.12.2018
                    • 691

                    Hallo,
                    das SmartMeter Plugin zeigt mir eine Warnmeldung an.
                    Weiß jemand was zu tun ist oder kann man die Warnung einfach ignorieren? Das Pugin läuft seit ein paar Tagen ohne Probleme.

                    Habe die aktuelle Loxberry Version auf einem Raspberry Pi3 und betreibe das Plugin mit 2 Weidmann Leseköpfe.
                    Angehängte Dateien

                    Kommentar


                    • Prof.Mobilux
                      Prof.Mobilux kommentierte
                      Kommentar bearbeiten
                      Kannst Du ignorieren.
                  • blacksun
                    MS Profi
                    • 20.01.2016
                    • 557

                    Hallo zusammen,

                    ich nehme Bezug auf den Beitrag https://www.loxforum.com/forum/proje...491#post190491

                    Das Bayernwerk hat mich gerade angerufen und mir mitgeteilt, das man den Value-Wert nicht einfach von hex --> dez umrechnen darf, sondern es mit dem 2er Komplement umrechnen muss. Dann passt der übermittelte Wert. Hätte nicht gedacht, das ich eine so qualifizierte Antwort und vorallem so schnell vom Bayernwerk erhalte.

                    Angezeigt hat der Zähler -130 Watt A-, also Lieferung. Rechnet man jetzt sturr mit dem Rechner 82hex in auf dez erhält man 130 Watt. Das ist falsch, da der Zähler tatsächlich in diesem Moment -130 Watt angezeigt hat. Rechnet man jetzt über das 2er Komplement um erhält man:

                    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

                    Somit würde der übertragene Wert dann richtig interpretiert.

                    Hier das Telegramm aufgeschlüsselt. Siehe dazu das angehängte Bild.

                    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, das ist aber falsch)
                    01 => ValueSignature: ohne Werte bzw. 01=optional

                    Aber jetzt bräuchte ich eure Hilfe zur PHP Programmierung.

                    Bisher habe ich die Umrechnung so programmiert.
                    Code:
                    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 nicht machen :-)

                    Ich habe grad mal gegoogelt nach PHP 2er Komplement, hab aber nichts gefunden, was ich verstanden habe.

                    Wer kann mir dazu helfen, dann bin ich am Ziel mit meinem "Zählerproblem".

                    Vielen Dank schonmal.

                    Gruß
                    Michael
                    Zuletzt geändert von blacksun; 07.03.2019, 12:32.

                    Kommentar

                    • w4Rd3n
                      Smart Home'r
                      • 03.09.2018
                      • 43

                      Hallo zusammen. Gibt es diese Leseköpfe nur mit USB ? Kann man die Leitung verlängern ?
                      Brauche 8m länge bis zum Rasperry pi innen.

                      Kommentar

                    • blacksun
                      MS Profi
                      • 20.01.2016
                      • 557

                      Servus zusammen,

                      den Code habe ich folgendermaßend angepasst. So funktionierts jetzt einwandfrei. Kann diese Änderung evtl. in das Plugin Smartmeter übernommen werden?

                      Auszug aus der SML Spezifikation. TL Field kann als Wert 52, 53, 55 und 59 sein.

                      Klicke auf die Grafik für eine vergrößerte Ansicht

Name: 1.png
Ansichten: 2178
Größe: 27,6 KB
ID: 193684

                      Code:
                      case '5x': # Integer
                                      if ($LEN==2) {
                                          # 8 Bit signed Integer
                                          $temp = hexdec($this->read($LEN-1));
                                          $this->debug('Value: ('.$temp.')');
                                          if($temp & 0x80) {
                                              # negativer Wert, Umrechnung 2er Komplement    
                                              $temp -= pow(2,8); # 256
                                              $this->debug('Value mit Vorzeichenbetrachtung: ('.$temp.')');
                                              return $temp;
                                          }
                                          else{
                                              return $temp;
                                          }
                                      }
                                      if ($LEN==3) {
                                          # 16 Bit signed Integer
                                          $temp = hexdec($this->read($LEN-1));
                                          $this->debug('Value Rohwert: ('.$temp.')');
                                          if($temp & 0x8000) {
                                              # negativer Wert, Umrechnung 2er Komplement    
                                              $temp -= pow(2,16); # 65536
                                              $this->debug('Value mit Vorzeichenbetrachtung: ('.$temp.')');
                                              return $temp;
                                          }
                                          else{
                                              return $temp;
                                          }
                                      }
                                      if ($LEN==5) {
                                          # 32 Bit signed Integer
                                          $temp = hexdec($this->read($LEN-1));
                                          $this->debug('Value Rohwert: ('.$temp.')');
                                          if($temp & 0x80000000) {
                                              # negativer Wert, Umrechnung 2er Komplement    
                                              $temp -= pow(2,32); # 4294967296
                                              $this->debug('Value mit Vorzeichenbetrachtung: ('.$temp.')');
                                              return $temp;
                                          }
                                          else{
                                              return $temp;
                                          }
                                      }
                                      if ($LEN==9) {
                                          # 64 Bit signed Integer
                                          $temp = hexdec($this->read($LEN-1));
                                          $this->debug('Value Rohwert: ('.$temp.')');
                                          if($temp & 0x8000000000000000) {
                                              # negativer Wert, Umrechnung 2er Komplement    
                                              $temp -= pow(2,64); # 18446744073709551616
                                              $this->debug('Value mit Vorzeichenbetrachtung: ('.$temp.')');
                                              return $temp;
                                          }
                                          else{
                                              return $temp;
                                          }
                                      }
                                      break;
                      Zuletzt geändert von blacksun; 11.03.2019, 10:49.

                      Kommentar

                      • blacksun
                        MS Profi
                        • 20.01.2016
                        • 557

                        Zitat von Oli
                        Hallo,
                        das sind ja super Neuigkeiten! Ich habe mit dem vzlogger schonmal probiert meinen Zähler auszulesen und es hat auch geklappt. Leider lieferte die Info-Schnittstelle nur den gesamten Verbrauch. Jetzt habe ich meinen Energieversorger so lange genervt, bis dieser mir erlaubt hat eine abgeklebte/versiegelte MSB-Schnittstelle am Easymeter Q3C zu nutzen. Diese sendet ohne Aufforderung alle 2 Sekunden einen Datensatz. Dieser beinhaltet neben den Verbrauch auch die Leistung der 3 Leiter und die Summenleistung. Im Log vom Smartmeter Plugin 1.0 bekomme ich auch Werte, allerdings nur in der Übersicht und nicht unter den OBIS Werte...
                        Folglich kann auch nichts zum Miniserver gesendet oder per HTTP abgerufen werden. Gibt es für mich ein Howto oder soll ich mich lieber auf das VZ Plugin freuen?
                        Servus,

                        ich kann dir a bisschen weiterhelfen. Ich habe dein Telegramm mal aufgeschlüsselt. Du musst zuerst mal in der php_sml_parser.class.php in den ersten Zeilen folgendes hinzufügen.

                        Code:
                          '0100150700FF' => array('1-0:21.7.0*255','Momentante Wirkleistung Bezug L1'),
                          '0100290700FF' => array('1-0:41.7.0*255','Momentante Wirkleistung Bezug L2'),
                          '01003D0700FF' => array('1-0:61.7.0*255','Momentante Wirkleistung Bezug L3'),
                          '0101010800FF' => array('1-1:1.8.0*255','Wirkarbeit Bezug Total: Zählerstand'),
                          '0101010801FF' => array('1-1:1.8.1*255','Wirkarbeit Tarif 1 Bezug'),
                          '0101010802FF' => array('1-1:1.8.2*255','Wirkarbeit Tarif 2 Bezug'),
                          '0101010803FF' => array('1-1:1.8.3*255','Wirkarbeit Tarif 3 Bezug'),
                          '0101010804FF' => array('1-1:1.8.4*255','Wirkarbeit Tarif 4 Bezug'),
                          '0101010805FF' => array('1-1:1.8.5*255','Wirkarbeit Tarif 5 Bezug'),
                          '0101010806FF' => array('1-1:1.8.6*255','Wirkarbeit Tarif 6 Bezug'),
                          '0101010807FF' => array('1-1:1.8.7*255','Wirkarbeit Tarif 7 Bezug'),
                          '0101010808FF' => array('1-1:1.8.8*255','Wirkarbeit Tarif 8 Bezug')
                        Dann sollte es ungefähr so aussehen.
                        Code:
                        <?php
                        class SML_PARSER {
                            public $files;
                         private $obis_arr = array(
                                '0100000000FF' => array('1-0:0.0.0*255','Seriennummer'),
                                '0100010700FF' => array('1-0:1.7.0*255','Momentane Wirkleistung Bezug'),
                                '0100020700FF' => array('1-0:2.7.0*255','Momentane Wirkleistung Lieferung'),
                                '0100010801FF' => array('1-0:1.8.1*255','Wirk-Energie Tarif 1 Bezug'),
                                '0100020801FF' => array('1-0:2.8.1*255','Wirk-Energie Tarif 1 Lieferung'),
                                '0100010802FF' => array('1-0:1.8.2*255','Wirk-Energie Tarif 2 Bezug'),
                                '0100020802FF' => array('1-0:2.8.2*255','Wirk-Energie Tarif 2 Lieferung'),
                                '0100010803FF' => array('1-0:1.8.3*255','Wirk-Energie Tarif 3 Bezug'),
                                '0100020803FF' => array('1-0:2.8.3*255','Wirk-Energie Tarif 3 Lieferung'),
                                '8181C78203FF' => array('129-129:199.130.3*255','Hersteller-ID '),
                                '8181C78205FF' => array('129-129:199.130.5*255','Public-Key'),
                                '01000F0700FF' => array('1-0:15.7.0*255','Active Power'),
                                '0100010800FF' => array('1-0:1.8.0*255','Wirkarbeit Bezug Total: Zaehlerstand'),
                                '0100020800FF' => array('1-0:2.8.0*255','Wirkarbeit Lieferung Total: Zaehlerstand'),
                                '0100000009FF' => array('1-0:0.0.9*255',' Geraeteeinzelidentifikation'),
                                '00006001FFFF' => array('0-0:60.1.255*255','Fabriknummer'),
                                '0100100700FF' => array('1-0:16.7.0*255','aktuelle Gesamtwirkleistung'),
                                '0100150700FF' => array('1-0:21.7.0*255','Momentante Wirkleistung Bezug L1'),
                                '0100290700FF' => array('1-0:41.7.0*255','Momentante Wirkleistung Bezug L2'),
                                '01003D0700FF' => array('1-0:61.7.0*255','Momentante Wirkleistung Bezug L3'),
                                '0101010800FF' => array('1-1:1.8.0*255','Wirkarbeit Bezug Total: Zählerstand'),
                                '0101010801FF' => array('1-1:1.8.1*255','Wirkarbeit Tarif 1 Bezug'),
                                '0101010802FF' => array('1-1:1.8.2*255','Wirkarbeit Tarif 2 Bezug'),
                                '0101010803FF' => array('1-1:1.8.3*255','Wirkarbeit Tarif 3 Bezug'),
                                '0101010804FF' => array('1-1:1.8.4*255','Wirkarbeit Tarif 4 Bezug'),
                                '0101010805FF' => array('1-1:1.8.5*255','Wirkarbeit Tarif 5 Bezug'),
                                '0101010806FF' => array('1-1:1.8.6*255','Wirkarbeit Tarif 6 Bezug'),
                                '0101010807FF' => array('1-1:1.8.7*255','Wirkarbeit Tarif 7 Bezug'),
                                '0101010808FF' => array('1-1:1.8.8*255','Wirkarbeit Tarif 8 Bezug')
                            );
                        Achte besonders auf Kommas und Strichpunkte.

                        Wenn getan, müsste eigentlich schonmal der richtige Text bei den Leistungen erscheinen. Dann schauen wir weiter. Die nächsten Änderungen stehen dann in der sm_logger.pl Datei an.

                        Die Obiskennzahlen findet man im Telegramm hier:
                        Code:
                        77
                        070101010800FF
                        630190
                        72
                        6201
                        650942EB92
                        621E Wh
                        52FC
                        69000000261B8CEF52 dez 163670978386
                        01
                        
                        77
                        070101010801FF
                        630190
                        72
                        6201
                        650942EB92
                        621E Wh
                        5201
                        650018F650 dez 1635920
                        01
                        
                        77
                        070101010802FF
                        630190
                        72
                        6201
                        650942EB92
                        621E Wh
                        5201
                        6500000071 dez 113
                        01
                        
                        77
                        070101010803FF
                        630190
                        72
                        6201
                        650942EB92
                        621E Wh
                        5201
                        6500000071 dez 113
                        01
                        
                        77
                        070101010804FF
                        630190
                        72
                        6201
                        650942EB92
                        621E Wh
                        5201
                        6500000070 dez 112
                        01
                        
                        77
                        070101010805FF
                        630190
                        72
                        6201
                        650942EB92
                        621E Wh
                        5201
                        6500000071 dez 113
                        01
                        
                        77
                        070101010806FF
                        630190
                        72
                        6201
                        650942EB92
                        621E Wh
                        5201
                        6500000071 dez 113
                        01
                        
                        77
                        070101010807FF
                        630190
                        72
                        6201
                        650942EB92
                        621E Wh
                        5201
                        6500000071 dez 113
                        01
                        
                        77
                        070101010808FF
                        630190
                        72
                        6201
                        650942EB92
                        621E Wh
                        5201
                        6500000070 dez 112
                        01
                        
                        77
                        070100010700FF
                        01
                        01
                        621B Watt
                        52FE
                        550000EC9B dez 60571
                        01
                        
                        77
                        070100150700FF
                        01
                        01
                        621B Watt
                        52FE
                        5500005EDC dez 24284
                        01
                        
                        77
                        070100290700FF
                        01
                        01
                        621B Watt
                        52FE
                        5500008244 dez 33348
                        01
                        
                        77
                        0701003D0700FF
                        01
                        01
                        621B Watt
                        52FE
                        5500000B7B dez 2939
                        01
                        Die zu änderende Dateien findest du auf dem Loxberry unter opt/webfrontend/cgi/plugins/smartmeter/bin

                        Lege dir aber unbedingt vorher eine Datensicherung der Dateien an, die du veränderst. Ich kanns nämlich bei mir nicht testen.

                        Wenn erledigt, frage den Zähler nochmal ab und hänge hier die Logs an, wie du es schon gemacht hast. Dann schauen wir weiter.

                        Viel Erfolg.
                        Michael
                        Zuletzt geändert von blacksun; 08.03.2019, 18:26.

                        Kommentar

                        Lädt...