Smart Meter auslesen

Dieses Thema im Forum "AVR-Projekte" wurde erstellt von Knickohr, 10. August 2013.

  1. Knickohr

    Knickohr BASCOM-Experte

    Registriert seit:
    29. Februar 2008
    Beiträge:
    465
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Ihr habe ja lange nichts mehr von mir gehört, aber ich war immer da und habe mitgelesen. Hier meine neueste Frickelidee : Wie lese ich den elektronischen Stromzähler von meiner Bude aus ?

    Na, man baut sich eine kleine Schaltung die das infrarote Geblinke des Zählers umsetzt und über USB an einen PC weiter gibt :dance3:

    Sooo einfach isses nu auch nicht, es hab mehrere Monate gebraucht, bis ich die nötigen Informationen zusammen gesammelt und eine passende kleine Platine dazu gemacht habe. Doch von Anfang an. Vor etwas über 2 Jahren, als meine Eltern gestorben sind, mußte ich die Wohnung komplett neu renovieren. Die beiden waren demenzkrank und haben quasi die Bude von innen raus zerstört. Also kam gleich der Gedanke auf, die komplette Elektroinstallation ebenfalls auf den neuesten Stand zu bekommen. Und so habe ich auch gleich diese neumodischen modernen elektronischen Zähler installieren lassen :

    [​IMG]

    Die Zähler waren noch nicht lange drin, da fiel mir schon auf, das sie eine Infrarotschnittstelle zur Außenwelt hatten. Das Auge rechts oben an den Zählern muß eine Art Schnittstelle sein :

    [​IMG]

    Beim Fotografieren bemerkte ich auch, das dieses "Auge" mit mir "redet". Man erkennt im Kameradisplay immer wieder violette Lichtimpulse. Diese Impulse sind mit dem Auge nicht wahr zu nehmen, da es Infrarotlicht ist, die Kamera sieht es aber :

    [​IMG]

    Nun ging das große Suchen im Internet los. Wie funktioniert der Zähler, welches Protokoll sendet er, wie kann man die Signale abgreifen und umwandeln, gibt es bereits Software dafür, ist vielleicht sogar schon eine Auswerte- und Interfaceelektronik vorhanden ? Bei diversen Studien im Internet, in gewissen Foren, wurden auch Schaltungen vorgeschlagen. Die entsprechen aber nicht meinen "Anforderungen", waren zu primitiv und zu sehr Möchtegerngebastel, so das ich mir doch eine eigene Schaltung entwickelt habe :

    [​IMG]

    Die Schaltung ist universell und kann wohl für die meisten Zähler verwendet werden. Außerdem ist die komplette USB-Schnittstelle bereits mit integriert. Das Platinenlayout sieht dann so aus :

    [​IMG]

    Meine bisher am dichtesten bepackte Miniplatine. Die Leiterbahnen sind gerade mal 0,5mm stark, aber es soll ja alles in ein passendes Gehäuse direkt auf dem Zähler passen. Die Platine habe ich schon seit ein paar Monaten bei irgendeinem Auftrag mitmachen lassen :

    [​IMG]

    Gerade mal 23mm Durchmesser hat diese Winzplatine, aber ihr seid ja nichts anderes von mir gewöhnt :yes4: Bestückt sieht das dann so aus :

    [​IMG]

    Nun nehmen wir ein altes USB-Kabel und zwicken den Stecker von der Geräteseite ab. Die 4 Adern werden mit der Platine verbunden :

    [​IMG]

    Und schon haben wir einen Schreib-/Lesekopf für das Infrarotauge der elektronischen Zähler. Da ich die Schreibfunktion nicht benötige, fehlt auch die Sendediode. Einige Zähler müssen aber aufgefordert werden, etwas zu senden, deshalb ist das auf der Platine auch gleich mit vorgesehen. Das Kabel mit der Schnittstelle sieht dann so aus :

    [​IMG]

    Fehlt noch ein passendes Gehäuse für das Teil. Bei Shapeways (3d-Printing) habe ich mit ein Gehäuse aus Kunststoff drucken lassen. Dazu kommt noch ein Neodym-Magnet, der das Ganze magnetisch auf dem Zähler befestigt :

    [​IMG]

    Der Ringmagnet wird in das Gehäuse eingelegt, darauf kommt ein ausgeschnittener Papierring zur Isolation :

    [​IMG]

    Dann die kleine bestückte Platine einlegen und das Gehäuse verschrauben :

    [​IMG]
     
  2. Knickohr

    Knickohr BASCOM-Experte

    Registriert seit:
    29. Februar 2008
    Beiträge:
    465
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    (suppi, man kann hier nur 15 Grafiken in einem Beitrag einfügen :fie: Deshalb gleich einen Doppelpost dazu :sarcastic: )


    Na, sieht doch ganz brauchbar aus. Wie gekauft :dirol: Vorderseite :

    [​IMG]

    Rückseite :

    [​IMG]

    Also "kleben" wir das Ding mal an einen Zähler dran uns schauen, was passiert :

    [​IMG]

    Hier noch etwas größer, damit man es auch besser erkennen kann :

    [​IMG]

    Jepp, da fliegen die Daten. Der Zähler liefert mir alle 1 bis 2 Sekunden ein komplettes "Telegramm" über alle gespeicherten Verbrauchsdaten. Aus dieser Zahlenwurst muß ich die Werte noch raus fischen :

    [​IMG]

    Diese 324 Bytes enthalten alles, was der Zähler speichert. Es ist ein sogenanntes SML-Protokoll (Smart Messaging Language). Jetzt muß ich "nur" noch ein entsprechendes Stück Software schreiben, das mir diese Daten da leserlich darstellt.

    .... to be continued ...

    Thomas
     
  3. dino03

    dino03 Aktives Mitglied

    Registriert seit:
    27. Oktober 2008
    Beiträge:
    6.695
    Zustimmungen:
    14
    Punkte für Erfolge:
    38
    Sprachen:
    BascomAVR, Assembler
    Hi Thomas,

    sieht ja richtig professionell aus :cool: (Aber mit Lochraster bekommt man das noch kleiner :p)

    Das geht ja schon beinahe wieder an Reverse-Engineering dran ;) Ich laß mich echt mal überraschen wie das Protokoll nun aussieht und was alles drinsteckt. Bei nem Industriebetrieb wo ich mal vor nem Zählerkasten stand war da alles mögliche drauf zu sehen. CosPhi, Blindleistung, Wirkleistung und was weiß ich noch alles.

    Gruß
    Dino
     
  4. Knickohr

    Knickohr BASCOM-Experte

    Registriert seit:
    29. Februar 2008
    Beiträge:
    465
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Ein paar Beispiele :

    [​IMG]

    Das rosane ist die Startsqeuenz für SML :

    1B 1B 1B 1B - Start Escape Zeichenfolge
    01 01 01 01 - Start Übertragung Version 1
    76 - jetzt kommt eine SML-Message

    Das rote ist die Wirkarbeit Bezug (+) Zählerstand Total, das grüne die Wirkleistung Total.

    So kann man sich die ganzen Werte da raus fummeln. Muß nur noch wissen, wie die Werte zu lesen sind, denn im Hexcode kann ich so noch nix anfangen.

    Thomas
     
  5. Knickohr

    Knickohr BASCOM-Experte

    Registriert seit:
    29. Februar 2008
    Beiträge:
    465
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Sooo,

    ich hab mal das SML-Protokoll ein bißchen auseinander geflöht :

    Code:
    1B1B1B1B - Start Escape Zeichenfolge
    01010101 - Start Übertragung Version 1
    
    7605 - SML-Message + transactionId
    06C64A2C - transactionId
    
    6200 - groupNo 00
    6200 - abortOnError Ausführung fortsetzen
    
    72630101 - messageBody
    
    7601 - SML_GetList_Res + clientId (not set)
    0105024218BA
    0B0649534B01027A231797 - ServerID
    0101 - refTime + smlVersion
    638E3B - crc16 (Checksumme nach CCITT-CRC16)
    00 - SMLEndOfMessage
    
    7605
    06C64A2D
    62006200726307
    01
    
    7701
    0B0649534B01027A231797
    
    0701
    00620AFFFF
    
    72620165 - actSensorTime -> Aktuelles Datum und Zeit der Real Time Clock
    031D63F877 - 13377992823 Sekunden => 11.08.2013 13:17:12 MEZ -> 11.08.2013 12:17:12 MESZ
    
    7707 - valListEntry (sequence) + objName
    8181C78203FF - Herstelleridentifikation
    0101010104 - status, valTime, unit, scaler -> not set + value
    49534B - I S K -> ISKRA - Hersteller
    01 - valueSignature = not set
    
    7707 - valListEntry (sequence) + objName
    0100000009FF
    010101010B0649534B01027A231797
    01 - valueSignature = not set
    
    7707 - valListEntry (sequence) + objName
    0100010800FF - Wirk- Energie Total Bezug
    6500000182
    01621E - valTime = not set + unit Wh
    52FF59 - scaler ??? müßte /10 sein
    0000000003DE95A1 - 6491.894,5Wh
    01 - valueSignature = not set
    
    7707 - valListEntry (sequence) + objName
    0100010801FF - Wirk- Energie Tarif 1 Bezug
    0101621E - status = not set + valTime = not set + unit Wh
    52FF59 - scaler ??? müßte /10 sein
    0000000003DE95A1 - 6491.894,5Wh
    01 - valueSignature = not set
    
    7707 - valListEntry (sequence) + objName
    0100010802FF - Wirk- Energie Tarif 2 Bezug
    0101621E - status = not set + valTime = not set + unit Wh
    52FF59 - scaler ??? müßte /10 sein
    0000000000000000 - 0,0Wh
    01 - valueSignature = not set
    
    7707 - valListEntry (sequence) + objName
    01000F0700FF - Wirk- Leistung Total
    0101621B - status = not set + valTime = not set + unit W
    520065 - scaler = 1
    00000183 - 387W
    01 - valueSignature = not set
    
    7707 - valListEntry (sequence) + objName
    8181C78205FF - Public Key des Zählers
    01010101 - status = not set + valTime = not set + unit = not set
    8302BD191EE9B4816EB2990D6EFD69DB80673ECE2FC385B3D5B7EBD5DE6460E2E0EA58DEDF8E151A841034435AB7BF77E5A901010163C80E00760506C64A2E62006200726302
    01 - valueSignature = not set
    
    7101 - listSignature (not set) + actGatewayTime (not set)
    630B5A - crc16 (Checksumme nach CCITT-CRC16)
    00 - SMLEndOfMessage
    -- Erweiterungsbyte (bis Anzahl Byte modulo 4 = 0)
    1B1B1B1B - Ende Escape Zeichenfolge
    1A - Ende der Nachricht
    00 - Anzahl Erweiterungsbyte
    8F28 - Checksumme gesamte Nachricht (CCITT-CRC16)
    Na, sehr viel kommt da nicht raus, aber immerhin. Ich kann die Energie und die Leistung ablesen. Werde das nun in einen kleinen Linix-PC schieben und dort zerpflücken. Dann kommt noch eine grafische Aufbereitung dazu, die mir das Ganze auf meiner Webpage darstellt.

    Thomas
     
  6. Knickohr

    Knickohr BASCOM-Experte

    Registriert seit:
    29. Februar 2008
    Beiträge:
    465
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Das Projekt ist (fast) beendet :cool:

    Mein Zähler loggt jetzt sauber auf einen kleinen Miniserver :

    [​IMG] [​IMG]

    ... und stellt die Informationen grafisch dar :

    [​IMG]

    Jetzt muß ich nur nur die anderen 3 Zähler über einen USB-Hub anschließen und auswerten. Im Prinzip einfach nur den Code duplizieren und das wars dann schon.

    Thomas
     
  7. Hemi

    Hemi Premium Benutzer

    Registriert seit:
    30. November 2008
    Beiträge:
    991
    Zustimmungen:
    11
    Punkte für Erfolge:
    18
    Sprachen:
    C, C++, PHP, Java
    Hey Thomas,

    coole Sache :ciao:

    Was ist das für ein Miniserver?
     
  8. Knickohr

    Knickohr BASCOM-Experte

    Registriert seit:
    29. Februar 2008
    Beiträge:
    465
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
  9. Ditron

    Ditron Mitglied

    Registriert seit:
    11. Dezember 2011
    Beiträge:
    265
    Zustimmungen:
    4
    Punkte für Erfolge:
    18
    Sprachen:
    BascomAVR
    Wow, werde erst jetzt auf dein Projekt aufmerksam. Ganz klasse!

    Das kannst du ja quasi vermarkten ... :flute:
     
  10. dino03

    dino03 Aktives Mitglied

    Registriert seit:
    27. Oktober 2008
    Beiträge:
    6.695
    Zustimmungen:
    14
    Punkte für Erfolge:
    38
    Sprachen:
    BascomAVR, Assembler
    Hi,

    könnte man heute auch nen RasPi für einsetzen. Ließe sich sogar noch besser an den Atmel koppeln.

    Gruß
    Dino
     
  11. Knickohr

    Knickohr BASCOM-Experte

    Registriert seit:
    29. Februar 2008
    Beiträge:
    465
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Korrekt !

    Aber die Schnecke kenne ich in und auswendig. Solange es die noch über die Bucht gibt, hab ich kein Verlangen auf was anderes ;)

    Thomas
     
  12. Hemi

    Hemi Premium Benutzer

    Registriert seit:
    30. November 2008
    Beiträge:
    991
    Zustimmungen:
    11
    Punkte für Erfolge:
    18
    Sprachen:
    C, C++, PHP, Java
    Prinzipiell schon. Ich persönlich würde dafür aber eher sowas hier nehmen:

    CubieBoard: klick mich

    CubieBoard 2: klick mich

    Vorteile gegenüber RPi:
    -> SATA
    -> vernünftig angebundener USB
    -> mehr Speicher
    -> mehr Leistung
    -> mehr GPIOs

    Okay, zugegeben, das Ding kostet auch "etwas" mehr.
     
  13. Knickohr

    Knickohr BASCOM-Experte

    Registriert seit:
    29. Februar 2008
    Beiträge:
    465
    Zustimmungen:
    0
    Punkte für Erfolge:
    16
    Jooo,

    und verbraucht fast das 3-fache an Strom :p

    Thomas
     
  14. werner7

    werner7 Neues Mitglied

    Registriert seit:
    1. Januar 2019
    Beiträge:
    1
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Hallo Knickohr,
    hab man deine Markierte Stelle, dass rote sool ja die Wirkarbeit Bezug sein eingebeben.

    Irgendwie bekomme ich bei deinen Hex „Zahlen“ nichts brauchbares geboten, siehe Foto.


    Hab ich da wo einen „Systemfehler“ gemacht ?

    Gruß
     

    Anhänge:

  15. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    3.047
    Zustimmungen:
    54
    Punkte für Erfolge:
    48
    Sprachen:
    BascomAVR, Assembler
    Rot markiert ist (HEX):
    Code:
    77 07 01 00 01 08 00 FF 65 00 00 01 82 01 62 1E 52 FF 59 00 00 00 00 03 DD 7D 69 01
    Knickohr schrieb dazu:
    Wäre also hier:

    7707 - valListEntry (sequence) + objName
    0100010800FF - Wirk- Energie Total Bezug
    6500000182
    01621E - valTime = not set + unit Wh
    52FF59 - scaler ??? müßte /10 sein
    0000000003DD7D69 - ??? Wh
    01 - valueSignature = not set

    Also 0x03DD7D69 dWh (deziWh, wegen dem Scaler)
    0x03DD7D69 dWh = 64847209 dWh = 6.484.720,9 Wh
     
  16. Janiiix3

    Janiiix3 Aktives Mitglied

    Registriert seit:
    28. September 2013
    Beiträge:
    1.285
    Zustimmungen:
    10
    Punkte für Erfolge:
    38
    Sprachen:
    C, C#
    Sehr interessant ;)
     
  • Über uns

    Unsere immer weiter wachsende Community beschäftigt sich mit Themenbereichen rund um Mikrocontroller- und Kleinstrechnersysteme. Neben den Themen Design von Schaltungen, Layout und Software, beschäftigen wir uns auch mit der herkömmlichen Elektrotechnik.

    Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  • Coffee Time

    Unser makerconnect-Team arbeitet hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und unser eigener makerconnekt-Server regelmäßig gewartet wird. Wir nehmen das Thema Datensicherung und Datenschutz sehr ernst und sind hier sehr aktiv, auch sorgen wir uns darum, dass alles Drumherum stimmt!

    Dir gefällt das Forum und die Arbeit unseres Teams und du möchtest es unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft, unser Team freut sich auch über eine Spende für die Kaffeekasse :-)
    Vielen Dank!
    Dein makerconnect-Team

    Spende uns! (Paypal)
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren und die Seite optimal für dich anzupassen. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden