Auslesen Stromzähler Easymeter Q3B

Der chaotische Hauptfaden

Moderatoren: Heaterman, Finger, Sven, TDI, Marsupilami72, duese

Antworten
Benutzeravatar
Hightech
Beiträge: 11476
Registriert: So 11. Aug 2013, 18:37

Auslesen Stromzähler Easymeter Q3B

Beitrag von Hightech »

Moinsen zusammen,
ich habe ja nun einen "interligenten" Stromzähler.

Das dumme Gerät hat nur eine INFO-DSS, also einen Infomations-Datenausgang mittels IR-LED, welcher ein SML-Protokoll ausgeben soll
mit verschiedenen Daten.

Mittels eines Fototransistor kann ich die Daten auch lesen, doch bei Easy-Meter gibt es kein aktuelles Dokument was das genaue Protokoll
des Q3B angibt, nur das es sich um das SML v1.03 handelt.

Hat jemand an dem Gerät geforscht ?
Easy Meter Q3B (beim Herstelle als Auslaufprodukt geführt)

Hier mal ein Mittschnitt:

Code: Alles auswählen

        0     1b 1b 1b 1b 01 01 01 01  76 05 c8 a6 c6 c2 62 00      ........v.....b.
      10     62 00 72 65 00 00 01 01  76 01 01 07 45 53 59 51      b.re....v...ESYQ
      20     33 42 0b 09 01 45 53 59  11 03 9d 9e 8a 01 01 63      3B...ESY.......c
      30     a0 8a 00 76 05 c8 a6 c6  c3 62 00 62 00 72 65 00      ...v.....b.b.re.
      40     00 07 01 77 01 0b 09 01  45 53 59 11 03 9d 9e 8a      ...w....ESY.....
      50     01 72 62 01 65 00 04 59  b5 7a 77 07 81 81 c7 82      .rb.e..Y.zw.....
      60     03 ff 01 01 01 01 04 45  53 59 01 77 07 01 00 00      .......ESY.w....
      70     00 00 ff 01 01 01 01 0f  31 45 53 59 31 31 36 30      ........1ESY1160
      80     36 36 31 33 38 36 01 77  07 01 00 01 08 00 ff 01      661386.w........
      90     01 62 1e 52 fc 69 00 00  00 00 10 93 8f 01 01 77      .b.R.i.........w
      A0     07 01 00 02 08 00 ff 01  01 62 1e 52 fc 69 00 00      .........b.R.i..
      B0     00 00 10 67 26 af 01 77  07 01 00 01 08 01 ff 01      ...g&..w........
      C0     01 62 1e 52 01 65 00 00  0a                                         .b.R.e...
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Auslesen Stromzähler Easymeter Q3B

Beitrag von Fritzler »

Da felt doch noch was?
Laut v1 Spec wird auch mit 1b 1b 1b 1b beendet und danach kommen nochmal 4 bytes.

Weobei hier bei den Beispielen das auch manchmal fehlt, aber da ist dein Zähler ja bei:
https://wiki.volkszaehler.org/software/sml

Vllt passt das Beispiel ja,
Benutzeravatar
AVRbrutzel
Beiträge: 58
Registriert: Do 11. Jan 2018, 12:15

Re: Auslesen Stromzähler Easymeter Q3B

Beitrag von AVRbrutzel »

Benutzeravatar
Hightech
Beiträge: 11476
Registriert: So 11. Aug 2013, 18:37

Re: Auslesen Stromzähler Easymeter Q3B

Beitrag von Hightech »

Wie sieht 7 1/2 stellig mit Vorzeichen in HEX aus ?
Bzw wie ist das Vorzeichen definiert, das finde ich nirgends.
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Auslesen Stromzähler Easymeter Q3B

Beitrag von Fritzler »

Auf was ist das jetzt bezogen?
Da bräucht ich mal Kontext sonst kann ich da nur mutmaßen.
Benutzeravatar
Hightech
Beiträge: 11476
Registriert: So 11. Aug 2013, 18:37

Re: Auslesen Stromzähler Easymeter Q3B

Beitrag von Hightech »

Na in der Anleitung steht, die Leistung wird 7 1/2 stellig mit Vorzeichen und zwei Nachkomma über die IR-Schnittstelle ausgegeben, wohl als signed int 64.
Was meinen die dann mit 1/2 Stellig ?

Die Daten sehen ca. so aus:
00 00 0a 93 = 2707, also 27,07 Watt
wie sieht das dann bei - 27,07 Watt aus ?

