Benutzer-Werkzeuge

Webseiten-Werkzeuge


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

Elster AS1440

Der Elster AS1440 kann nach DIN EN 62056-21 über die IR-Schnittstelle ausgelesen werden. Energiezähler werden vom Hersteller auf Wunsch der Messstellenbetreiber kundenspezifisch konfiguriert, daher kann es zu unterschiedlichen Ausgaben kommen.

Hardware

Über die Frontschnittstelle kann mittels IR-Schreib-Lesekopf bei 300bd, 7E1 kommuniziert werden.
Der Zähler muss erst mittels Initiaslisierungssequenz „/?!“ angesprochen werden bevor er sendet.

Bei einigen AS1440hat der VNB ein Passwort gesetzt. Häufig ist das die Identifikationsnummer. Dann sieht die Anforderungssequenz so aus: /?<Identifikationsnummer oder Passwort>!<CR/LF>.
Die Identifikationsnummer kann am Gerätedisplay im Menü unter 0.0.0 angezeigt werden. Führende Nullen können ignoriert werden. Ein Passwort gibt der VNB in der Regel auf Anfrage heraus.

Kommunikation

Zu Anfang erwartet der Zähler Kommunikation mit 300 baud, 7 Datenbits, 1 Stopbit, Parität even. Jeder Befehl muss mit CR&LF abgeschlossen werden. Wenn die Kommunikation läuft, kann man auf höhere Datenraten umstellen, s.u.
Die Schnittstelle wird aktiviert, indem man den code /?!\r\n sendet (hex 2F 3F 21 0D 0A). Der Zähler antwortet sofort mit

/AAAB\@nnnnnnnnnnnnnn

wobei:
AAA = „ELS“
B gibt die maximale Baudrate an, bei IR-Kommunikation ist der Wert 5, d.h. max. 9600 Baud
\@ bedeutet, dass der Zähler R5, W5 und R6-Befehle unterstützt (s.u.)
nnnnnnnnnnnnnn bezeichnet die 14-stellige Geräte-ID.
Wenn innerhalb von 1,5s keine weiteren Befehle gesendet werden, gibt der Zähler die aktuellen Messwerte aus und meldet sich ab. Weitere Kommunikation ist erst möglich, wenn man wieder die Eröffnungs-Sequenz /?!\r\n sendet.
Um direkt weiter kommunizieren zu können, muss die Antwort des Zählers bestätigt werden mit:

<ACK>0ZY<CR><LF> (hex 06 30 zz yy 0D 0A)

wobei Z die gewünschte Datenrate für die weitere Kommunikation bezeichnet (also am Einfachsten denselben Wert wie B oben) und Y die Werte 0 und 1 annehmen kann. Wenn Y den Wert 0 hat, werden die aktuellen Messwerte ausgegeben. Für alle anderen Befehle (z.B. Lastgangspeicher auslesen) verwendet man den Programmiermodus, also Y=1.
also z.B.

<ACK>051<CR><LF> (hex 06 30 35 31 0D 0A)

um Daten mit 9600 Baud auszulesen.
Wenn der Zähler die Botschaft akzeptiert, antwortet er mit

<ACK><CR><LF> (hex 06 0D 0A)

Wenn die Datenrate geändert wurde, muss man das natürlich berücksichtigen, also z.B. bei hterm auf 9600 Baud umstellen.
Jetzt kann man mit dem Zähler kommunizieren, s. Befehle. Wenn für ca. 6s keine weiteren Befehle gesendet werden, beendet der Zähler die Kommunikation mit der Sequenz

<SOH>B0<ETX><BCC><CR><LF> (hex 01 42 30 03 71 0D 0A)

Dieselbe Sequenz kann jederzeit auch gesendet werden, um die Kommunikation zu beenden.

Alternativ kann die Kommunikation statt mit /?!\r\n manchmal auch mit /2!\r\n (hex 2F 32 21 0D 0A) angestoßen werden. Der Zähler antwortet dann direkt, ohne Baudratenumschaltung, mit der Liste der Aktualwerte.

