[vz-dev] EMH ITZ Zähler mit Perl auslesen

maillist at mirkohirsch.de maillist at mirkohirsch.de
Thu Mar 29 10:16:14 CEST 2012


 Mein EMH ITZ arbeitet auch mit einem Abfragetelegramm.
 Mit hterm unter Windows kann ich mit den gleichen Einstellungen wie für 
 den Siemens TD-3511 die Daten super empfangen.
 Also habe ich das Script von Andreas einfach mal ausprobiert.

 Leider kommen nicht alle Zeichen in der Konsole an und auch die 
 Kommunikation bricht einfach ab.
 Hat jemand eine Idee woran es liegen könnte?

 root at wiregate403:~# perl /var/tmp/test.pl
 6 Bytes written
 F(.(2Z-G9E
 1(236
 1.)(
 1.2123)
 .1.(
 2*9)
 ^C
 root at wiregate403:~# perl /var/tmp/test.pl
 6 Bytes written
 4\@TZ-39EF.F()
 ..(22263)
 ..1(2922369)
 ..2()
 ..(3)
 .1.2*3(23)
 .12*2(1221)
 .1.2*1(2123113234)
 .1.2*99()
 .1.2*98()
 .1.2*97()
 .1.2*96()
 .1.2*95()
 1.2*94()
 .1.2*3()
 ..2*92()
 .1.2*91()
 .1.2*9()
 .1.2*89()
 .2.2(1113171)
 .9.11185)
 .9.(12329)
 1.8.(179.4*kWh)
 1.8.*3(137.3*kWh)
 1.8.*2(57.*kWh)
 1.8.*1(.3*kWh)
 1.8.*(.*kWh)
 1.8.*99(.*kWh)
 1.8.*98.kWh)
 1.8.*97(.*kWh)
 1.8.*96(.*kWh)
 1.8.*95(.*Wh)
 1.8.*93(.*kWh)
 18.*92(.*kWh)
 1.8.*91(.*kW)
 1.8.*9(.*kWh)
 1.8.*8(*kWh)
 1.8.1(172.1*kW)
 1.8.1*3(13.*kh)
 18.1*2(99.7*kWh)
 .8.1*1(2*kWh)
 1.8.1*(.*kWh)
 1.8.1*99(.*kWh)
 1.8.1*98(.*kWh)
 1.8.1*97(.*kWh)
 1.8.1*96.*kWh)
 1.8.1*95(.*kWh)
 .8.1*94(.*kWh)
 1.8.*93(.*kWh)
 1.8.1*9(

 Das Script selbst sieht folgendermaßen aus:

 #!/usr/bin/perl

 #
 # (m)ein Stromzähler mit IR-Schnittstelle blubbert nach einem 
 "Anforderung-
 # telegramm" Daten raus. Das Telegramm ist mit 300 Baud, 7 Bit, 1 
 Stoppbit
 # und gerader Parität zu senden. Das ist der Initialmodus von Geräten,
 # die das Protokoll IEC 62056-21 implementieren.
 #
 # Autor: Andreas Schulze
 # Bugfix: Eric Schanze
 # Datum: 20120302
 #

 my $PORT='/dev/ttyUSB-2-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->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);
 $tty->read_const_time(10);
 while(1) {
   ($num_read, $s) = $tty->read(1);
   print $s if $s;
 }

 $tty->close || die "can't close $PORT: $!";




More information about the volkszaehler-dev mailing list