Neues zum Elster AS1440
In einem Kommentar wurden wir darauf hingewiesen, das Ablesen unseres Smart Meters vom Typ Elster AS1440 etwas vernachlässigt zu haben. Hier also ein kleines Update.
Das wichtigste vorab: Es ist uns bisher nicht gelungen, nach der Initialisierung mit 300 Baud auf eine höhere Geschwindigkeit zu wechseln. Grundsätzlich ist es aber möglich, mit einem eigenen Script Lastgangsdaten oder einzelne andere Daten abzufragen.
Problematisch ist hier, das bei dieser Geschwindigkeit die Initialisierung, Anmeldungssequenz und Abfrage länger dauert, als die selben Informationen über „/?!“ oder „/2!“ zu holen. Erschwerend kommt eben hinzu, dass die Kommunikation über den Optokoppler asynchron läuft und nicht wirklich zuverlässig ist.
Wer genauer sehen möchte, welche Daten der Zähler liefert und wie die Kommunikation läuft, der sollte sich die Software alphaSET der Firma Elster besorgen. Diese dient genau dem Zweck, mit dem Zähler zu kommunizieren und die Daten zu liefern. Im Protokoll kann man nachvollziehen, welche Kommandos abgesetzt werden müssen und was der Zähler daraufhin liefert. Leider ist die Software nicht frei Verfügbar. Auf Anfrage bei Elster wurden wir an unseren Netzbetreiber verwiesen (in diesem Fall EWE). Dieser wiederum meinte, der Zähler würde demnächst ausgetauscht und daher würden wir die Software nicht bekommen. Der Zähler wurde natürlich noch nicht ausgetauscht und nach längerer Suche im Internet haben wir alphaSET zum Download „gefunden“. Vielleicht ist Euer Netzbetreiber kooperativer oder Euer Installateur kann helfen.
Inzwischen haben wir auch unseren Versuchsaufbau geändert und sind auf Linux mit einem Raspberry Pi umgestiegen. Das Script zur Ablesung ist in Perl geschrieben:
#!/usr/bin/perl # ======================================================================================= # Lesen Import / Export auf Zähler Elster AS1440 # ======================================================================================= use strict; use Device::SerialPort; use POSIX; # Ergebnisvariable my $resultExp = 0; # 2.7.0 my $resultExpL1 = 0; # 22.7.0 my $resultExpL2 = 0; # 42.7.0 my $resultExpL3 = 0; # 62.7.0 my $resultImp = 0; # 1.7.0 my $resultImpL1 = 0; # 21.7.0 my $resultImpL2 = 0; # 41.7.0 my $resultImpL3 = 0; # 61.7.0 my @arrayResults; my $arrayResult; # Temporäre Speicherung der Daten my $tmpByte; my $tmpString; my $tmpCount = 0; Main(); sub Main() { # Verbindung zum Zähler herstellen my $port = Device::SerialPort ->new('/dev/ttyUSB1'); print "COM-Port initialisieren\n"; $port->baudrate(300); $port->parity('even'); $port->databits(7); $port->stopbits(1); $port->handshake('xoff'); $port->write_settings; # Lastdaten abrufen print "Daten abrufen: /2!\n"; $port->write("/2!\r\n"); # Daten lesen print "Daten lesen\n"; $tmpString = ""; while(1) { $tmpByte = $port->read(1); print "$tmpByte"; $tmpString .= $tmpByte; $tmpCount++; if($tmpByte eq "!") { print "\n"; last; } } print "Daten bearbeiten\n"; @arrayResults = split(chr(13) . chr(10),$tmpString); foreach $arrayResult (@arrayResults) { if(substr($arrayResult,0,9) eq "1-1:2.7.0") { $resultExp = getValue($arrayResult); } if(substr($arrayResult,0,10) eq "1-1:22.7.0") { $resultExpL1 = getValue($arrayResult); } if(substr($arrayResult,0,10) eq "1-1:42.7.0") { $resultExpL2 = getValue($arrayResult); } if(substr($arrayResult,0,10) eq "1-1:62.7.0") { $resultExpL3 = getValue($arrayResult); } if(substr($arrayResult,0,9) eq "1-1:1.7.0") { $resultImp = getValue($arrayResult); } if(substr($arrayResult,0,10) eq "1-1:21.7.0") { $resultImpL1 = getValue($arrayResult); } if(substr($arrayResult,0,10) eq "1-1:41.7.0") { $resultImpL2 = getValue($arrayResult); } if(substr($arrayResult,0,10) eq "1-1:61.7.0") { $resultImpL3 = getValue($arrayResult); } } print "Export Phase 1\t: " . $resultExpL1 . "\n"; print "Export Phase 2\t: " . $resultExpL2 . "\n"; print "Export Phase 3\t: " . $resultExpL3 . "\n"; print "Export Gesamt\t: " . $resultExp . "\n"; print "Import Phase 1\t: " . $resultImpL1 . "\n"; print "Import Phase 2\t: " . $resultImpL2 . "\n"; print "Import Phase 3\t: " . $resultImpL3 . "\n"; print "Import Gesamt\t: " . $resultImp . "\n"; if($resultExp != 0 or $resultImp != 0) { print "Ende - Daten gelesen!\n"; } # COM-Port schließen print "COM-Port schließen\n"; $port->close; undef $port; } sub getValue() { my $value = shift; return substr( $value, index($value,"(") + 1, index($value,"*") - index($value,"(") - 1 ); }
Hallo, könntet Ihr mir verraten, wo Ihr den Download für die Elster Software alphaSET gefunden habt? Mir ist das bisher trotz intensiver Suche auf mehreren Suchmaschinen nämlich nicht gelungen. Ich wäre Euch sehr dankbar.
Mit freundlichen Grüßen
Rainer Eberth
Hallo Rainer, der Link ist leider nicht mehr verfügbar.
Hast Du schon mal bei Deinem Messstellenbetreiber angefragt?