Der Zähler antwortet leider nur auf meine Frage und sendet keine kontinuierlichen Daten raus. Es ist ein EMH ITZ -> Datenblatt und wird folgendermaßen angesprochen:
300 Baud
1 Stopbit
7 Datenbit
Parity even
Er antwortet auf "/?!" gesendet mit CR-LF dann im Klartext mit der OBIS-Zahl und den Werten.
Im Netz habe ich folgendes Script gefunden, angepasst und seit einem Neustart des Wiregate und damit verbundenen Wechsel von /dev/ttyUSB-2-4 auf /dev/ttyUSB-1-4 läuft das script auch sauber durch, beendet sich aber noch nicht. Das ist mir soweit auch klar weil "while(1)" ja wohl unendlich ist.
Wie bekomme ich jetzt sauber die 1.8.0 (Zählerstand in kWh) separiert? Den Rest brauch ich eigentlich nicht wirklich. Trotz aller Bemühungen hab ich das mit Arrays immer noch nicht drauf, aber das wäre hier wohl von Vorteil.
Das ganze würde ich erstmal als Cronjob laufen lassen bis ich mehr über den Zähler erfahren habe und irgendwie mehr Speed in die Abfrage bekomme.
Hier das Script und das Ergebnis aus der Konsole:
Code:
#!/usr/bin/perl # # (m)ein Stromz0hler mit IR-Schnittstelle blubbert nach einem "Anforderung- # telegramm" Daten raus. Das Telegramm ist mit 300 Baud, 7 Bit, 1 Stoppbit # und gerader Parit0t zu senden. Das ist der Initialmodus von Ger0ten, # die das Protokoll IEC 62056-21 implementieren. # # Autor: Andreas Schulze # Bugfix: Eric Schanze # Datum: 20120302 # my $PORT='/dev/ttyUSB-1-4'; my $anforderungstelegramm = "\n/?!\r\n"; use warnings; use strict; use utf8; use Device::SerialPort; my $tty = new Device::SerialPort($PORT) || die "can't open $PORT: $!"; $tty->baudrate(300) || die 'fail setting baudrate'; $tty->databits(7) || die 'fail setting databits'; $tty->stopbits(1) || die 'fail setting stopbits'; $tty->parity("even") || die 'fail setting parity'; $tty->write_settings || die 'fail write settings'; $tty->rts_active(1); $tty->dtr_active(1); $tty->read_char_time(500); # 0.5 seconds for each character $tty->read_const_time(3000); # 3 second per unfulfilled "read" call #$tty->debug(1); my $num_out = $tty->write($anforderungstelegramm); die "write failed\n" unless ($num_out); die "write inclomplete\n" unless ($num_out == length($anforderungstelegramm)); print "$num_out Bytes written\n"; my ($num_read, $s); while(1) { ($num_read, $s) = $tty->read(10); print $s; } $tty->close || die "can't close $PORT: $!";
Code:
root@wiregate403:~# perl /var/tmp/test2.pl 6 Bytes written /EMH4\@--ITZ-G0039E F.F(00000000) 0.0.0(02200263) 0.0.1(02922369) 0.0.2(00000000) 0.1.0(03) 0.1.2*03(0120301000000) 0.1.2*02(0120201000000) 0.1.2*01(0120123113234) 0.1.2*00(0000000000000) 0.1.2*99(0000000000000) 0.1.2*98(0000000000000) 0.1.2*97(0000000000000) 0.1.2*96(0000000000000) 0.1.2*95(0000000000000) 0.1.2*94(0000000000000) 0.1.2*93(0000000000000) 0.1.2*92(0000000000000) 0.1.2*91(0000000000000) 0.1.2*90(0000000000000) 0.1.2*89(0000000000000) 0.2.2(11131719) 0.9.1(1222325) 0.9.2(1120329) 1.8.0(0001715.0*kWh) 1.8.0*03(0001307.3*kWh) 1.8.0*02(0000507.0*kWh) 1.8.0*01(0000009.3*kWh) 1.8.0*00(0000000.0*kWh) 1.8.0*99(0000000.0*kWh) 1.8.0*98(0000000.0*kWh) 1.8.0*97(0000000.0*kWh) 1.8.0*96(0000000.0*kWh) 1.8.0*95(0000000.0*kWh) 1.8.0*94(0000000.0*kWh) 1.8.0*93(0000000.0*kWh) 1.8.0*92(0000000.0*kWh) 1.8.0*91(0000000.0*kWh) 1.8.0*90(0000000.0*kWh) 1.8.0*89(0000000.0*kWh) 1.8.1(0001707.8*kWh) 1.8.1*03(0001300.0*kWh) 1.8.1*02(0000499.7*kWh) 1.8.1*01(0000002.0*kWh) 1.8.1*00(0000000.0*kWh) 1.8.1*99(0000000.0*kWh) 1.8.1*98(0000000.0*kWh) 1.8.1*97(0000000.0*kWh) 1.8.1*96(0000000.0*kWh) 1.8.1*95(0000000.0*kWh) 1.8.1*94(0000000.0*kWh) 1.8.1*93(0000000.0*kWh) 1.8.1*92(0000000.0*kWh) 1.8.1*91(0000000.0*kWh) 1.8.1*90(0000000.0*kWh) 1.8.1*89(0000000.0*kWh) 1.8.2(0000003.2*kWh) 1.8.2*03(0000003.2*kWh) 1.8.2*02(0000003.2*kWh) 1.8.2*01(0000003.2*kWh) 1.8.2*00(0000000.0*kWh) 1.8.2*99(0000000.0*kWh) 1.8.2*98(0000000.0*kWh) 1.8.2*97(0000000.0*kWh) 1.8.2*96(0000000.0*kWh) 1.8.2*95(0000000.0*kWh) 1.8.2*94(0000000.0*kWh) 1.8.2*93(0000000.0*kWh) 1.8.2*92(0000000.0*kWh) 1.8.2*91(0000000.0*kWh) 1.8.2*90(0000000.0*kWh) 1.8.2*89(0000000.0*kWh) 1.8.3(0000002.0*kWh) 1.8.3*03(0000002.0*kWh) 1.8.3*02(0000002.0*kWh) 1.8.3*01(0000002.0*kWh) 1.8.3*00(0000000.0*kWh) 1.8.3*99(0000000.0*kWh) 1.8.3*98(0000000.0*kWh) 1.8.3*97(0000000.0*kWh) 1.8.3*96(0000000.0*kWh) 1.8.3*95(0000000.0*kWh) 1.8.3*94(0000000.0*kWh) 1.8.3*93(0000000.0*kWh) 1.8.3*92(0000000.0*kWh) 1.8.3*91(0000000.0*kWh) 1.8.3*90(0000000.0*kWh) 1.8.3*89(0000000.0*kWh) 1.8.4(0000002.0*kWh) 1.8.4*03(0000002.0*kWh) 1.8.4*02(0000002.0*kWh) 1.8.4*01(0000002.0*kWh) 1.8.4*00(0000000.0*kWh) 1.8.4*99(0000000.0*kWh) 1.8.4*98(0000000.0*kWh) 1.8.4*97(0000000.0*kWh) 1.8.4*96(0000000.0*kWh) 1.8.4*95(0000000.0*kWh) 1.8.4*94(0000000.0*kWh) 1.8.4*93(0000000.0*kWh) 1.8.4*92(0000000.0*kWh) 1.8.4*91(0000000.0*kWh) 1.8.4*90(0000000.0*kWh) 1.8.4*89(0000000.0*kWh) 2.8.0(0000002.2*kWh) 2.8.0*03(0000002.2*kWh) 2.8.0*02(0000002.2*kWh) 2.8.0*01(0000002.2*kWh) 2.8.0*00(0000000.0*kWh) 2.8.0*99(0000000.0*kWh) 2.8.0*98(0000000.0*kWh) 2.8.0*97(0000000.0*kWh) 2.8.0*96(0000000.0*kWh) 2.8.0*95(0000000.0*kWh) 2.8.0*94(0000000.0*kWh) 2.8.0*93(0000000.0*kWh) 2.8.0*92(0000000.0*kWh) 2.8.0*91(0000000.0*kWh) 2.8.0*90(0000000.0*kWh) 2.8.0*89(0000000.0*kWh) !
Gruß Mirko
Einen Kommentar schreiben: