Auslesen eines Elster AS1440 per Infrarot
Kommen wir zum letzten Teil unserer kleinen Serie bezüglich des Auslesens von Zählerdaten. Heute nehmen wir uns den Bezugszähler AS1440 der Firma Elster vor. Die Hard- und Softwareausstattung ist analog zu den bisherigen Beschreibungen (Netbook mit WinXP, XAMPP und ein Optokoppler).
Zu Beginn aber noch einige Besonderheiten, die zu beachten sind. Beim öffnen der Schnittstelle wird mit einer Verbindungsgeschwindigkeit von 300 Baud gearbeitet. Dies ist dem Umstand geschuldet, dass auch eine Ablesung per Uralt-Modem vorgenommen werden kann. Im weiteren Verlauf könnte die Baudrate erhöht werden. Je nachdem, was der Zähler zulässt. Uns genügen aber, für die Ermittlung der Zählerstände, die 300 Baud Initialgeschwindigkeit.
Hier die Parameter für die Schnittstelle:
Baudrate: 300
Parität: Even
Datenbits: 7
Stopbits: 1
XOn: Aus
DTR: An
Zum Ablauf: Wir öffnen die Schnittstelle und senden das Kommando „/?!“ an den Zähler. Daraufhin antwortet dieser mit seiner Kennung (z.B. „/ELS5@V9.30“). Was dieses im einzelnen bedeutet, werden wir in einem weiteren Beitrag in den nächsten Wochen erläutern.
Nun wartet der Zähler 1,5 Sekunden auf weitere Kommandos. An dieser Stelle verhalten wir uns einfach still und warten. Nach eben diesen 1,5 Sekunden spuckt der AS1440 die gewünschten Daten aus (hier ein Beispiel):
1-1:F.F(00000000)
1-1:0.0.0(03300706)
1-1:0.0.1( 01351)
1-1:0.0.2( 00706)
1-1:0.0.3(03300706)
1-1:0.9.1(220645)
1-1:0.9.2(120613)
1-1:0.2.2(00000000)
1-1:1.8.1(001896.93*kWh)
1-1:1.8.2(000000.00*kWh)
1-1:2.8.0(000361.13*kWh)
1-1:1.7.0(0.594*kW)
1-1:2.7.0(0.000*kW)
1-1:0.2.0(FE63)
1-1:C.70(01)
!
Relevant für uns sind die Kennzahlen 1.8.1 und 2.8.0 für Netzbezug und Einspeisung.
Was diese ganzen Kennzahlen zu bedeuten haben und was einem der AS1440 sonst noch verrät, werden wir in weiteren Beiträgen erläutern. Vieles haben wir schon herausgefunden, aber vieles ist uns auch noch nicht so ganz klar. Sollte der ein oder andere Leser noch Infos haben, sind diese natürlich willkommen.
Hier nun unser Code:
// Über die Systemebene die Parameter für den COM-Port setzen
exec('mode com4:BAUD=300 PARITY=E DATA=7 STOP=1 XON=OFF DTR=ON');
// Öffnen des COM-Port als Filehandle
$handle = fopen("com4",'w+');
if (!$handle) {
die(‚Kann nicht geoeffnet werden!‘);
} else {
// Senden des Eröffnungsstrings
$hexString = ‚/?!‘ . chr(13) . chr(10);
fputs($handle,$hexString);
// Lesen des ersten Zeichens
$char = fgetc($handle);
$string = $char;
// Weiterlesen der Daten bis zum “!”
while($char != ‚!‘) {
$char = fgetc($handle);
$string .= $char;
}
fclose($handle);
// Ausgabe des Ergebnisses
echo $string . „n“;
// Durchsuchen des Ergebnisses nach den gewünschten Daten
$array = explode(chr(13) . chr(10),$string);
foreach($array as $value) {
if(substr($value,4,5) == ‚1.8.1‘) {
$resultNetwork = intval(substr($value,10,6));
}
if(substr($value,4,5) == ‚2.8.0‘) {
$resultOwn = intval(substr($value,10,6));
}
}
}
Handelt es sich um den AS 1440 oder AS 1140?!
Überschrift und Beschreibung widersprechen sich da.
Ist das Ganze noch weiter verfolgt worden?
Danke&Gruß
Stefan
Hallo Stefan,
sorry, es ist natürlich ein AS 1440.
Ja, wir haben noch einiges mit dem Zähler angestellt.
Viele Grüße …
Limespacer
Hallo Limespacer,
kann man das irgendwo nachlesen? Es wurden ja noch weitere Beiträge angekündigt.
Gruß
Stefan
Hallo Stefan,
bisher bin ich noch nicht dazu gekommen, weiteres zu dokumentieren.
Interessiert Dich etwas speziell? Dann würde ich mich in den nächsten Tagen einmal daransetzten.
Viele Grüße …
Limespacer
Ich würde gern den Zähler möglichst im Minutenintervall auslesen. Und zwar die Zählerstände für Bezug und Einspeisung und die Werte für die aktuelle Leistung (auch beide Richtungen).
Die Standardabfrage mit /?! läuft fast 5 Minuten, auch die kurze mit /2! ist immernoch recht lang. Gibt es vllt. noch andere Service-Abfragen?
Fünf Minuten sind definitiv zu lang. Im Test habe ich 20 bis 30 Sekunden gemessen bei „/?!“.
Bekommst Du evtl. die Schlusssequenz nicht mit?
Das Problem bei anderen Abfragen ist, dass mit 300 Baud eröffnet wird um dann für weitere Anfragen auf eine höhere Geschwindigkeit zu wechseln. Das habe ich auch noch nicht hinbekommen.
Hallo Limespacer,
was meinst Du mit der Schlusssequenz?
Bei „/?!“ sendet er Daten für eine Unzahl von Messwerten (also vorn verschiedenste Kennungen) und das für den aktuellen Stand und jeweils die letzten 15 Monatssummen. Da kommt einiges zusammen.
Er meldet sich am Anfang auch mit „/ELS5@V9.30“, allerdings scheint es doch eine andere Version zu sein?
Viele Grüße
Stefan
Die Version ist bei meinem Zähler die gleiche. Die Ausgabe endet mit einem „!“. Hier mal ein Beispiel:
/ELS5\@V9.30
1-1:32.7.0(217.9*V)
1-1:52.7.0(218.8*V)
1-1:72.7.0(216.8*V)
1-1:31.7.0(0.479*A)
1-1:51.7.0(0.924*A)
1-1:71.7.0(0.097*A)
1-1:1.7.0(0.210*kW)
1-1:2.7.0(0.000*kW)
1-1:21.7.0(0.100*kW)
1-1:41.7.0(0.100*kW)
1-1:61.7.0(0.012*kW)
1-1:22.7.0(0.000*kW)
1-1:42.7.0(0.000*kW)
1-1:62.7.0(0.000*kW)
!
Sieht bei mir ähnlich aus, nur eben viel viel länger. Das Ausrufezeichen am Schluss habe ich auch.
Der Datensatz nach /2! ist mit 36 Zeilen auch noch ein Stück länger als Deiner.
Das war die Ausgabe mit „/2!“, nämlich die aktuellen Daten für Netzbezug und Einspeisung auf den einzelnen Phasen.
Die Ausgabe bei „/?!“ sieht so aus:
/ELS5\@V9.30
1-1:F.F(00000000)
1-1:0.0.0(03300706)
1-1:0.0.1( 01351)
1-1:0.0.2( 00706)
1-1:0.0.3(03300706)
1-1:0.9.1(142803)
1-1:0.9.2(140821)
1-1:0.2.2(00000000)
1-1:1.8.1(009211.07*kWh)
1-1:1.8.2(000000.00*kWh)
1-1:2.8.0(002157.18*kWh)
1-1:1.7.0(0.000*kW)
1-1:2.7.0(0.934*kW)
1-1:0.2.0(FE63)
1-1:C.70(01)
!
Und hier interessieren mich nur die Zählerstände.
Da beide Zähler die Firmwareversion V9.30 haben, sollte eigentlich auch das gleiche rauskommen. Wie sieht denn Deine Ausgabe aus?
Ich hab die Steuerzeichen noch drin. Ist mit HTerm ausgelesen. Die Kommentare habe ich dazugeschrieben.
!/ELS5\@V9.30
F.F(00000000)
0.9.1(103852) Aktuelle Uhrzeit
0.9.2(140820) Aktuelles Datum
0.0.0(XXXXXXXX) Werknummer
0.0.1(XXXXXXXX) Seriennummer
1.7.0(0.000*kW) Aktueller Verbrauch alle Phasen („Wirkleistung +“)
1.8.0(0003226.1*kWh)
1.8.1(0003226.1*kWh) Zählerstand Netzbezug
1.8.2(0000000.0*kWh)
1.8.3(0000000.0*kWh)
1.8.4(0000000.0*kWh)
1.8.5(0000000.0*kWh)
1.8.6(0000000.0*kWh)
1.8.7(0000000.0*kWh)
1.8.8(0000000.0*kWh)
1.9.0(0000035.6*kWh) ???
2.7.0(1.181*kW) Aktuelle Einspeisung alle Phasen („Wirkleistung -„)
2.8.0(0017181.1*kWh)
2.8.1(0017181.1*kWh) Zählerstand Einspeisung
2.8.2(0000000.0*kWh)
2.8.3(0000000.0*kWh)
2.8.4(0000000.0*kWh)
2.8.5(0000000.0*kWh)
2.8.6(0000000.0*kWh)
2.8.7(0000000.0*kWh)
2.8.8(0000000.0*kWh)
2.9.0(0000676.4*kWh) ???
0.2.2(00000000)
32.7.0(222.2*V)
52.7.0(227.2*V)
72.7.0(226.5*V)
31.7.0(2.130*A)
51.7.0(1.987*A)
71.7.0(2.774*A)
!
,
Da sind doch einige Daten mehr. Für mich sieht es so aus, als wenn der Zähler bis zu 8 Tarife verwalten kann. Meiner „nur“ 3.
Die Kennzahl 1.9.0 könnte der aktuelle Monatsbezug sein, bin mir aber nicht sicher.
Auf jeden Fall werden die einzelnen Phasen nicht dargestellt. Hier wäre dann eine 2, 4 oder 6 vorangestellt. Also zum Beispiel 41.7.0 = Wirkleistung Phase 2.
Ich bin Ratlos …
Richtig. 1.9.0 und 2.9.0 sind die aktuellen Monatssummen für Bezug und Einspeisung.
Man kann sich wohl auch noch tiefer einloggen und dann die Leistungen der einzelnen Phasen auslesen.
Aber in dem Block ist alles was ich brauche. Und jemand wirklich Nettes hat mir auch ein Script geschrieben, dass es innerhalb von etwa 10 Sekunden ausliest und speichert.
Festhalten sollten wir hier, dass die Zähler trotz gleicher Typenbezeichnung und gleicher Version offensichtlich doch sehr verschieden sind.
Danke&Gruß
Stefan
Hallo Stefan,
kannst Du uns Dein Script einmal zur Verfügung stellen?
Viele Grüße …
Limespacer
Es ist nicht mein Script, es wurde für mich erstellt. Ich habe es nur fertig kompiliert in Java.
Ich kann aber gern mal beim Ersteller nachfragen.
Viele Grüße
Hallo Limespacer
Stefan hat mich auf diese Seite aufmerksam gemacht.
Der Zähler sendet dir ja “/ELS5@V9.30″, wobei die 5 die maximale Baudrate darstellt die der Zähler unterstützt. 5 = 9600Baud. Um die Baudrate nun umzuschalten sendest du dem Zähler ACK 0 5 0 CR LF (0x06 0x30 0x35 0x30 0x0D 0x0A). Bei 300 Baud werden ja ca. 30Bytes pro Sekunde übertragen. Bis die 6 Zeichen zum Zähler gewandert sind vergehen also in etwa 200ms. Nach dieser Zeit kannst du deine Baudrate auf 9600 hochschrauben und die Antwort vom Zähler auslesen.
Hoffe das hilft!
Gruss
Roland