IR Schnittstelle von Stromzähler auslesen

Hi,

ich weiß, das Thema wurde schon mehrfach angefragt. Jedoch waren die Lösungen immer sehr individuell. Für mich war leider nicht die passende Antwort dabei.

Folgendes ist mein Setup:

  • Ich habe eine ISKRA Drehstromzähler Type MT681.
  • Als Sensor verwende ich ein IR Modul aus einem Arduino StartSet ähnlich diesem: IR-Sensor
  • Dazu benutze ich noch ein ELEGOO Uno Board.

Folgenden Sketch habe ich eingespielt und lasse mir die Ausgaben auf dem Arduino IDE Monitor ausgeben:

#include <IRremote.h>

byte IRPin = 11;
IRrecv irrecv(IRPin); //Objekt initialisieren für die IR Übertragung
decode_results results;

void setup(){
 Serial.begin(9600); 
 pinMode(IRPin, INPUT);
 irrecv.enableIRIn(); //Den IR Pin aktivieren 
}

void loop(){

  if (irrecv.decode(&results)) { //Wenn etwas gelesen wurde dann...
    //Ausgabe des Wertes auf die Serielle Schnittstelle.
    Serial.println(results.value,HEX);
    irrecv.resume(); // auf den nächsten Wert warten
  }
 
}

Soweit so gut. Ich empfange auch direkt Daten vom Stromzähler. Leider kommt nie Startsequenz "1B 1B 1B 1B" bzw. SML Start "01 01 01 01"
Ich habe auch noch keine PIN für den Stromzähler beantragt, da er ja bereits munter Daten sendet.

Folgendes empfange ich:
18:06:51.678 -> B38CD5A2
18:06:51.720 -> FFFFFFFF
18:06:51.811 -> FFFFFFFF
18:06:51.929 -> E7CA1AE6
18:06:51.962 -> DAE329E4
18:06:52.001 -> 6AF05E80
18:06:52.001 -> F3EAEB57
18:06:52.819 -> 22AE7A28
18:06:52.819 -> 65B8ACA2
18:06:52.869 -> FFFFFFFF
18:06:52.869 -> B8760F24
18:06:52.950 -> FFFFFFFF
18:06:53.038 -> FFFFFFFF
18:06:53.084 -> FFFFFFFF
18:06:53.127 -> DAE329E5
18:06:53.168 -> FFFFFFFF
18:06:53.168 -> 4AB0F7B5
18:06:54.017 -> 83AC6A54
18:06:54.184 -> CC7A5666
18:06:54.184 -> A5793D67
18:06:54.254 -> 46172D8E
18:06:54.254 -> 1A2F9E23
18:06:54.254 -> FCABFFBF
18:06:54.254 -> FCABFFBF
18:06:54.297 -> A87F9DB2
18:06:54.330 -> 96C31D9A
18:06:54.330 -> DF110C36

Man kann schön die Sekundenintervalle sehen, aber nichts wo ich das SML Protokoll herauslesen könnte.

Mach ich was falsch? Ist der Sensor vielleicht nicht geeignet für das Auslesen? Muss ich unbedingt mit einer PIN den Zähler irgendwie freischalten?

Danke für eure Hilfe!!

Was sagt denn results über das Protokoll?

Falls SML ein IRremote Protokoll sein soll, dann kann das die Bibliothek (noch) nicht. Im Zweifelsfall alles als RAW ausgeben und notfalls den Puffer vergrößern.

Verwende nicht <IRremote.h> sondern <SoftwareSerial.h> mit 9600 Baud.
Zum PC hin geht auch Serial.begin(115200); (Serial Monitor entsprechend anpassen)
Im Loop:
if (SoftSerialDaten.available() > 0) {
Serial.write(SoftSerialDaten.read()); }
}

Der serielle Monitor ist nicht ideal um HEX Daten anzuzeigen. Besser HTerm verwenden.
Wenn dann immer noch kein "1B 1B 1B 1B" zu sehen ist kann SoftwareSerial die Daten mit Parameter "true" auch invertieren.

Warum sollte das so sein?

Serial.print(SoftSerialDaten.read(),HEX); 
Serial.print(" ");

Gruß Tommy

Tja, da wirst Du aber nicht umhin kommen.
Das was Du jetzt da bekommst ist ein Datenstrom ohne gekennzeiochneten Anfang und ohne pasendes Ende.

