Stromzähler auslesen

Willste mal was probieren?

const byte startsequenz[] = {1, 0, 16, 7, 0, 255};
bool startOk = false;
unsigned int myPos = 0;
int pos = 0;

void setup()
{
  Serial.begin(115200);
  Serial.println(F("Start..."));
  Serial3.begin(9600);
}
void loop()
{
  readZaehler();
}

void readZaehler()
{
  char myByte = ' ';
  if (Serial3.available() > 0)
    myByte = Serial3.read();
  Serial.print(F("gelesenes Zeichen: "));
  Serial.println(myByte, HEX);
  if (startOk == false)
  {
    if (myByte == startsequenz[0])
    {
      Serial.println(F("Startzeichen erkannt!"));
      startOk = true;
      myPos = 1;
      pos = 0;
    }
  }
  else
  {
    if (myPos <= sizeof(startsequenz))
    {
      Serial.print(F("suche Sequenzzeichen "));
      Serial.println(myPos);
      if (myByte != startsequenz[myPos])
      {
        Serial.print(F("Zeichen "));
        Serial.print(myByte, HEX);
        Serial.println(F(" passt nicht - setze zurück"));
        startOk = false;
      }
      else
      {
        Serial.print(F(" Sequenzzeichen Nummer: "));
        Serial.print(myPos);
        Serial.println(F(" erkannt!"));
        myPos++;
      }
    }
    else
    {
      pos++;
      if (pos > 10)
      {
        Serial.print(F("Wert erkannt: "));
        Serial.println(myByte);
      }
      if (pos > 11)
      {
        startOk = false;
      }
    }
  }
}

1 Like

Klar, probier ich auch...:ok_hand:

Ich hab mich mal versucht einzulesen, scheitere aber irgendwie...
Ausgangspunkt ist die TR-03109-1 und das HEX von @stoni99

1B 1B 1B 1B 01 01 01 01 76 05 19 B5 0F 86 62 00 
62 00 72 63 01 01 76 01 01 05 08 91 AF D6 09 08 
05 35 34 2D 6F 2B 28 01 01 63 FE 92 00 76 05 19 
B5 0F 87 62 00 62 00 72 63 07 01 77 01 09 08 05 
35 34 2D 6F 2B 28 07 01 00 62 0A FF FF 72 62 01 
65 11 08 62 4B 7A 77 07 81 81 C7 82 03 FF 01 01 
01 01 04 49 53 4B 01 77 07 01 00 00 00 09 FF 01 
01 01 01 09 08 05 35 34 2D 6F 2B 28 01 77 07 01 
00 01 08 00 FF 65 00 00 01 82 01 62 1E 52 FF 59 
00 00 00 00 0B B5 74 8C 01 77 07 01 00 01 08 01 
FF 01 01 62 1E 52 FF 59 00 00 00 00 0B B5 74 8C 
01 77 07 01 00 01 08 02 FF 01 01 62 1E 52 FF 59 
00 00 00 00 00 00 00 00 01 77 07 01 00 10 07 00 
FF 01 01 62 1B 52 00 55 00 00 07 94 01 77 07 01 
00 24 07 00 FF 01 01 62 1B 52 00 55 FF FF FF F5 
01 77 07 01 00 38 07 00 FF 01 01 62 1B 52 00 55 
00 00 07 8E 01 77 07 01 00 4C 07 00 FF 01 01 62 
1B 52 00 55 00 00 00 11 01 77 07 81 81 C7 82 05 
FF 01 01 01 01 83 02 41 27 37 5F 66 64 A6 5F 4C 
B1 DE 7E 8D 7F 27 59 67 38 A6 AB 84 46 F8 30 71 
E4 40 36 5A 81 79 73 95 3F D7 E2 41 5C 76 CB BD 
04 A9 97 5E A5 7D 76 01 01 01 63 2E FF 00 76 05 
19 B5 0F 88 62 00 62 00 72 63 02 01 71 01 63 4B 
C3 00 00 00 1B 1B 1B 1B 1A 02 