und die 1/2 Stelle ? Vorneweg oder wie ?
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Auslesen Stromzähler Easymeter Q3B

Beitrag von Fritzler »

Eine Hexziffer sind 4 Bit, also 4 Doppel sind 4 Byte, das ist dann ein int32 und kein int64.
Was da die mit 1/2 Stelle meinen erschließt sich mir echt nicht in dem Kontext.
Die Halbe Stelle bei Messgeräten ist ja eine maximal mögliche führende 1 oder 0, sonst nix.
Das geht in Binär nicht nachgebaut.


Wenn es ein normales int32 ist, dann sind -27,07W = FF FF F5 6D (Zweierkomplement)
Zuletzt geändert von Fritzler am Sa 31. Mär 2018, 21:50, insgesamt 1-mal geändert.
Benutzeravatar
Hightech
Beiträge: 11476
Registriert: So 11. Aug 2013, 18:37

Re: Auslesen Stromzähler Easymeter Q3B

Beitrag von Hightech »

Irgendwo steht, wenn führende Nullen, dann positiv, wenn führende 1 dann negativ.
Sind die doof, oder macht das Sinn ?
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Auslesen Stromzähler Easymeter Q3B

Beitrag von Fritzler »

Eine führende 1 oder viele führende einsen?
Das wäre dann Einerkomplement oder Zweierkomplement.
Beim Einerkomplement ist das MSB der Vorzeichenindikator, das wäre bei den 32 Bit das Bit31.
Benutzeravatar
Hightech
Beiträge: 11476
Registriert: So 11. Aug 2013, 18:37

Re: Auslesen Stromzähler Easymeter Q3B

Beitrag von Hightech »

Fritzler hat geschrieben:Eine führende 1 oder viele führende einsen?
Das wäre dann Einerkomplement oder Zweierkomplement.
Beim Einerkomplement ist das MSB der Vorzeichenindikator, das wäre bei den 32 Bit das Bit31.
Danke!
Ich werd es morgen morgen sehen, wenn der Strom in die andere Richtung geht :)
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Auslesen Stromzähler Easymeter Q3B

Beitrag von Fritzler »

Äh Quatsch verlinkt, nur eine führende 1 für negativ ist kein Einerkomplement, sondern "Vorzeichen und Betrag"
Benutzeravatar
xoexlepox
Beiträge: 4815
Registriert: So 11. Aug 2013, 19:28
Wohnort: So etwa in der Mitte

Re: Auslesen Stromzähler Easymeter Q3B

Beitrag von xoexlepox »

Irgendwo steht, wenn führende Nullen, dann positiv, wenn führende 1 dann negativ.
Sind die doof, oder macht das Sinn ?
Sollte das die "halbe Stelle" sein? -> 1Bit Vorzeichen, bleiben noch 7Bit, oder (falls BCD oder sowas): 1Bit Vorzeichen, 3Bit "halbe Stelle".
Benutzeravatar
Fritzler
Beiträge: 12600
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Auslesen Stromzähler Easymeter Q3B

Beitrag von Fritzler »

Die Zahl hat ja ziemlich offensichtlich mehr als 8Bit, sonst dürfte er nie mehr als +-1,27W ziehen :lol:
Das sieht irgendwie so aus als wärs wirklich ein normales 32Bit int, aber der Zahlbereich ist eben auf +- 7 1/2 stellig begrenzt.
nen normaler 32 Bit Integer hat ja 10 stellen (+-2147483647)

Nach BCD sieht Hightechs 27,07 W Zahl nicht aus.
Benutzeravatar
Hightech
Beiträge: 11476
Registriert: So 11. Aug 2013, 18:37

Re: Auslesen Stromzähler Easymeter Q3B

Beitrag von Hightech »

So, der Zähler ist ausgelesen, hab die Schlange so lange gewürgt, bis es passt.
Es wird ein BPY62 Fototransistor mit 2 Transistoren verstärkt und über einen Max232 auf einen USB-Adapter gegeben.

Code: Alles auswählen

#!/usr/bin/python
#       Script zum Auslesen des Easy Meter Q3B
#
#
import struct
import serial
import time
from subprocess import call
from shutil import copyfile
ser = (serial.Serial('/dev/ttyUSB_Strom' , 9600))
pfad = '/var/www/html/pvpower/'
file1 = pfad+'Verbrauch.txt'
file2 = pfad+'Bezug.txt'
file3 = pfad+'Ertrag.txt'
file4 = pfad+'DeltaErtrag.txt'
file5 = pfad+'DeltaBezug.txt'

