Benutzer-Werkzeuge

Webseiten-Werkzeuge


hardware:channels:meters:power:edl-ehz:landisgyr_e110

Dies ist eine alte Version des Dokuments!


Landis & Gyr E110

Dieser z.B. von Stedin verbaute Zähler verhält sich qua Ansprache wie der E350 (e350).

Hardware

Mit einem IR-Schreib-Lesekopf kann der Zähler bei 300bd, 7E1 mittels Initialisierungssequenz „/?!\r\n“ die Kommunikation angestoßen werden.

Beispielantwort

--> "/?!\r\n"
/AMP45227-0614
--> chr(0x06).chr(0x30).chr(0x30).chr(0x30).chr(0x0D).chr(0x0A)
0.00.6.0(K86T0000)
0.00.6.1(21497110)
2.18.1(000000.00)
2.18.2(008278.78)
2.18.0(008278.78)
3.28.1(000000.00)
3.28.2(000000.00)
3.28.0(000000.00)

Auslesen per Perl-Script

Zum Auslesen dient eine (quick and dirty) modifizierte Version des Perl-Scripts von drs155m. Der E110 benötigt etwas mehr Zeit zum Lesen als der DRS155 (read_char_time =3, read_const_time = 10) und sendet 165 chars zurück ($port→read(165)). Der Programmiermodus hat nicht funktioniert und es scheint, dass der E110 keine aktuellen Verbrauchswerte liefert.

#!/usr/bin/perl -w

# teile von http://www.ip-symcon.de/forum/threads/21407-Stromz%C3%A4hler-mit-RS485/page2 entnommen
# 20130802 : ollir
# vereinfachte Version von http://wiki.volkszaehler.org/hardware/channels/meters/power/drs155m

use Device::SerialPort;


my $port = Device::SerialPort->new("/dev/ttyUSB0") || die $!;
$port->baudrate(300);
$port->databits(7);
$port->parity("even");
$port->stopbits(1);
$port->handshake("none");
$port->write_settings;

$port->purge_all();
$port->read_char_time(3);     # don't wait for each character
$port->read_const_time(10); # 100 millisecond per unfulfilled "read" call

my $verbose = 11 ;

# ========================================
sub sendgetserial {
  my ($cmd) = @_;
  my $count;
  my $saw;
  my $sawprint;
  my $x;

  $port->lookclear;
  $port->write( $cmd );

  ($count,$saw)=$port->read(165);   # will read 165 chars
  $x=uc(unpack('H*',$saw)); # nach hex wandeln
	$sawprint = $saw;

  $cmd =~ s/\n/\\n/mg;
  $cmd =~ s/\r/\\r/mg;

  $saw =~ s/\n/\\n/mg;
  $saw =~ s/\r/\\r/mg;

  if ( $verbose>10 ) {
    printf "+++ sendserial\n" ;
    print  " CMD: $cmd \n";  # gibt den Befehl in ASCII aus
    print  " COUNT: $count \n";  # gibt die Anzahl der empfangenen Daten aus
    print  " HEX: $x \n";  # gibt die empfangenen Daten in Hex aus
    print  " ASCII:\n$sawprint \n";  # gibt die empfangenen Daten aus
    printf "--- sendserial\n" ;
  }

  return $saw;
}
# ========================================

## Variablen
my $cmd;
my $res;
my $counter;

# Initialisierung
sendgetserial("/?!\r\n");

# Zählerabfrage
$cmd = chr(0x06).chr(0x30).chr(0x30).chr(0x30).chr(0x0D).chr(0x0A);
$_ = sendgetserial($cmd);

s/2\.18\.2\(([0-9]*\.[0-9]*)\)/$1/m;

print $1;
hardware/channels/meters/power/edl-ehz/landisgyr_e110.1514712992.txt.gz · Zuletzt geändert: 2017/12/31 10:36 von jau