Mit der Freischaltung via PIN wird wohl auch die ESC-Sequenz mit dem zugehörigen SML-Start erzeugt.
Sonst welchen Sinn hätte sonst die PIN?

Das 1b 1b 1b 1b muss nicht enthalten sein.
Auf was es ankommt ist der Start der Sequenz und die Kennzeichnung des Ende.

Nein ist es nicht.
Das ist eine Spezifikation wie der Inhalt auszusehen hat.
https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR03109/TR-03109-1_Anlage_Feinspezifikation_Drahtgebundene_LMN-Schnittstelle_Teilb.pdf

Danke. Da werde ich mir die PIN mal beantragen und schauen was ich dann bekomme.

Ah ok. Das wusste ich gar nicht. Ich dachte damit fängt das SML Telegram immer an. Aber da auch 01 01 01 01 nicht kommt, werde ich um die PIN nicht herum kommen

Den Puffer von was vergrößern und wie?

Anscheinend, SML ist ein rein serial Protokol.
Der IR Library wird die Start-, Stop-, Parity- Bits mit den Daten Bits verwechseln und ist nicht geeignet.
Anstatt ein IR Receiver, du kannst ein Phototransistor verwenden.

SML beschreibt Kommandos und Antworten, dazu gehört eine bidirektionale Verbindung. Da finde ich es nicht plausibel, daß der Zähler ständig Anforderungen rausschickt - stattdessen sollte ein Client Anforderungen schicken. Zudem sollte in einer bidirektionalen IR Verbindung irgendwie geregelt sein, wer wann etwas senden darf.

Mir sind das viel zu viele Fragezeichen, ich bin erst mal raus :frowning:

Stromzähler mit IR Auge senden permanent Daten wenn dies freigeschaltet ist. Das dient zum auslesen des Stromverbrauches. Mit einer PIN vom Stromanbieter kann das soweit freigeschaltet werden, dass man mehr Informationen bekommt. Da ich nicht weiß, auf welchen Zustand initial mein Stromzähler konfiguriert ist, habe ich mir jetzt die PIN beantragt. Die sollte nächste Woche kommen.
Dann werde ich sehen, ob der IR Receiver das richtige anzeigt.
Ich habe meinen Sketch mal auf SoftwareSerial.h umgestellt. Das Ergebnis ist hier fast das gleiche.
Also muss ich erstmal abwarten .

Und was machst Du dann mit der PIN?

Falls diese Angaben stimmt, Du kommst leider nicht viel weiter mit einem normalen IR (Fernbedienung) Empfänger Modul. (Link aus #9 )
image

Die sind nicht optimiert für Datenübertragung und kann nur bis circa 2400Baud mit ein 38KHz Trägerfrequenz funktionieren da die mindestens ungefähr 10 aufeinanderfolgenden Trägerwellen pro Bit brauchen. 9600 Baud ist sowieso ziemlich an der Grenze für ein 38KHz Träger.

Und ein Bild aus Smart Meter-Datenkabel selbst gemacht: libehz Falls es für deinen Zähler auch relevant ist, zeigt eine Datenubertragung ohne Trägersignal
image

Hallo
Nachdem ich bei meinem Zähler zwei Tage versucht habe sinnvolle hex-werte zu bekommen, stellte ich am dritten Tage fest daß er Klartext ausgibt.
Auch ohne Pin, mit stellt er ausführlichere Daten bereit.
Zählertyp weiss ich leider grad nicht.

Kannst du noch mehr sagen? Was für ein IR Empfänger hast du benutzt u.s.w.

Die PIN gebe ich via Taschenlampe ein.

Also da würde mich mal interessieren was du für einen Zähler hast.

Ich hab jetzt mal die PIN eingegeben. Leider ohne Erfolg. Die Daten sehen immer noch genauso aus. Vieleicht liegt es wirklich an dem IR Receiver Modul und ich muss mir einen "echte" IR Diode kaufen.

Es ist auch möglich ein normale IR LED als Empfänger zu verwenden.
Hier ist ein (eher komplex) Beispiel Arduino IR Learning Remote Control

Am einfachsten für deine Projekt wäre wahrscheinlich aber ein IR Photo Transistor mit so einem Schaltkreis: How the Phototransistor Circuit Works | LEARN.PARALLAX.COM .

Zähler ist ein logarex vom Bayernwerk, zum Auslesen hatte ich einen ir phototransistor
Logarex LK13BE803039