[vz-users] S0 an RS232 auswerten

Altmarkweb b.schulz at altmarkweb.de
Mon Feb 18 23:29:49 CET 2013


Mit freundlichen Grüßen

Bernd Schulz
AltmarkWeb
Grüner Stegel 4
38489 Rohrberg

Tel.: 039007 91000
Mail:b.schulz at altmarkweb.de

Am 17.02.2013 20:40, schrieb Altmarkweb:
> Am 09.02.2013 21:27, schrieb Paul Muster:
>> On 09.02.2013 21:23, Altmarkweb wrote:
>>
>>> habe einen Drehstromzähler mit S0-Anschluß (siehe
>>> http://www.elektroladen24.eu/artikeldet.php?proid=341).
>>> Diesen möchte ich wie hier beschrieben (siehe
>>> http://wiki.volkszaehler.org/hardware/controllers/s0-an-rs232) 
>>> auslesen.
>>> Ein alter Laptop mit Linux (Puppy) soll probeweise herhalten bis die
>>> Rapsberrys da sind.
>>>
>>> stty time 1 min 1 -icanon < /dev/ttyS0
>>>
>>> ( strace -ttt -e read cat  < /dev/ttyUSB0 > /dev/null ) 2>&1 | awk
>>> 'NR==1{t0=$1;next}{t=$1; print 3600e3 /(t-t1)/2000 , 
>>> t-t0,t-t1,$0;t1=t}'
>>> Kann mir das mal jemand "übersetzen"? So richtig verstehe ich das 
>>> nicht.
>>> 366 Watt kann nicht stimmen, der 4.8 sek Rythmus und der Timestaamp 
>>> passen.
>> Dann musst du wohl den Faktor 2000, der beschreibt, wie viele Impuls pro
>> kWh kommen, anpassen.
>>
> Mit dem alten PIII und Puppy-Linux hat ist der s0 ausgelesen worden, 
> auch mit dem USB-Seriell-Adapter.
> Mit dem Raspberry klappt es nicht wirklich.
>
> pi at raspberrypi ~ $ strace -ttt -e read cat  < /dev/ttyUSB0 > /dev/null
> 1361128365.776660 read(3, 
> "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\10\4\0\0004\0\0\0"..., 
> 512) = 512
> 1361128365.780240 read(3, 
> "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 
> 1240) = 1240
> 1361128365.783141 read(3, 
> "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 
> 47) = 47
> 1361128365.788542 read(3, 
> "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\214y\1\0004\0\0\0"..., 
> 512) = 512
> 1361128365.791591 read(3, 
> "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 
> 1360) = 1360
> 1361128365.794358 read(3, 
> "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 
> 47) = 47
> 1361128365.804673 read(0, "\0", 32768)  = 1
> 1361128394.323445 read(0, "\0", 32768)  = 1
> 1361128399.193820 read(0, "\0", 32768)  = 1
>
> Meistens bleibt die Ausgabe nach der 6.Zeile stehen.
> Auf dem Raspberry ist standardmäßig mawk installiert. Damit erfolgt 
> keine Ausgabe.
> Habe dann apt-get install gawk aufgerufen.
>
> pi at raspberrypi ~ $ ( strace -ttt -e read cat  < /dev/ttyUSB0 > 
> /dev/null ) 2>&1 | gawk 'NR==1{t0=$1;next}{t=$1; print 
> 3600e3/(t-t1)/800,t-t0,t-t1,$0;t1=t}'
> 3.30608e-06 0.00165701 1.36113e+09 1361128645.886707 read(3, 
> "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 
> 1240) = 1240
> 1.35709e+06 0.00497293 0.00331593 1361128645.890023 read(3, 
> "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 
> 47) = 47
> 831653 0.0103838 0.00541091 1361128645.895434 read(3, 
> "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\214y\1\0004\0\0\0"..., 
> 512) = 512
> 1572864 0.0132449 0.00286102 1361128645.898295 read(3, 
> "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 
> 1360) = 1360
> 1.4409e+06 0.0163679 0.00312304 1361128645.901418 read(3, 
> "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 
> 47) = 47
>
> Weiter geht es nicht.
>
> Gruß Bernd
>

Nun scheint es zu klappen, warum auch immer.

pi at raspberrypi ~ $ ( strace -ttt -read cat  < /dev/ttyUSB0 > /dev/null ) 
2>&1 | gawk 'NR==1{t0=$1;next}{t=$1; print 3600e3/(t-t1)/800,$0;t1=t;}');
3.30584e-06 1361225901.382526 read(3, 
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 
1240) = 1240
1.38629e+06 1361225901.385772 read(3, 
"A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 47) = 47
848897 1361225901.391073 read(3, 
"\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\214y\1\0004\0\0\0"..., 
512) = 512
1.66118e+06 1361225901.393782 read(3, 
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 
1360) = 1360
1.57391e+06 1361225901.396641 read(3, 
"A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 47) = 47
435455 1361225901.406975 read(0, "\0", 32768)  = 1
733.318 1361225907.543471 read(0, "\0", 32768)  = 1
672.893 1361225914.231016 read(0, "\0", 32768)  = 1
669.77 1361225920.949739 read(0, "\0", 32768)  = 1
685.382 1361225927.515417 read(0, "\0", 32768)  = 1
680.516 1361225934.128043 read(0, "\0", 32768)  = 1
677.165 1361225940.773400 read(0, "\0", 32768)  = 1
678.939 1361225947.401387 read(0, "\0", 32768)  = 1
678.347 1361225954.035159 read(0, "\0", 32768)  = 1
671.983 1361225960.731758 read(0, "\0", 32768)  = 1
672.977 1361225967.418467 read(0, "\0", 32768)  = 1
677.744 1361225974.058140 read(0, "\0", 32768)  = 1
680.616 1361225980.669802 read(0, "\0", 32768)  = 1
675.607 1361225987.330483 read(0, "\0", 32768)  = 1

Ich möchte diese Angaben (675.607 Watt, ...) in eine DB speichern mit 
einer Spalte für die augenblickliche Leistung und einer timestamp Spalte.
Wie bekomme ich den Wert übergeben?

( strace -ttt -e write cat < /dev/ttyUSB0 > /dev/null ) 2>&1 | gawk 
'NR==1{t0=$1;next}{t=$1; print 3600e3/(t-t1)/800,$0;t1=t; system("wget 
-O- \"http://localhost/zaehler/insert.php?z=\"" ((t-t1)/800) " # >& 
/dev/null"); }'

liefert

758.137 1361226439.228896 write(1, "\0", 1)     = 1
--2013-02-18 23:27:19--  http://localhost/zaehler/insert.php?z=0
Auflösen des Hostnamen »localhost (localhost)«... 127.0.0.1, ::1
Verbindungsaufbau zu localhost (localhost)|127.0.0.1|:80... verbunden.
HTTP-Anforderung gesendet, warte auf Antwort... 200 OK
Länge: 47 [text/html]
In »»STDOUT«« speichern.

  0% [ ] 0           --.-K/s 
I100%[====================================================================================================================================================================>] 
47          --.-K/s   in 0s

2013-02-18 23:27:19 (567 KB/s) - auf die Standardausgabe geschrieben [47/47]





More information about the volkszaehler-users mailing list