Beispielkonfiguration

Eine exemplarische vzlogger.conf:

vzlogger.conf
{
"retry": 0,
"verbosity": 15,
"log": "/var/log/vzlogger/vzlogger.log",
"local": {
    "enabled": false,
    "port": 8081,
    "index": true,
    "timeout": 0,
    "buffer": 0
    },
"meters": [
        {
        "enabled": true,
        "allowskip": false,
        "interval": -1,
        "aggtime": -1,
        "aggfixedinterval": false,
        "channels": [
                {
                "uuid": "6836dd20-00d5-11e0-bab1-856ed5f959ae",
                "identifier": "1-1:1.7.0",
                "api": "volkszaehler",
                "middleware": "http://localhost/middleware.php",
                "aggmode": "none",
                "duplicates": 0
                }
            ],
        "protocol": "d0",
        "device": "/dev/lesekopf0",
        "dump_file": "",
        "pullseq": "2F3F210D0A",
        "ackseq": "auto",
        "baudrate": 300,
        "baudrate_read": 9600,
        "baudrate_change_delay": 500,
        "parity": "7e1",
        "read_timeout": 100
        }
    ]
}

Befehle

BCC

Die Befehle benötigen am Ende grundsätzlich ein BCC-Byte zur Fehlererkennung. Dieses wird gebildet, indem man alle Bytes des Befehls ohne das führende <SOH> bitweise XOR-verknüpft. Beispiel:
BCC für <SOH>B0<ETX> (hex 01 42 30 03):

binärhexASCII
0100001042B
00110000300
0000001103<ETX>
=0111000171q

Gesendet wird also:

<SOH>B0<ETX><BCC><CR><LF> (hex 01 42 30 03 71 0D 0A)

Befehlsliste

Kompletten Lastgangspeicher 1 auslesen (enthält standardmäßig 15-Min-Werte der importierten und exportierten Leistung ca. der letzten 3 Wochen):

<SOH>R5<STX>P.01(;)<ETX><BCC> (01 52 35 02 50 2E 30 31 28 3B 29 03 23)

Man kann auch einen Datumsbereich in der Form syymmddhhmm für Start bzw. Ende des Zeitraums vor bzw. nach dem Semikolon angeben. s=0/1: Winter-/Sommerzeit.

Kompletten Lastgangspeicher 2 auslesen (enthält zusätzlich Spannungen und Ströme aller drei Phasen ca. der letzten 10 Stunden):

<SOH>R5<STX>P.02(;)<ETX><BCC> (01 52 35 02 50 2E 30 32 28 3B 29 03 20)

Logbuch auslesen:

<SOH>R5<STX>P.98(;)<ETX><BCC> (01 52 35 02 50 2E 39 38 28 3B 29 03 23)

Aktuelle importierte Leistung:

<SOH>R5<STX>1.7.0()<ETX><BCC> (01 52 35 02 31 2e 37 2e 30 28 29 03 51)

Aktuelle exportierte Leistung:

<SOH>R5<STX>2.7.0()<ETX><BCC> (01 52 35 02 32 2e 37 2e 30 28 29 03 52)

Test mittels HTerm

Zum Testen unter Windows kann hterm verwendet werden.
Einzustellen sind:
Port: bei Windows:verwendeter COM-Anschluss des USB-Adapters, bei Linux z.B. /dev/ttyUSB0
Baud: 300
Data: 7
Stop: 1
Parity: Even
Bei „input control“: Send on Enter auf „CR-LF“
Auf „Connect“ klicken, dann im Eingabefeld /?! eingeben und Enter drücken. Wenn im Feld „received data“ was erscheint, funktioniert die Kommunikation prinzipiell.

Quellen

hardware/channels/meters/power/edl-ehz/elster_as1440.txt · Zuletzt geändert: 2022/04/21 20:21 von jau