<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Hallo, <br>
    <br>
    aus unten angeführte Links von "Peter" habe ich mir Obis.cpp
    angesehen:<br>
    <pre>/* general */
        {Obis(  1,   0,   1,   7,  DC,  DC), "power",         "Wirkleistung  (Summe)"},
        {Obis(  1,   0,  21,   7,  DC,  DC), "power-l1",              "Wirkleistung  (Phase 1)"},
        {Obis(  1,   0,  41,   7,  DC,  DC), "power-l2",              "Wirkleistung  (Phase 2)"},
        {Obis(  1,   0,  61,   7,  DC,  DC), "power-l3",              "Wirkleistung  (Phase 3)"},

        {Obis(  1,   0,  12,   7,  DC,  DC), "voltage",               "Spannung      (Mittelwert)"},
        {Obis(  1,   0,  32,   7,  DC,  DC), "voltage-l1",    "Spannung      (Phase 1)"},
        {Obis(  1,   0,  52,   7,  DC,  DC), "voltage-l2",    "Spannung      (Phase 2)"},
        {Obis(  1,   0,  72,   7,  DC,  DC), "voltage-l3",    "Spannung      (Phase 3)"},

        {Obis(  1,   0,  11,   7,  DC,  DC), "current",               "Stromstaerke  (Summe)"},
        {Obis(  1,   0,  31,   7,  DC,  DC), "current-l1",    "Stromstaerke  (Phase 1)"},
        {Obis(  1,   0,  51,   7,  DC,  DC), "current-l2",    "Stromstaerke  (Phase 2)"},
        {Obis(  1,   0,  71,   7,  DC,  DC), "current-l3",    "Stromstaerke  (Phase 3)"},

        {Obis(  1,   0,  14,   7,   0,  DC), "frequency",             "Netzfrequenz"},
        {Obis(  1,   0,  12,   7,   0,  DC), "powerfactor",   "Leistungsfaktor"},

        {Obis(  0,   0,  96,   1,  DC,  DC), "device",                "Zaehler Seriennr."},
        {Obis(  1,   0,  96,   5,   5,  DC), "status",                "Zaehler Status"},

        {Obis(  1,   0,   1,   8,       DC, DC), "counter",           "Zaehlerstand Wirkleistung"},
        {Obis(  1,   0,   2,   8,  DC, DC), "counter-out",    "Zaehlerstand Lieferg."},

</pre>
    <pre><font face="sans-serif">BSP bei mir:

1.8.1(2.538*kWh) 

2.8.1(24666.715*kWh) 

Daraus erkenne ich, dass meine Datenausgeabe des Lesekopfes erkannt werden müsste, wenn Die Daten richtig vom MeterD0.cpp
übergeben werden würden.

In MeterD0 wird aber jede Zeile der Lesekopfausgabe gehandelt. Das möchte ich gerne verhindern, da ich meine, dass folgende Zeilen Probleme bereiten:
        
#F.F() 
..(32958) 
..1(G23-511-C.1/95-3762) 
C.7.() 