while True:
        #while True:
        try:
                postring=""
                pistring=""
                pastring=""
                string=""
                out=""
                z=""
                y=""
                w=""
                while ser.inWaiting() > 0:
#
#       Der String wird eingelesen, ist immer 336 Zeichen lang
#       Die Zählerstände finden sich an den Stellen 174 + 8 Zeichen und 150 + 8 Zeichen
#       8 HEX Stellen, BigEdian, 7 Nachkommastellen unsigned 64
#
                        out = ser.read(336)
                        i=0
                        for i in range(8):
                                string = out[174+i]
                                postring = postring + string
                        i=0
                        for i in range(8):
                                string = out[150+i]
                                pistring = pistring + string
#
#       Die aktuelle Leistung inst an der Stelle 278  und ist 4 Zeichen lang
#       4 HEX Stellen, BigEndian, 2 Nachkommastellen singned 32
#

                        i=0
                        for i in range(4):
                                string = out[278+i]
                                pastring = pastring + string
#
#       Die HEX Werte müssen aus dem String ausgepackt werden
#       > bedeutet BigEndian Q= unsginged 64bit l= signed 32bit
#

                        z=struct.unpack('>Q',postring )
                        y=struct.unpack('>Q',pistring)
                        w=struct.unpack('>l',pastring)
#
#       Die Ausgabe ist ein Tuple, davon wollen wir nur das erste
#
                        z= z[0]/10000
                        y= y[0]/10000
                        w= w[0]/100

#
#       Umrechung in Float, mit Nachkommastellen
#
                        z="%6.3f"%(float(z)/1000)
                        y="%6.3f"%(float(y)/1000)

#
#       Einlesen des Bezug und Ertag vom Vortag
#

                        with open (file4) as file_object:
                                PL2=file_object.read()
                        with open (file5) as file_object:
                                PL3=file_object.read()
#
#       PL1 ist die Leistung, PL2 Ertrag PL3 Bezug
#       Update der Datenbank
#

                        cmd = "/usr/bin/rrdtool update /home/pi/rrd/Strom.rrd -t PL1:PL2:PL3 N:"+str(w)+":"+str(PL2.rstrip())+":"+str(PL3.rstrip())
                        #print cmd
                        call(cmd, shell=True)

#
#       Erzeugen der Texte für die Homepage
#

                        ausgabe="Bezug:"+str(y)+"kwh, Abgabe:"+str(z)+"kwh, Leistung:"+str(w)+"Watt"
                        #print ausgabe
                        with open (file1, 'w') as file_object:
                                file_object.write( ausgabe )
                        with open (file2, 'w') as file_object:
                                file_object.write( y )
                        with open (file3, 'w') as file_object:
                                file_object.write( z )


        except:
                print "Fehler ezy.py"

joergz
Beiträge: 4
Registriert: Sa 8. Feb 2020, 00:03

Re: Auslesen Stromzähler Easymeter Q3B

Beitrag von joergz »

Hallo,

