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
1) Liefert UART Signal 2) Beitrag "Re: IR-Lesekopf an Stromzähler" Du brauchst nur den Empfangsteil.
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.
Stefan B. schrieb: > 1) Liefert UART Signal > 2) Beitrag "Re: IR-Lesekopf an Stromzähler" > > Du brauchst nur den Empfangsteil. Du mußt doch zunächst etwas Senden um etwas Empfangen zu können. Ohne Kennung läuft da nichts. mfg Klaus
Klaus R. schrieb: > Du mußt doch zunächst etwas Senden um etwas Empfangen zu können. Ohne > Kennung läuft da nichts. Nicht bei allen. Meiner (Q3BA) schmeisst auch alles unaufgefordert raus.
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
:
Bearbeitet durch User
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.
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
Eventuell falsches Datenformat? Hast du ein Oszi oder einen Logiganalyser? Oder dein Programm gibt keine Nullen aus..
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
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 ?
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.
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!!
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
Das ist keineswegs immer so. Bei so einfachen MC ja (ein gemeinsamer Baudratengenerator für RX und TX wie beim 8051 und AVR). Z80 SIO könnte verschiedene Baudraten, M16C und andere auch. Wichtig ist nur dass die Baudraten paarweise passen.
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 ?
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.
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 ?
Lies bitte als erstes die Doku zu SoftSerial. Wenn dann Fragen offen sind, finden wir Antworten.
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 !
Abdul K. schrieb: > Wenn Pausen vorhanden sind, könnte man darin die Baudrate ändern. Und dann mit dem UART auch lesen ? Pausen sind, ca. 1-3 Sekunden zwischen 2 Schreib beim Zähler (bzw. Lesevorgängen beim NANO)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.