Der Einstieg ist die ESC-Sequenz, gefolgt von der Version.
Danach kommt ein List mit 6 Elementen (0x76). SML_PublicOpen.Res richtig? Dann wären auch alle optionalen Infos enthalten.
Codepage mit 5 Bytes (0x05),
gefolgt von clientID mit 25 byte (0x19),
reqFileId mit 181 bytes ?
serverId 15 bytes,
refTime 134 ?
SML-Version ...

Das kann nicht stimmen...
Wo ist mein Denkfehler?
Wird da erst die Länge und dann der Inhalt, die nächste Länge und der nächste Inhalt usw. angegeben?

Ansonsten ist das später eigentlich garnicht soo schlimm.
Vor allem, wenn man weiss, was tatsächlich in den (5) 3 Bytes des OBIS-code drin steckt. :wink:

Ich habe das mal auf einem Nano implementiert, aber irgendwann das komplette Parsen aufgegeben, weil mir der Speicher ausging. Deswegen suche ich jetzt nach den Einleitungssequenzen der OBIS-Kennzahlen und nehme die Struktur ab da auseinander.

Siehe Anhang - vielleicht kannst Du was damit anfangen.

main.cpp (21,5 KB)

1 Like

Ich spendier Dir nen Mega. (duck)
Na mal sehen, was ich da rauslese. Aber das wird wohl auch etwas dauern....
Danke!

kleiner spass an rande . das Projekt kannst Dir sparen . ab 6000KW bekommst laut neuen gesetz ein Smart zähler eingebaut . Fix und fertig . Spreche da nur aus der erfahrung und man kommt nicht mal drum rum .
also spare dir Zeit und verbrauch strom . haste das ding bald für 100€ extra jedes jahr an dein zähler hängen . lg
Ist zwar nur ein spass ist aber leider echt so nach neuen gesetz und ich hab das teil

Der ISKRA ist schon einer :wink:

oh das wusste ich nicht hab noch nicht mal geschaut was bei mir drauf steht .
also noch einer User mit überhöhten stromverbrauch ... so wie ich .
ich wollte das ding nicht und selbst mit Anwalt und bla . nix zu machen

Da ich keinen habe, wärest Du mein Kandidat, wenn ich dann doch nochmal SML auflösen will... Der andere Kandidat hat sich grad verabschiedet.

1 Like

aber gerne doch . Da gerade unten umgebaut wird wegen mir :wink: musste noch so rund 1 monat warten dann kann man da gerne ein projekt draus basteln . wäre mega .
hardware bastel ich :slight_smile:

edit da wirst dein spass haben . du musst das doppelt machen . Und berechnen durch meine werkstatt . hab 2 zähler :wink:

Nö.
Einmal machen und dann nur doppelt anwenden.
Geht mit nem Nano... Wenn der Speicher reicht fürs parsen...
Der einzige Parameter für mich ist die Anzahl der Lesepins :wink:

Ist wie mit ner Autobahn. Braucht man nur die Anzahl der Spuren :slight_smile:

1 Like

bin ich gern dabei . Hätte ich eh gerne . damit ich mal sehe was Haus oder werkstatt verbraucht und eben in kosten ...
bin ich bei Dir , Mach ich gerne mit

Oh.
dafür brauchst kein Dingens.
Nen Zähler mit S0-Schnittstelle, gibt es an jeder Strassenecke.
Das ist richtig schick. Lässte Dir nach Deinem Zähler einbauen - fertig.

Ich hab davon einige im Einsatz.... Ein Ausschnitt.

Aufzeichnung in einer MySql-DB und auf SD...
Macht schon Spass. Kühlschranktür offen merkt man...

die sind schon da . ich komme da nur gerade nicht so ran wie ich gern möchte mein Freund . Dort unten wird gerade gebaut und auf rädern oder stöcken kommst da noch nicht ran . ruhig Blut du darfst dich dort gern ausleben

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.