ich versuche auch verzweifelt den Q3B auszulesen und habe es mit einem Fototransistor am PI versucht (https://pgoergen.de/2018/05/build-a-sma ... ad-for-1e/).
Auf https://wiki.volkszaehler.org/software/sml ist ja das für den Q3B beschrieben. Evtl. habe ich hier einen Denkfehler. Hat einer von euch eine Idee?
Aber wenn ich mir die Daten über minicom anschaue, dann kommt da was anderes an:

OPTIONS: I18n
Compiled on Apr 22 2017, 09:14:19.
Port /dev/ttyAMA0, 22:55:13

Press CTRL-A Z for help on special keys

80 e0 fa 07 06 18 0e 80 01 80 0e 06 06 01 80 e0 80 f0 fe 07 06 18 1e 06 80 01 88
0 68 f2 ff 06 18 9e 06 80 01 80 06 06 06 01 80 80 80 fb 07 06 18 80 0e 80 01 80
06 06 06 01 80 80 fe 80 fb 07 06 18 f8 1f 06 80 01 80 06 06 06 03 f8 01 80 80 e0
ff 07 06 18 0e 80 01 80 06 06 06 01 80 00 80 f8 07 06 18 06 80 01 80 06 06 06 0
1 80 fc 80 01 f8 07 06 18 80 06 80 01 80 06 06 01 e0 06 01 80 e0 80 f8 07 06 18
c8 06 80 01 80 06 06 06 02 f0 80 30 00 f8 07 06 18 80 06 80 01 80 06 06 06 1e 01
80 02 80 f8 07 06 18 80 04 0e 80 01 80 06 06 06 20 01 80 80 07 80 1f f8 07 06 1
8 c0 0e 80 01 80 0e 06 06 01 80 80 f8 07 06 18 e0 20 0e 80 01 80 06 06 06 fb 80
70 00 f8 07 06 06 80 01 80 06 06 06 01 80 fc 80 f8 07 0e 06 80 01 80 06 06 06 01
80 20 80 f8 07 06 78 06 80 01 80 06 06 06 01 80 80 f8 07 06 06 80 01 80 06 06 0
1 e0 06 01 80 da 80 30 00 f8 07 06 40 06 80 01 80 06 06 06 01 80 80 60 f8 07 06
06 80 01 80 06 06 06 01 80 c8 80 40 00 f8 07 06 0e 80 01 80 0e 06 06 01 80 80 c0
00 f8 07 06 08 06 80 01 80 06 06 0c 06 02 80 80 f0 00 f8 07 06 80 06 80 01 80 0
6 06 06 01 80 60 f8 80 f8 07 06 06 80 01 80 06 06 06 01 80 03 ff 80 f8 07 06 06
80 01 80 06 06 06 fe 80 f8 07 06 06 80 01 80 06 06 06 80 3e 30 00 f8 07 06 06 80
01 80 06 06 0e 01 80 80 f8 07 0e f8 20 06 80 01 80 06 06 06 01 80 80 18 f8 07 0
6 06 80 01 80 06 06 06 80 06 08 07 f8 07 06 20 e0 06 80 01 80 06 06 0e 01 80 80
f0 f8 07 06 00 06 80 01 80 06 06 06 01 80 00 80 f8 07 06 c0 06 80 01 80 06 06 06
80 f8 07 06 06 80 01 80 06 0e 06 18 01 80 80 da f8 07 06 08 06 80 01 80 06 06 0
6 01 80 3f f0 80 b0 00 f8 07 06 08 0e 80 01 80 06 06 06 01 80 09 80 f8 07 06 0b
00 06 80 01 80 06 06 03 06 01 80 f0 80 00 c0 00 f8 07 06 06 80 01 80 06 0e 0e 3c
80 01 80 80 c0 00 f9 07 06 0e 80 01 80 06 06 06 00 80 08 f0 80 fd 07 06 f8 01 0
e 80 01 80 0e 06 06 58 01 80 80 00 f8 07 06 80 01 e0 06 c8 06 06 06 07 01 80 80
00 f8 07 06 e0 0c 0e c8 06 06 0e 80 f8 07 06 06 c8 06 06 06 01 80 00 e0 80 30 00
f8 07 06 06 c8 06 06 06 fb 80 ff f8 07 06 06 c8 06 06 06 01 80 80 00 03 f8 07 0
6 48 fb 06 c8 06 06 06 01 80 18 38 80 f8 07 06 08 01 06 c8 06 06 06 48 01 80 00
80 70 00 f8 07 06 c0 06 c8 06 06 06 01 80 ff 80 00 f8 07 06 06 c8 06 06 06 01 80
80 00 f8 07 06 00 3f 06 c8 06 06 06 48 80 f8 07 06 38 0b 0e c8 0e 06 06 01 80 0
0 01 03 fc 80 08 30 00 f9 07 06 38 1f 06 c8 06 06 0e 01 80 80 f8 07 06 38 06 c8
06 06 06 01 80 80 00 40 00 f9 07 06 38 06 c8 06 0e 06 1e f8 80 80 c0 00 f9 07 06
38 06 c8 0e 06 06 80 03 80 01 80 00 ff 80 f0 80 fc 07 06 38 02 06 c8 0e 0e 06 0
1 80 80 01 01 f8 07 06 38 1e 02 06 c8 06 0e 0e 0c

Danke,
Jörg
shaun
Beiträge: 2399
Registriert: Mo 12. Aug 2013, 20:37

Re: Auslesen Stromzähler Easymeter Q3B

Beitrag von shaun »

Wir haben in derzeit 6 Telemetrie Objekten drei verschiedene Smart Meter und vier verschiedene Protokolle.
Mal Vorzeichenbit, mal 32bit, mal 48bit, mal Zweierkomplement. Standards sind was Tolles ;)
Jetzt kommt ein BHKW mit 22 Mieterstromzählern, Lastgangzähler, Akkuanlage und Gaszählern dazu. Ich glaub ich mach mal Urlaub.
andreas6
Beiträge: 4157
Registriert: So 11. Aug 2013, 15:09