Also würde ich gerne in MeterD0 einen "Abfrage" einfügen, die alle Zeilen, die, nachdem die Seriennummer ausgelesen wurde, daraufhin überprüft, ob als erster Wert eine "Zahl" steht. Die Zahl soll auch nicht "0" sein.
Solche Zeilen sollen dann vollständig ignoriert werden.</font><meta http-equiv="CONTENT-TYPE" content="text/html; charset=ISO-8859-1">
</pre>
    <br>
    <pre>                 case IDENTIFICATION:            /* IDENTIFICATION has 16 bytes */</pre>
    <pre>                         if (byte == '\r' || byte == '\n') { /* detect line end */</pre>
    <pre>                                 identification[byte_iterator] = '\0'; /* termination */</pre>
    <pre>                                 print("identification ", identification);</pre>
    <pre>                                 context = FF_CODE;      /*+++ <--- Hier müsste auf die "Zahlenueberpruefung" gesprungen werden. +++++ */</pre>
    <pre>                                 byte_iterator = 0;</pre>
    <pre>                         }</pre>
    <pre>                         else {</pre>
    <pre>                                 if(!isprint(byte)) {</pre>
    <pre>                                         print(log_error, "====> binary character '%x'", name().c_str(), byte);</pre>
    <pre>                                         //error_flag=true;</pre>
    <pre>                                 }</pre>
    <pre>                                 else {</pre>
    <pre>                                         identification[byte_iterator++] = byte;</pre>
    <pre>                                 }</pre>
    <pre>                                 }</pre>
    <pre>                         break;</pre>
    <pre>
                        case START_LINE:</pre>
    <pre>                         break;</pre>
    <pre>                         </pre>
    <pre>    case Zahlenueberpruefung  ?????????</pre>
    <pre> </pre>
    <pre>                 case FF_CODE:</pre>
    <pre>                         if ((byte != '\n') && (byte != '\r')) </pre>
    <pre>                         {</pre>
    <pre>                         if (byte == ')') {</pre>
    <pre>                                                 </pre>
    <pre>                                 byte_iterator = 0;</pre>
    <pre>                                         print("OBIS_CODE ");</pre>
    <pre>                                 context = OBIS_CODE;</pre>
    <pre>                         }</pre>
    <pre>                                 else byte_iterator++;</pre>
    <pre>                         }</pre>
    <pre>                         break;</pre>
     
    <title></title>
    <meta name="GENERATOR" content="LibreOffice 3.5 (Linux)">
    <style type="text/css">
        <!--
                @page { margin: 2cm }
                PRE.cjk { font-family: "WenQuanYi Micro Hei", monospace }
                PRE.ctl { font-family: "Lohit Hindi", monospace }
                P { margin-bottom: 0.21cm }
        -->
        </style><br>
    Wobei diese "Zahlenueberpruefung" nach jedem '\n' gemacht werden
    müsste (also in JEDER Zeile), bis das '!' kommt.<br>
    <br>
    Ich kann mir zwar etwas lesen, wie das Programm funktioniert, kann
    es dann auch compilieren, aber leider reichen meine Kenntnisse nicht
    aus, um dies Überprüfung mit einzubauen.<br>
    Daher wäre ich sehr dankbar für Hilfe in dieser Richtung!<br>
    <br>
    <br>
    Am 2013-06-17 12:43, schrieb Peter Evertz:
    <br>
    <blockquote cite="mid:51C21866.3030404@gmx.at" type="cite">
      <blockquote type="cite">Am 17.06.2013 08:30, schrieb Michael Wulz:
        <br>
        <blockquote type="cite">Hallo,
          <br>
          <br>
          oben weiter hats schon jemand mal erwähnt - der Parser für d0
          ist recht rudimentär, um nicht
          <br>
          zu sagen 'unsauber programmiert'.
          <br>
          <br>
          Bin leider jetzt kein c++ Progger - sodass ich schnell helfen
          könnte. Peter hat angekündigt es zu machen
          <br>
          aber derzeit wenig Zeit.
          <br>
          <br>
          Denke wir werden mit dem Problem ein Zeitchen leben müssen ;-)
          <br>
          <br>
          gruss
          <br>
        </blockquote>
        Das Problem mit der Baudrate ist gefixed.
        <br>
        <br>
        <br>
        <a class="moz-txt-link-freetext" href="https://github.com/peterevertz/vzlogger.git">https://github.com/peterevertz/vzlogger.git</a>
        <br>
        Raspi-binary: <a class="moz-txt-link-freetext" href="http://www.peterevertz.net/vz/vzlogger.gz">http://www.peterevertz.net/vz/vzlogger.gz</a>
        <br>
        <br>
        Die Problem im D0 Parser werde mangels Zeit und D0 Zähler nicht
        fixen können.
        <br>
        <br>
        <br>
        Grüße
        <br>
        Peter
        <br>
        <br>
        <br>
        <blockquote type="cite">
          <br>
          Am 16.06.13 21:14, schrieb Anton:
          <br>
          <blockquote type="cite">Hallo,
            <br>
            <br>
            die Tipps in letzter Zeit brachten mich heute genau bis zu
            dem F.F() Problem:
            <br>
            <br>
            Ich habe den alternativen vzlogger als git geladen und die
            MeterD0 angepasst
            <br>
            Dann neu compiliert.
            <br>
            Dann folgendes u.a in vzlogger.conf eingetragen:
            <br>
            <br>
            "meters" : [{
            <br>
               "enabled" : true, /* disabled meters will be ignored */
            <br>
               "protocol" : "d0",
            <br>
               "device" : "/dev/ttyUSB0",
            <br>
               "baudrate" : 300,
            <br>
               "parity" : "7E1",
            <br>
               "pullseq" : "2F3F210D0A", /* HEX Darstellung der
            Pullsequen*/
            <br>
               "interval" : 61, /* Wartezeit bis zum nächsten Pul*/
            <br>
            <br>
                    }
            <br>
            ]}
            <br>
            <br>
            Danach wird der Logger erkannt, aber die Daten werden nicht
            eingelesen!!
            <br>
            <br>
            root@raspberrypi:/etc# vzlogger
            <br>
            [Jun 16 21:01:30][mtr0] Creating new meter with protocol d0.
            <br>
            [Jun 16 21:01:30][mtr0] Meter configured. enabled
            <br>
            [Jun 16 21:01:30]       New meter initialized (protocol=d0)
            <br>
            [Jun 16 21:01:30]       Have 1 meters.
            <br>
            [Jun 16 21:01:30][main] foreground=1, daemon=0, local=0
            <br>
            [Jun 16 21:01:30]       NOT Daemonize process...
            <br>
            [Jun 16 21:01:30]       Opened logfile /var/log/vzlogger.log
            <br>
            [Jun 16 21:01:30][]     ===> Start meters.
            <br>
            [Jun 16 21:01:30][mtr0] Meter connection established
            <br>
            [Jun 16 21:01:30][mtr0] Meter thread started
            <br>
            [Jun 16 21:01:30][mtr0] meter is opened. Start channels.
            <br>
            [Jun 16 21:01:30][]     Startup done.
            <br>
            [Jun 16 21:01:30][mtr0] Number of readers: 32
            <br>
            [Jun 16 21:01:30][mtr0] Config.daemon: 0
            <br>
            [Jun 16 21:01:30][mtr0] Config.local: 0
            <br>
            <br>
            <br>
            Was muss ich noch tun, damit dieses F.F() ignieriert wird!!
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            <br>
            Am 2013-06-12 07:31, schrieb Michael Wulz:
            <br>
            <blockquote type="cite">Hallo,
              <br>
              <br>
              habe jetzt mangels Zeit auch nur in etwa im Kopf.
              <br>
              <br>
              zum Einen die Baud-Rate wie schon im Thread beschrieben
              auf 300 anpassen
              <br>
              zum anderen muss im d0-Parser noch eingebaut werden, dass
              ein Zeichen wie: F.F()
              <br>
              <br>
              Siehe Auszug aus dem Thread etwas früher:
              <br>
              root@raspberrypi:/etc# ./lesekopfansprechen
              <br>
              6 Bytes written
              <br>
              /SAT63511C1948915
              <br>
              F.F()
              <br>
              ..(317119)
              <br>
              ..1(G23-511-C.1/948-915)
              <br>
              C.7.()
              <br>
              1.128.(.*kWh)
              <br>
              .1.(23)
              <br>
              .1.2*23(13-6-1
              <br>
              .1.2*22(13-5-1
              <br>
              .1.2*21(13-4-1
              <br>
              .1.2*2(13-3-1 .....
              <br>
              <br>
              <br>
              akzeptiert werden.
              <br>
              Jetzt kackt der Logger bei dem F.F() ab.
              <br>
              <br>
              gruss
              <br>
              Michael
              <br>
              <br>
              Am 11.06.13 23:38, schrieb Justin Otherguy:
              <br>
              <blockquote type="cite">Hi Michael,
                <br>
                <br>
                Am 11.06.2013 um 20:42 schrieb Michael Wulz:
                <br>
                <br>
                <blockquote type="cite">Nein leider, in der C++ fehlt
                  für d0 noch viel!
                  <br>
                  <br>
                  Mein Vzlogger bricht beim Parsen immer ab.
                  <br>
                  <br>
                  In der C Version gabs da mal einen Patch. Dieser ist
                  aber nicht in der C++ drin.
                  <br>
                </blockquote>
                damit wir den Missstand abstellen können:
                <br>
                kannst du den Fehler genauer beschreiben?
                <br>
                <br>
                Ich habe selbst keinen "d0"-Zähler im Zugriff und kann
                daher nicht testen.
                <br>
                <br>
                <br>
                Gruss, J.
                <br>
                <br>
              </blockquote>
              <br>
              <br>
            </blockquote>
            <br>
          </blockquote>
          <br>
        </blockquote>
        <br>
        <br>
      </blockquote>
      <br>
      <br>
    </blockquote>
    <br>
  </body>
</html>