EDL21 eHZ auslesen

Gast #7088333
Lesenswert?

Hallo,
ich weiß nicht, ob ich in diesem Forum richtig bin, aber ich versuch's 
mal.

Ich will einen modernen, digitalen Stromzähler EDL21 eHZ 
(https://wiki.volkszaehler.org/hardware/channels/meters/power/edl-ehz/edl21-ehz) 
mittels Arduino auslesen. Dazu gibt es schon viel Doku im Netz aber 
einige technische Details fehlen noch.
1.) Liefert die IR Schnittstelle des Zählers ein UART kompatibles 
Format, also insbesondere Start- und Stopbit oder muss man hier noch 
irgendwie konvertieren ?
2.) Genügt als Empfänger der IR-Diode eine IR-Diode mit nachgeschaltetem 
Schmitt-Trigger oder wie geht man hier am besten vor ?

Hoffe, hier hat jemand Erfahrung damit und kann mir hilfreiche Tipps 
geben.

Merci vorab
Gast #7088465
Lesenswert?

Hobbybastler schrieb:
> 2.) Genügt als Empfänger der IR-Diode eine IR-Diode mit nachgeschaltetem
> Schmitt-Trigger oder wie geht man hier am besten vor ?

Du solltest zwischen IR-Diode und IR-Diode unterscheiden. Die einen 
geben IR-Licht ab und werden als IR-LEDs bezeichnet, die anderen 
empfangen IR-Licht und werden als (IR-)Photodioden bezeichnet. Ein 
Schmitt-Trigger hinter einer Photodiode wird nicht reichen. Mit einem 
Phototransistor stehen die Chancen besser.
#7088538
Lesenswert?

Hallo, ich nutze diese Schaltung, um meinen Zähler abzufragen. Sende die 
Zeichen /?!
Mit Glück antwortet der Zähler etwa so:
/PAF5EC3g00006
[10][13][13]SLx[02]0.0.0(12345678)
0.0.1(PAF)
F.F(00)
0.2.0(1.29)
1.8.0*00(001752.06)
C.2.1(000000000000)( )
0.2.2(:::::G11)!
[03]N
Der Zählerstand ist dann 001752.06
Du hast natürlich keinen Pafal- Zähler, aber /?! Scheint ein Standart zu 
sein.
Die Fototransistoren/Dioden sind nicht so kritisch. Sie sollten bei ca. 
880nm arbeiten. Die Schaltung habe ich von Volkszähler.org .Die 
funktioniert seit Jahren sehr zuverlässig.
Gruß und viel Glück Carsten
Angehängte Dateien:
#7088673
Lesenswert?

Meine Erfahrungen:
Der Zähler (eBZDD3) plappert auch ohne PIN oder Aufforderung. Er gibt 
dann rudimentäre Daten von sich.

Die Doku des Herstellers ist verwirrend bis falsch. Angeblich hat die 
Schnittstelle 9600-7-e-1. Tatsächlich hat sie 9600-8-n-1.

Die SML Telegramme entsprechen nur teilweise den Angaben in der 
Betriebsanleitung.

Der Netzbetreiber ist unwissend (oder unwillig). Der Hersteller 
antwortet auf Mail nicht.
Gast #7089249
Lesenswert?

Stefan B. schrieb:
> 1) Liefert UART Signal
> 2) Beitrag "Re: IR-Lesekopf an Stromzähler"
>
> Du brauchst nur den Empfangsteil.

Danke Stefan, das hat soweit funktioniert mit diesen Tipps. Nun bekomme 
ich eine SML Antwort, die mit 1B 1B 1B 1B beginnt, dann aber nicht wie 
in den Protokollen beschrieben mit 01 01 01 01 fortgesetzt wird, sondern 
mit 11 11,
also mein SML Signal startet wie folgt:

1B 1B 1B 1B 11 11... und endet so : 1B 1B 1B 1A