Re: Auslesen Stromzähler Easymeter Q3B

Beitrag von andreas6 »

Die Hex-Werte sehen nach zu hoher Baudrate aus. Drehe das Tempo mal etwas runter.

MfG. Andreas
Benutzeravatar
Hightech
Beiträge: 11476
Registriert: So 11. Aug 2013, 18:37

Re: Auslesen Stromzähler Easymeter Q3B

Beitrag von Hightech »

Könnte auch einfach das TTL invertiert sein. Ist ein häufiger Fehler das man denkt, 5V ist 1, wobei dann 1 ist wenn der Pegel nach Null gezogen wird.
Bzw. auch anders Herum.
Benutzeravatar
Cyrix
Beiträge: 637
Registriert: Di 13. Aug 2013, 01:47
Wohnort: Bremen-Nord

Re: Auslesen Stromzähler Easymeter Q3B

Beitrag von Cyrix »

Eltako hat ein Gateway für diese Zähler, und in der Anleitung zu diesem Gateway sind vielleicht ein paar hilfreiche hinweise (hoffentlich)
https://www.eltako.com/fileadmin/downlo ... net_dt.pdf
Dieses Stromzähler-Datengateway kann
die Daten eines elektronischen Haushaltzählers (eHZ-EDL) mit IR-Schnittstelle
gemäß IEC 62056-21
und SML Protokoll
Version 1 dem RS485-Bus zur Verfügung
stellen.
https://www.satec-global.com/sites/defa ... 056-21.pdf
Benutzeravatar
Hightech
Beiträge: 11476
Registriert: So 11. Aug 2013, 18:37

Re: Auslesen Stromzähler Easymeter Q3B

Beitrag von Hightech »

https://www.easymeter.com/products/zaeh ... !#variants
https://www.easymeter.com/products/zaeh ... 004#!#docs

Zudem muss man genau schauen welche Optionen bei dem Q3B aktiviert sind. Ob da SLM oder Klartext rauskommt kann man an der genauen Typenbezeichnung sehen.
Auf der Homepage von Eazymeter muss man mal schauen. Die Teile kann man in allen möglichen Kombinationen bestellen.
SML-1.pdf
(699.68 KiB) 97-mal heruntergeladen
fnn-lastenheft-edl-1-0-2010-01-13-data.pdf
(464.35 KiB) 71-mal heruntergeladen
joergz
Beiträge: 4
Registriert: Sa 8. Feb 2020, 00:03

Re: Auslesen Stromzähler Easymeter Q3B

Beitrag von joergz »

Hallo zusammen,

Das hört sich ja alles spannend an. Da muss ich noch mal testen. Bei den Tests hatte ich 9600bd.
Es handelt sich um den Q3BA1000 V4.07.

Gruß
Jörg
joergz
Beiträge: 4
Registriert: Sa 8. Feb 2020, 00:03

Re: Auslesen Stromzähler Easymeter Q3B

Beitrag von joergz »

Hightech hat geschrieben: So 9. Feb 2020, 00:12 Könnte auch einfach das TTL invertiert sein. Ist ein häufiger Fehler das man denkt, 5V ist 1, wobei dann 1 ist wenn der Pegel nach Null gezogen wird.
Bzw. auch anders Herum.
Falls es daran liegt... wie könnte man das am besten lösen? Per Skript die empfangenen Daten invertieren oder ?

Gruß
Jörg
Benutzeravatar
Hightech
Beiträge: 11476
Registriert: So 11. Aug 2013, 18:37

Re: Auslesen Stromzähler Easymeter Q3B

Beitrag von Hightech »

Nein, man muss das schon richtig herum machen, sonst kommt alles durcheinander.
joergz
Beiträge: 4
Registriert: Sa 8. Feb 2020, 00:03

Re: Auslesen Stromzähler Easymeter Q3B

Beitrag von joergz »

Hightech hat geschrieben: So 9. Feb 2020, 20:14 Nein, man muss das schon richtig herum machen, sonst kommt alles durcheinander.
Vielen Dank, jetzt sieht es besser aus. Ich kann jetzt die Daten mit einem Pullup empfangen.

Gruß
Jörg
Antworten