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