Kennt sich hiermit jemand aus, ob das korrekt sein kann. Wie finde ich 
die passende Spezifikation zu dem Zähler, wenn es unterschiedliche EDL21 
eHZ gibt ?

Merci
#7090506
Lesenswert?

Hobbybastler schrieb:
> dann aber nicht wie
> in den Protokollen beschrieben mit 01 01 01 01 fortgesetzt wird, sondern
> mit 11 11,
> also mein SML Signal startet wie folgt:
>
> 1B 1B 1B 1B 11 11... und endet so : 1B 1B 1B 1A

Ich vermute auch stark das Dein Ausleseprogramm die Nullen nicht 
anzeigt.

https://wiki.volkszaehler.org/hardware/channels/meters/power/edl-ehz/edl21-ehz
1
Rohdaten
2

3
Die Rohdaten wurden mit dem Tool Hterm gemessen um dabei die SML Botschaft zu überprüfen. Dabei wird sichtbar, dass der Aufbau der SML Botschaft der Spezifikation der SML entspricht. beispiel_3emh_ehz_fw8e2a50bak2
4
Beginnend mit dem Start 1B 1B 1B 1B und Ende 1B 1B 1B 1B. 
5

6
1B 1B 1B 1B 01 01 01 01 76 07 00 09 03 7B 4F 6F 62 00 62 .....

Deine Sequenz mit "11 11" könnte zu "01 01 01 01" passen. Siehst Du denn 
überhaupt irgendwo Nullen?

Verwende doch mal das Tool „Hterm“, wie in volkszaehler.org beschrieben. 
Das war auch mein Tool.
mfg klaus
Gast #7091551
Lesenswert?

Klaus R. schrieb:
> Deine Sequenz mit "11 11" könnte zu "01 01 01 01" passen. Siehst Du denn
> überhaupt irgendwo Nullen?

Hey Experten,

ihr hattet recht. Der Arduino lässt bei der seriellen Ausgabe die NULLEN 
grundsätzlich weg - trügerisch. Gebe nun nach jedem Byte ein Leerzeichen 
bzw. Bindestrich aus, dann wird das Ergebnis klar.

Aber nun nächstes Problem: Ich lese jedes Byte wie folgt und gebe es 
über den seriellen Monitor der Arduino IDE aus:

1. Variante:
 void loop()
{    Serial.println();
  while(Serial.available()>0) {

   // get incoming byte:
    inByte = Serial.read();
   Serial.print(inByte, HEX);

}
}
2. Variante: (um die Bytes klar trennen und identifizieren  zu können)
 void loop()
{    Serial.println();
  while(Serial.available()>0) {

   // get incoming byte:
    inByte = Serial.read();
   Serial.print(inByte, HEX);
 Serial.print("-");
}
}

Problem: Die 2. Variante gibt nicht mehr den gesamten Datenstrom der vom 
Stromzähler gesendet wird aus; das Ergebnis, das auf dem Monitor 
dargestellt wird hat wesentlich weniger Bytes

Warum ?
#7091761
Lesenswert?

In Variante 2 machst du aus einem gelesenen Byte zwei auszugebende 
Bytes. Die Ausgabe hat aber die gleiche Geschwindigkeit wie die Eingabe 
und der Zähler sendet die Bytes ohne große Pause. Das passt nicht. Mach 
zwei serielle Kanäle auf, einen nur zum Lesen mit 9600Bd und einen zur 
Ausgabe mit 115200Bd.
Gast #7091968
Lesenswert?

Georg G. schrieb:
> Variante 2 machst du aus einem gelesenen Byte zwei auszugebende Bytes.
> Die Ausgabe hat aber die gleiche Geschwindigkeit wie die Eingabe und der
> Zähler sendet die Bytes ohne große Pause. Das passt nicht. Mach zwei
> serielle Kanäle auf, einen nur zum Lesen mit 9600Bd und einen zur
> Ausgabe mit 115200Bd.

Wow, sehr gut Georg. Das ist plausibel. Für mich war immer im 
Hinterkopf, dass Rx und Tx gleiche Baudraten aufweisen sollten, aber in 
dem Falle ist es Blödsinn... Wieder was Wichtiges gelernt!! Vielen Dank 
Georg!!
#7092674
Lesenswert?

Basty schrieb:
> Für mich war immer im
> Hinterkopf, dass Rx und Tx gleiche Baudraten aufweisen sollten, aber in
> dem Falle ist es Blödsinn...

Rx und Tx gehören zusammen zu einem Kanal.

Georg G. schrieb:
> Mach zwei
>> serielle Kanäle auf, einen nur zum Lesen mit 9600Bd und einen zur
>> Ausgabe mit 115200Bd.

Du sollst zwei Kanäle (jeweils Rx & Tx) aufmachen. Den einen verwendest 
Du nur zum Lesen mit 9600Bd und den anderen nur zur Ausgabe mit 
115200Bd.

Ein serieller Kanal hat für Rx und Tx immer die gleichen 
Übertragungsparameter. Sonst würde das Timing auch nicht funktionieren.
mfg klaus
Gast #7092821
Lesenswert?

Klaus R. schrieb:
> Du sollst zwei Kanäle (jeweils Rx & Tx) aufmachen. Den einen verwendest
> Du nur zum Lesen mit 9600Bd und den anderen nur zur Ausgabe mit
> 115200Bd

Hm, aber wie erwähnt nutze ich einen Arduino (NANO), der hat nur EINE 
UART. Wie soll ich hier 2 Kanäle nutzen ? Kann mir jemand einen 
Beispielcode geben ?
#7092934
Lesenswert?

Klaus R. schrieb:
> Ein serieller Kanal hat für Rx und Tx immer die gleichen
> Übertragungsparameter.

(Mode der Ausscheidung kleiner Rosinen):
Vor Jahrzehnten gab es den Modem Standard CCITT V23 mit 1200Bd/75Bd vor 
allem für Akustikkoppler.

Aber ansonsten hast du Recht. Der Lesekanal kann bequem per SoftSerial 
erschlagen werden. 9600Bd sind da bequem machbar. Und den Sendekanal 
übernimmt der UART.
Gast #7092983
Lesenswert?

Georg G. schrieb:
> Der Lesekanal kann bequem per SoftSerial
> erschlagen werden. 9600Bd sind da bequem machbar. Und den Sendekanal
> übernimmt der UART.

Heißt: Da ich den Arduino Nano nutze, muss ich einen anderen Pin als den 
hardwareseitigen RX Pin für das Lesen der Zählerdaten nutzen ? Also für 
das Lesen die Hardware umstellen, die Software belassen und für das 
Schreiben die Software um einen Kanal erweitern ?
Gast #7093227
Lesenswert?

Georg G. schrieb:
> Lies bitte als erstes die Doku zu SoftSerial. Wenn dann Fragen offen
> sind, finden wir Antworten.

Das tat ich zuvor schon, deshalb die Frage nach der Hardwareänderung, um 
sicher zu gehen. Der NANO hat ja hardwaremässig nur eine UART 
Schnittstelle mit RX bzw. TX. Ich habe bislang deren RX Pin zum Lesen 
des Zählers benutzt. Und via Arduino IDE (Serieller Monitor mit 9600 Bd) 
die Ergbnisse wie oben beschrieben unbefriedigt rasusbekommen (Variante 
1 scheint korrekt aber wegen fehlender Trennung der HEX Daten kaum 
auswertbar; Variante 2 schneidet Bytes nach einer gewissen Länge/Zeit 
einfach ab oder scheint sie sogar zu verfälschen). Um deinem Vorschlag 
zu folgen müsste ich also einen neuen (anderen) Pin als den UART RX Pin 
nutzen und per SoftSerial Lib auslesen. Und dann mit Serial (UART) bei 
höherer Baudrate im seriellen Monitor den Empfang darstellen. Ist das 
Verständnis so korrekt ?  DANKE !

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren