Hallo zusammen,
ich habe in meiner Wohnung folgenden Wärmezähler der Firma Allmess GmbH
(s. Bild). Dieser verfügt über eine optische Schnittstelle (M-Bus), die
ich gerne verwenden würde, um darüber Daten über Verbrauch etc.
auszulesen und weiterzuverarbeiten.
Ich habe mich im Netz und auch hier im Forum etwas schlau gemacht über
diesen M-Bus und was ich bis jetzt verstanden habe, ist, dass die Geräte
i.d.R. (immer?) über einen M-Bus-Master angesprochen werden. Der
Standard EN60870-5 spezifiziert offensichtlich den Frame-Aufbau, das
Format der Datenpakete und grundlegende Anwendungsfunktionen
(Wikipedia).
Nun würde ich gerne zum einen wissen, ob ich meinem Wärmezähler einen
M-Bus-Master vorgaukeln muss, um an seine Daten zu kommen und welche
Spezifikationen für mich dabei relevant sind. Müsste ich mich also durch
alle Teile des Standards durchwühlen oder baue ich über die optische
Schnittstelle einfach eine serielle Kommunikation auf und tausche
einfache Pakete mit dem Zähler aus und muss mich nur auf bestimmte Teile
des Standards konzentrieren?
Ich habe hier im Forum bereits etwas von Pegelwandlung etc. gelesen,
aber ich denke mal, dass ich damit nichts am Hut habe, da dies nur bei
einer drahtgebundenen Kommunikation mit einem Master interessant ist.
Ich möchte also im einfachsten Fall eine IR-Diode an die Schnittstelle
des Zählers hängen, seriell mit ihm kommunizieren und die Daten dann
weiterverarbeiten.
Achja, interessieren würde mich natürlich noch, ob ich dabei auch etwas
im Gerät zerstören könnte? Ich möchte keinesfalls irgendwas an dem Teil
verändern, lediglich die Werte möchte ich gerne auslesen.
In die Standards kann ich leider im Moment nicht reinschauen, aber ich
könnte nächste Woche in meiner Uni mal sehen, ob wir spezielle diesen
Standard dort auch rumliegen haben.
Über Hilfe und sachdienliche Infos darüber bin ich sehr dankbar :)
Gurß
A.. P. schrieb:> Nun würde ich gerne zum einen wissen, ob ich meinem Wärmezähler einen> M-Bus-Master vorgaukeln muss, um an seine Daten zu kommen und welche> Spezifikationen für mich dabei relevant sind. Müsste ich mich also durch> alle Teile des Standards durchwühlen oder baue ich über die optische> Schnittstelle einfach eine serielle Kommunikation auf und tausche> einfache Pakete mit dem Zähler aus und muss mich nur auf bestimmte Teile> des Standards konzentrieren?
Ein Gerät, das mit einem M-Bus-Gerät kommuniziert, ist ein M-Bus-Master.
Das ergibt sich aus dem Prinzip, ist aber nicht weiter kompliziert.
Du musst nur über die serielle Schnittstelle dem Gerät mitteilen, daß es
seine Daten senden soll. Dazu musst Du neben den eigentlichen
Kommunikationsparametern (Baudrate, Parität, Stopbits) noch die
Geräteadresse herausfinden.
Das geht, indem Du das Gerät mit der Adresse 254 (0xfe) ansprichst, es
antwortet daraufhin mit seiner konfigurierten Adresse. Da Du keinen Bus
im eigentlichen Sinne hast, sondern nur zwei Teilnehmer, kann es dabei
auch nicht zu Kollisionen kommen.
Was der Master zu senden hat, ist recht einfach, die Geräteadresse und
der Funktionscode für "liefere Deine Daten". Das Gerät (der Slave)
antwortet dann mit einem Datentelegramm; passen nicht alle Daten in das
Telegramm, wird im Telegramm signalisiert, daß noch weitere Telegramme
verfügbar sind, die der Master separat anzufordern hat.
Aufwendiger wird es, das Telegramm zu decodieren, das der Slave sendet.
Aber dafür gibt es Sourcecode:
http://www.rscada.se/libmbus/> In die Standards kann ich leider im Moment nicht reinschauen
Die findet man im Internet:
http://www.m-bus.com/
Das Dokument hier
http://www.m-bus.com/files/MBDOC48.PDF
genügt eigentlich schon, interessant sind für Dich die Informationen ab
Seite 22. Die vorhergehenden Seiten beschreiben das elektrische
Interface (das Du nicht nutzt) und nicht die optische Übertragung.
Wie die hardwaremäßig umzusetzen ist, entzieht sich meiner Kenntnis, da
bist Du auf Dich selbst gestellt.
Super, danke dir schon mal für die Quellen! Werde diese mal durchlesen
und hoffe, dass ich daraus bereits alles entnehmen kann, was ich
benötige. Den Hardwareteil kriege ich schon auf die Reihe :)
Besten Gruß
Keine Ahnung, ob das jetzt noch relevant ist, aber bei dem Thema MBus
muss man immer ein wenig aufpassen:
Der eigentliche MBus, so wie er mal gedacht war, ist eine drahtgebundene
Schnittstelle mit einer Mischung aus strom- und spannungsdefierter
Übertragung. Das System ist sehr robust und wird so seit Jahrzehnten
verwendet.
Aus diesem Standard hat sich dann auch der Wireless MBus entwickelt.
Die optische Schnittstelle der Wärmezähler gehört nicht zu dem
MBus-Standard, verwendet aber gerne dessen Telegrammaufbau. Im Kern sind
diese optischen Schnittstellen also lediglich UARTs über IR Dioden.
Wenn man also Baudrate, Byteformat und die Telegrammliste hat, ist der
Rest wirklich einfache serielle Übertragung und erfordert keine tiefere
Kenntnis den MBus.
Viel Erfolg und Grüße,
Markus
Hallo,
ich würde gerne auch den gleichen Wärmemengenzähler auslesen. Habe mir
dazu eine IR Schnittstelle mit 860nm gebaut. Bei den diversen
Stromzählern (SML) funktioniert diese auch ohne Probleme.
Leider kann ich keine Kommunikation mit dem Wärmemengenzähler aufbauen.
Zum Übermitteln des 0xFE Bytes nutze ich Lorus in der Freeware Version.
Vielleicht ist ja schon jemand weiter und kann mir einen Tipp geben.
Hallo,
ich würde gerne einen ähnlichen Zähler mit gleicher Schnittstelle
auslesen.
Es ist der Integral-V UltraLite Art.Nr.: 561423000706 mit Optische
Schnittstelle EN 60870-5 / M-BUS Protokoll.
Wie bekomme ich über die optische Schnittstelle ein Signal auf M-Bus
Zweidraht?
Ich finde dazu keine Hardware. Oder gibt es andere Möglichkeiten?
oroettger schrieb:> Ich finde dazu keine Hardware. Oder gibt es andere Möglichkeiten?
Eventuell hilft Dir unter wiki.volkszaehler.org ein IR-Schreib-Lesekopf
mit dem ich eHZ Stromzähler auslese. Ich konnte seinerzeit den fertigen
Kopf kaufen und mußte nicht selber basteln. Eigentlich müßte der
M-Buszähler damit auch klar kommen.
https://wiki.volkszaehler.org/hardware/controllers/ir-schreib-lesekopf-rs232-ausgang
Du mußt jedoch auch die Software für das Ansteuern und Auslesen des
M-Buszähler haben.
Alexander S. schrieb:> Zum Übermitteln des 0xFE Bytes nutze ich Lorus in der Freeware Version.https://www.m-bus.de/lorusfree.html
Diese Software hatte mir anfangs sehr geholfen.
mfg Klaus
Klaus R. schrieb:> Eventuell hilft Dir unter wiki.volkszaehler.org ein IR-Schreib-Lesekopf> mit dem ich eHZ Stromzähler auslese. Ich konnte seinerzeit den fertigen> Kopf kaufen und mußte nicht selber basteln. Eigentlich müßte der> M-Buszähler damit auch klar kommen.
Kann ich so direkt nicht bestätigen. Ich habe mir einen Kopf selbst
gebaut, mit SFH4554 als Sendediode (850nm statt 880nm) und SFH 309 als
Empfänger. Dieser funktioniert einwandfrei mit jedem bisher getesteten
Stromzähler aber leider nicht mit oben genanntem Wärmemengenzähler. Ich
habe es mit verschiedener Software und auch Ansteuersequenzen getestet
und kann mir folgende Dinge vorstellen:
Spezielle Ansteuerungssequenz
Reedkontakt der die optische Schnittstelle aktiviert
Der Sendekopf wurde selbst entwickelt um den Haltenasen am WMZ zu
entsprechen. Das Layout / Schaltpläne veröffentliche ich gerne.
Alexander S. schrieb:> Der Sendekopf wurde selbst entwickelt um den Haltenasen am WMZ zu> entsprechen. Das Layout / Schaltpläne veröffentliche ich gerne.
Würde mich interessieren.
Alexander S. schrieb:> aber leider nicht mit oben genanntem Wärmemengenzähler. Ich> habe es mit verschiedener Software und auch Ansteuersequenzen getestet> und kann mir folgende Dinge vorstellen:>> Spezielle Ansteuerungssequenz> Reedkontakt der die optische Schnittstelle aktiviert
Manche Hersteller sind da auskunftsfreudig.
mfg Klaus
Hallo,
anbei die Dateien zum Lesekopf. Erstellt in KiCAD 5.0.
Bei dem Hersteller habe ich einmal angefragt, alternativ werde ich es
noch mal mit der Initialisierungssequenz nach EN 62056-21 probieren.
Alexander S. schrieb:> Initialisierungssequenz nach EN 62056-21
Die Schaltung sieht wirklich gut aus. Den FT-Baustein kannte ich noch
nicht. Ich habe immer den FT232RL verwendet.
Hast Du einen Link zur "Initialisierungssequenz nach EN 62056-21"?
Mal schauen was dahintersteckt. Die ganze M-Bus Programmierung war
damals ziemlich aufwändig.
mfg klaus
Klaus R. schrieb:> Die Schaltung sieht wirklich gut aus. Den FT-Baustein kannte ich noch> nicht. Ich habe immer den FT232RL verwendet.
Günstiger da z.B. ohne komplettes Handshakeinterface - außerdem war
dieser gerade besser lieferbar.
Ich hätte die Norm, denke aber nicht das ich diese hier veröffentlichen
darf.
Ich gebe es mal mit meinen eigenen Worten wieder:
Es gibt zwei Verfahren, die sich in der Dauer der Aufwachsequenz
unterscheiden.
Bei dem langsameren Verfahren muss man einen String von Nullzeichen
senden (0x00) mit einer Gesamtlänge zwischen 2,1 und 2.3 Sekunden. Es
dürfen maximal 5 ms zwischen den Zeichen vergehen. Die Baudrate sollte
bei 300 Baud liegen und es wird mit einem Startbit, sieben Datenbits
einer geraden Parität und einem Stopbit gearbeitet. Nach dieser Sequenz
soll das Auslesegerät 1,5 bis 1.7 Sekunden warten und dann die Request
Message senden.
Eine solche Nachricht besteht auf folgernder Zeichenkombination
"/?!CRLF"
Hier wurde eine Geräteadresse weggelassen (ansonsten zwischen ? und !),
es sollte jedes Gerät antworten. CR/LF stehen für Carriage Return (0x0A)
und Line Feed (0x0D).
Danach sollte das Gerät mit seinem Identifier antworten und eine
Kommunikation kann beginnen.
Alternativ gibt es die schnellere Wakeupsequenz
Hier werden Blöcke mit Aufwachsequenzen verschickt und nach jedem Block
auf eine Reaktion vom Gerät gewartet.
Eine Sequenz besteht aus dem Übermitteln von Nullzeichen (0x00) für 0,5
- 0,6 Sekunden. Danach muss die Übertragungszeit von zwei Zeichen + 20 -
40 ms auf ein ACK (0x06) gewartet werden. Dieser Block einer
Aufwachsequenz soll mindestens für 4,5 Sekunden gesendet werden. Falls
das Gerät mit einem ACK antwortet, soll die Übertragung abgebrochen
werden, dies kann auch schon während der Nullsequenz sein.
Nach dem ACK soll der Master 200 ms warten, um danach oben beschriebene
Request Message zu senden. Nach 1500ms nach dem ACK legt sich das Gerät
wieder schlafen.
In beiden Fällen soll die Wartezeit zwischen zwei erfolglosen Versuchen
1,5 Sekunden betragen. Erfolglos ist meiner Meinung nach, wenn ein NACK
(0x15) statt einem ACK geantwortet wird. In der Norm wird das als
Übertragungsfehler beschrieben.
Interessiere mich auch für die Auslesemöglichkeit des o.g. Wärmezählers
(4 Stück).
Bei der Recherche bin ich auf das hier gestoßen, vielleicht hilfts:
http://www.sedelmaier.at/node/112
Hallo,
ich bin etwas weiter gekommen. Die Kommunikation muss nach folgendem
Muster erfolgen:
1. Übertragung von Muster 0/1 für 3 Sekunden (2400Baud, 8N1 ohne
Parität) - realisiert durch das Senden von 0x55
2. Wartezeit von 234ms (10 Zeichen Wartezeit? - Eigentlich schreibt
EN1434-3 330 Bitperioden + 50ms vor)
3. Umstellen der Übertragung auf 8N1 mit gerader Parität
4. Übertragen eines Mbus Telegramms (SND_UD) mit CI von 0xA6 (unbekannt)
an die Geräteadresse 0xFE (Broadcast) (0x68 (Start)
0x03(Nachrichtenlänge - L Field) 0x03(Nachrichtenlänge - L Field,
erneut) 0x68 (Start) 0x53 (SND_UD) 0xFE (Broadcast Addr. mit Antwort)
0xA6 (unbekannt) 0xF7 (Prüfsumme, richtig) 0x16 (End)
5. Prüfen auf Antwort (0xE5), falls keine Antwort 3s Wartezeit - dann
erneut bei 1 beginnen - maximal drei Wiederholungen
6. Falls drei Wiederholungen ohne Antwort => Umstellen der Baudrate auf
9600 Baud und erneut drei Versuche.
Leider funktioniert die Kommunikation nach obigem Schema bei mir nicht.
Vielleicht kann jemand anders es einmal mit einem anderen Kopf
probieren.
Rufus Τ. F. schrieb:> Ich würde das 8E1 nennen. Das "N" in 8N1 steht für kein Parity-Bit.
Wie gedankenlos von mir. Vielleicht kann ein Moderator den Beitrag
#5872420 anpassen - mir ist das leider nicht mehr möglich.
M-Bus (also Zweidraht) und optische Schnittstelle sind zweierlei...
Die optische Schnittstelle arbeitet nach ZVIE und kommt aus dem
Stromzählerbereich. Bei den Wärmezähler läuft darauf fast immer das
M-Bus Protokoll.
Bei dem batteriebetriebenen Wärmezählern muss man die Schnittstelle
erstmal aufwecken, weil die aus Energiespargründen immer aus ist. 1-2
Sekunden 0x55 hinschicken. Dann mit 2400 8E1 ein SND_NKE oder ein
REQ_UD2 Telegramm an Testadresse 254. Dann sollte was zurückommen (68 LL
LL 68 usw).
Beim 62056/1107 Protokoll wird mit 300baud 7e1 angefragt und dann die
Baudrate auf 2400/9600 gestell. Ja nachdem was der Zähler kann. Aber das
ist eher notwenig bei den Stromzählern.
Nachtrag:
Manche Wärmezähler lassen sich nicht beliebig oft an der optischen
Schnittstelle auslesen. Manchen lassen nur eine gewisse Anzahl an
Kommunikatioen pro Tag zu, manche haben lustige Creditsystem und einige
schalten ihre Schnittstelle zu bestimmten Zeiten (Nachts) komplett ab.
Hab mir jetzt eine Prototyp-Schnittstelle zusammengebastelt nach dem
Schema von falk hier:
Beitrag "Re: Smartmeter - MT681 - Fehler beim IR-Lesen"
Ist über einen Max232 und rs232-usb Wandler an den Rechner angeschlossen
(Hackintosh).
Senden und Empfangen geht einwandfrei, wenn ich z.B. einen Spiegel
davorhalte.
Auf dem Wärmezähler montiert (gleicher Typ wie im ersten Bild ganz oben)
schicke ich per Terminal (2400 baud, 8E1) ca. 2 sek. 0x55 rein, danach
mehrere 0xFF und gleich die Sequenz 10 40 FE 3E 16 hinterher (SND_NKE).
Ab und zu bekomme ich darauf tatsächlich die Antwort 0xE5 :-)
Schreib mir nun ein C-Programm, um das weiter auszutesten.
Gute Informationen gibt es hier auf Seite 4/5:
https://docuthek.kromschroeder.com/documents/download.php?lang=de&doc=29514
A.. P. schrieb:> lediglich die Werte möchte ich gerne auslesen.
Wieso machst du dir das so kompliziert?
Meistens kann man direkt einen Zugang zu "den eigenen Werten" bekommen.
Schreibe doch die Firma an, die die Auswertung macht.
F. F. schrieb:> A.. P. schrieb:>> lediglich die Werte möchte ich gerne auslesen.>> Wieso machst du dir das so kompliziert?> Meistens kann man direkt einen Zugang zu "den eigenen Werten" bekommen.> Schreibe doch die Firma an, die die Auswertung macht.
Zum Beispiel zur Integration in eine Visualisierung/Hausautomatisierung.
Der dargestellte WMZ kann die Werte der letzten x Monate per Display
anzeigen - zeitlich feiner aufgelöste Werte wird die auswertende Firma
wohl auch nicht anbieten. In meinem Fall erfolgt die Ablesung privat,
per Display. Eine Einbindung per Bussystem des Herstellers ist sehr
kostenintensiv, teilweise für Privatpersonen auch nicht möglich.
Die Wärmezähler mit MBus-Ausgang sind um einiges teurer. Für die
größeren Wärmezähler gibt es Einsteckplatinen, aber die sind auch teuer
und braucht man nur bei größeren Anlagen.
Ich hab durch Zufall und langes rumprobieren jetzt eine Antwort auf die
Zeichenfolge
10 5B FE 59 16 bekommen:
684D4D68 08007217 42521192 2617040B 1400000C 78174252 11040618 A700000C
14614728 003B2D99 99993B3B 9999990A 5A14020A 5E16020B 61250000 046D2600
7C290227 330B09FD 0E0609FD
Das lässt mich hoffen, daß es also irgendwie zu gehen scheint, nur das
genaue Timing ist warscheinlich wichtig. Auf meinem gebraucht gekauftem
Zähler zum Testen steht:
(Baujahr 2011)
opt. Schnittstelle: M-Bus/EN60870-5 2. 2
Auf den anderen vier wo ich das dann einbauen will steht:
(Baujahr 2017)
opt. Schnittstelle: M-Bus/EN60870-5 4.2
und
(Baujahr 2016)
opt. Schnittstelle: M-Bus/EN60870-5 6.2
Alexander S. schrieb:> Ich weiß nicht, ob es gewünscht ist, aber ich habe für meine Versuche> folgenden Code zusammengebastelt, vielleicht hilft es ja.
Da ist ein Fehler drin:
warning: comparison of constant 229 with expression of type 'char' is
always false
[-Wtautological-constant-out-of-range-compare]
} else if (buf[0] == 0xE5) {
buf[] muss ein unsigned sein, damit das geht.
geronet schrieb:> Das lässt mich hoffen, daß es also irgendwie zu gehen scheint, nur das> genaue Timing ist warscheinlich wichtig. Auf meinem gebraucht gekauftem> Zähler zum Testen steht:> (Baujahr 2011)> opt. Schnittstelle: M-Bus/EN60870-5 2. 2> Auf den anderen vier wo ich das dann einbauen will steht:> (Baujahr 2017)> opt. Schnittstelle: M-Bus/EN60870-5 4.2> und> (Baujahr 2016)> opt. Schnittstelle: M-Bus/EN60870-5 6.2
Sind das alles kaloUltramax MK Zähler? Ich habe hier einen Integral-V
UltraLite Pro und konnte ihn mit der von dir geschilderten Abfolge nicht
zu einer Antwort bewegen. Ich habe mir die Norm mal angeschaut, konnte
aber keine Zuordnung der 2.2, 4.2 oder 6.2 Nummerierung erkennen.
Vielleicht kannst du hier deinen Code veröffentlichen, damit es andere
auch probieren können.
Ansonsten scheinst du ja die richtige Antwort zu bekommen, 684D4D68
sieht doch sehr gut aus.
> warning: comparison of constant 229 with expression of type 'char' is> always false
Uhh, manchmal sollte man -Wextra anmachen.
Im Moment ist es noch gar kein Code, sondern nur 0x55 und die
entsprechende Zeichenfolge im Terminal (CoolTerm).
Es klappt aber recht selten daß eine Antwort kommt, aber immerhin.
Der Zähler ist gebraucht, ist ein Integral MK-UltraMaXX. Die neueren
(sind Integral-V UltraLite) kann ich nicht testen, die sind ca. 5 km
weg.
@Alexander S.: Hast du mal geprüft, was du wirklich sendest?
Zum Beispiel Spiegel hinhalten und schauen was zurückkommt. Ich hab dein
Programm übernommen und abgeändert: Thread eingebaut zum Empfangen. Im
Moment kommt aber nicht das zurück, was ich senden will.
Warum probierst du es eigentlich nicht mit 0x55 als Initialisierung?
Noch was: Im Datenblatt steht:
2.2 ZVEI
Die optische ZVEI Schnittstelle arbeitet mit folgenden Parametern:
• Physical Layer: ZVEI mit MUX LED; reduzierten optische Kenndaten
• Kontaktaufnahme: nach EN601107
*• Scan-Frequenz 0,5Hz*
• 2400 Baud
• 8 Datenbits
• even Parity
• 1 Stopbit
• Link-Layer: M-Bus EN1434-3
• Application Layer: M-Bus EN1434-3
Hast du Zugriff auf die EN601107?
Die Scan-Frequenz ist wohl ein Hinweis darauf, daß der WMZ nur alle 2
Sekunden nach der Schnittstelle schaut, deshalb soll man mind. 2.2
Sekunden 0x55 senden.
Ich habe mir das Ganze mit dem LA (Abgriff Sendediode) angeschaut und
dort passt alles.
Warum ich genau 0x00 sende weiß ich nicht mehr - habe das aber auch mal
probeweise in 0x55 abgeändert. Ich habe mir damals die Standards (also
z.B. DIN-EN 62056-21 in Version 2003-01, Anhang B) angeschaut und dort
ist das Protokoll so beschrieben.
geronet schrieb:> 2.2 ZVEI> Die optische ZVEI Schnittstelle arbeitet mit folgenden Parametern:> • Physical Layer: ZVEI mit MUX LED; reduzierten optische Kenndaten> • Kontaktaufnahme: nach EN601107
Ich denke das ist ein Schreibfehler. Ich kann keine Norm unter diesem
Namen finden. EN60107 ist "Meßverfahren für Empfänger von
Fernseh-Rundfunksendungen" und EN60110 hat kein Kapitel 7 bzw. ist über
"Leistungskondensatoren für induktive Erwärmungsanlagen. Beuth kennt
diese Norm auch nicht.
"
> *• Scan-Frequenz 0,5Hz*> • 2400 Baud> • 8 Datenbits> • even Parity> • 1 Stopbit> • Link-Layer: M-Bus EN1434-3> • Application Layer: M-Bus EN1434-3>
Dieser Ablauf entspricht IMHO dem von EN 13757-2. Nur das diese Norm
eigentlich die kabelgebundene Schnittstelle beschreibt und somit nicht
auf eine Aufwachsequenz eingeht.
In der EN 1434-3 im Anhang B findet man ein Ablaufbeispiel zur EN
13757-2 mit Aufwachsequenz:
2,2 +-0,1s 0x55 senden oder auch > 330 Bitzeiten wobei danach zwischen
33 und 330 Bitzeiten gewartet werden muss (bis zu nächsten
Kommunikation)
geronet schrieb:> Man könnte sich auch einfach so ein Teil besorgen:> https://www.allmess.de/fileadmin/multimedia/alle_Dateien/DB/DB_P0409_EquaScan%20hMIU%20RF_TS0817.pdf> und dort die Sendediode untersuchen bzw. was "dazwischenschalten".. Hab> ich irgendwo für 60 € gesehn.> Oder bei Itron direkt anfragen?
Ich habe mal Allmess angefragt und dort hat man mir eine Software zum
Auslesen der Zähler gegeben. Wenn du mir per PM deine E-Mail zukommen
lässt schicke ich dir den Link. Damit hat es aber auch nicht
funktioniert, so langsam zweifle ich an meinen Dioden (die aber mit den
Schnittstellen in Stromzählern gehen...).
Andere Frage: Könnte das auch eine IrDA Schnittstelle sein? Woran
erkennt man das?
Ich kenne die IrDA Schnittstellen immer nur mit 9600Baud.
Alexander S. schrieb:> malloc(255);geronet schrieb:> Da ist ein Fehler drin [...]
Da ist ein klassisches Speicherleck drin! Malloc() ohne Free(), jedesmal
wenn read_data bemüht wird.
mfg mf
Johannes R. schrieb:> Hallo zusammen,
Hallo,
>> ...und weiter bin ich nicht.> wenn ich die entsprechenden parameter auf dem Raspberry Pi in minicom> eingebe (2400 8E1) und den oberen Code eingebe passiert nichts.
Welchen Code gibst du ein? Den Mitschnitt den du gepostet hast?
> Kann mir jemand weiterhelfen?
Das ist eine Anfrage:
5555 5555 5555 .Q.......UUUUUUU
0000260: 5555 5555 5555 5555 5555 5555 5555 5555 UUUUUUUUUUUUUUUU
0000270: 5555 5555 5555 5555 5555 5555 5555 5555 UUUUUUUUUUUUUUUU
0000280: 5555 5555 5555 5555 5555 5555 5555 5555 UUUUUUUUUUUUUUUU
0000290: 5555 5555 5555 5555 5555 5555 5555 5555 UUUUUUUUUUUUUUUU
00002a0: 5555 5555 5555 5555 5555 5555 5555 5555 UUUUUUUUUUUUUUUU
00002b0: 5555 5555 5555 5555 5555 5555 5555 5555 UUUUUUUUUUUUUUUU
00002c0: 5555 5555 5555 5555 5555 5555 5555 5555 UUUUUUUUUUUUUUUU
00002d0: 5555 5555 5555 5555 5555 5555 5555 5555 UUUUUUUUUUUUUUUU
00002e0: 5555 5555 5555 5555 5555 5555 5555 5555 UUUUUUUUUUUUUUUU
00002f0: 5568 0808 6853 fe51 0f00 0000 06b7 16
Beginnt mit der Aufwachsequenz 0x55 und dann folgt eine MBus Abfrage
(Long Frame). Meistens wird die Aufwachsequenz mit 2400 8N1 gesendet,
wichtig ist eine wechselnde 1/0 Folge mit einer Dauer von 2,1-2,2
Sekunden.
Was bei der einfachen Wiedergabe der Aufzeichnung vermutlich verloren
geht ist das Timing. Bei dem von mir genutzten Zähler ist z.B. nach der
Aufwachsequenz eine Pause von 100ms und nach der ersten Anfrage muss der
Zähler zwischen 11 und (330 + 50ms) Bitzeiten warten (ich glaube
EN1434-3) bis er antwortet.
=> Mache eine erneute Aufnahme wo das Timing berücksichtigt wird
(Achtung, oft sind Buffer, wie bei deinem silabs 576 Byte, im
Übertragungsweg die jenes verfälschen) - oder probiere es mal mit den
genannten Zeiten
Hallo Alexander,
vielen Dank für deine Antwort!
Ich hab die "Aufzeichnung" mit dem Programm minicom gemacht... leider
weiß ich nicht, ob man dabei das Timing aufzeichnen kann.
Kennst du ein Programm, mit dem das geht?
Leider übersteigt die Thematik etwas meine Fähigkeiten.
Ist die Nachricht, die ich oben gepostet habe in HEX ??
Wie kann man das von dir beschriebene timting programmieren?
Danke für jeden Hinweis!
Bei CuteCom wird ein Zeitstempel angezeigt, es gibt aber auch die
Einschränkung mit den Buffern.
Ich nutze dafür einen Logikanalyser.
Die Nachricht die du geposted hast ist folgendermaßen aufgebaut:
Offset von Beginn, Datenzeile in Hex, Datenzeile in ASCII.
Ich kann dir keine Antwort auf die Frage wie du das Programmieren kannst
geben. Dazu wäre erst einmal Interessant welche Programmiersprachen du
kannst.
Du kannst dir ja mal das C Beispiel weiter oben anschauen. Dort wird
probiert mit verschiedenen Protokollen den Zähler anzusprechen.
(Achtung!: Das Beispiel ist nicht für den produktiven Einsatz gedacht,
siehe z.B. memory leak)
Ich glaube du wirfst hier ein paar Zahlendarstellungen durcheinander.
Minicom erwartet normalerweise ASCII Zeichen, das 55 ist aber wie schon
genannte die HEX Spalte. Das 0x ist eine gängige Kennzeichnung das es
sich um Hex handelt und nicht um z.B. Zahlen oder ASCII. Somit
entspricht 0x55 dem ASCII Wert 'U' und dem Dezimalwert 85. Wenn du in
Minicom nun eine 5 eingibst wird das nach ASCII Tabelle in 0x35
gewandelt und dann als ein Byte übertragen. Somit findet hier schon eine
komplett andere Übertragung statt.
Ich kann dir nur raten dich erst einmal mit den verschiedenen
Zeichendarstellungen zu beschäftigen.
Ich kann mir nicht vorstellen das es möglich ist das Timing in Minicom
zu erreichen. Wenn du Erfahrung in Python hast probiere doch mal darüber
die erfassten Daten erneut über die serielle Schnittstelle auszusenden
und lasse eine kurze Pause (ca.100ms) zwischen der Aufwachsequenz und
der ersten Anfrage. Dann sollten du im Anschluss zumindest eine
Bestätigung vom WMZ empfangen.
>Bei CuteCom wird ein Zeitstempel angezeigt, es gibt aber auch die >Einschränkung
mit den Buffern.
Danke für den Tipp!
ich lade mir Linux Mint, damit ich CuteCom ausprobieren kann.
>Ich nutze dafür einen Logikanalyser
Das habe ich leider nicht.
Habe ich ohne einen Logikanalyser überhaupt eine Chance?
>Ich kann dir keine Antwort auf die Frage wie du das Programmieren kannst>geben. Dazu wäre erst einmal Interessant welche Programmiersprachen du>kannst.
Ich kann etwas python. Bisher habe ich kleine Programme zum Mitloggen
von Temperaturdaten geschrieben.
Diese Maschinenkommunikation sind für mich aber böhmische Dörfer...
Jetzt habe ich die "Zenner Anfrage" nochmal mit CuteCom mitgeloggt.
Das Ergebnis in ASCII:
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUh\0x08\0x08hS\0xfeQ\0x0f\0x00\0x00\0x00\0x06\0xb7\0x16UUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUh\
0x08\0x08hS\0xfeQ\0x0f\0x00\0x00\0x00\0x06\0xb7\0x16UUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUh\0x08\0x08h
S\0xfeQ\0x0f\0x00\0x00\0x00\0x06\0xb7\0x16
über das timing weiß ich leider auch nicht mehr.
Ist es richtig, wenn ich jetzt die UUUUUUUUUU... Folge in cutecom zeile
einfüge und mit enter abschicke??? Oder muss ich das auf jeden Fall mit
einem Programm machen?
Hallo,
da ich mich auch mit dem Thema beschäftige, wollte ich hier mal meine
Erfahrungen berichten.
Ich versuche einen Engelmann SensoStar2 Wärmemengenzähler zu lesen. Dazu
benutze ich den Optokopf aus dem Volkszähler Projekt. Nach vielen
Versuchen habe ich einsehen müssen, dass sich dieser Zähler nicht mit
einer optischen Sequenz aufwecken ließ. Nach vielen erfolglosen
Versuchen habe ich die SW LorusFree (Link in einem der vorherige Posts)
genutzt und die Sequenz mit einem Logikanalyser mitgelesen. Die SW hat
auch die Funktion des optischen Aufwachens, das funktioniert mit diesem
Typ Zähler aber nicht.
Man muss die Taste am Zähler drücken und dann den Auslesevorgang
starten. Das Ergebnis häng ich als Screenshot an.
Nach dem Logikanalyser läuft folgende MBus Sequenz
Lorus sendet: 10 40 fe 3e 16 (das ist ein Broadcast=Adresse FE)
Zähler antwortet nach ca. 50ms mit 5E (das ist ein ACK)
nach 50ms Lorus sendet: 10 7b fe 79 16 (das ist ein Request for Class2
Data)
Zähler antwortet nach 50ms (hier mitgelesen mit CuteCom):
00000000 68 93 93 68 08 00 72 75 40 48 10 c5 14 00 04 .h..h␈
00000016 24 27 00 00 04 78 6b f9 9f 00 04 6d 11 0e 63 2b $'
00000032 04 15 e0 20 00 00 44 15 e0 20 00 00 84 01 15 e0 ␄␕.
00000048 20 00 00 04 06 a0 21 00 00 44 06 a0 21 00 00 84
00000064 01 06 a0 21 00 00 84 10 06 00 00 00 00 c4 10 06 ␁␆.!
00000080 00 00 00 00 84 11 06 00 00 00 00 42 6c 5f 2c 02
00000096 6c 7f 2c 04 3b 00 00 00 00 14 3b 08 01 00 00 04 l.,␄;
00000112 2b 00 00 00 00 14 2b 39 24 00 00 02 5b 17 00 02 +
00000128 5f 17 00 04 61 24 00 00 00 02 23 81 0c 01 fd 17 _␗
00000144 00 04 90 28 0b 00 00 00 40 16
Die gesamte Übertragung läuft mit 2400 8E1
Nachdem ich das soweit im Griff hatte, habe ich es dann mit libmbus
versucht und nach einigen Versuchen auch den korrekten Aufruf gefunden,
hier mit Adresse 0, da auf einen Scan hier eine Antwort kam:
mbus-serial-scan -d -b 2400 /dev/ttyUSB0
Scanning primary addresses:
0 [2019-11-03 14:50:29] SEND (005): 10 40 00 40 16
[2019-11-03 14:50:29] RECV (001): E5
Found a M-Bus device at address 0
Die gesamte Ausgabe auf den Request häng ich als txt File an
Mein Plan ist, die Antwort soweit zu kürzen, dass ich den Zählerstand
per LoRaWAN über TTN senden kann. Jetzt werd ich mich wohl mit dem
Payloadformat auseinandersetzen müssen.
Reinhard N. schrieb:
Das Funkmodul FAW (https://www.engelmann.de/de/funkaufsatzmodul-faw/)
ist somit nicht mit deinem Zähler kompatibel? Zumindest scheint es
diesem ja möglich zu sein unabhängig vom Knopfdruck auszulesen.
> Nachdem ich das soweit im Griff hatte, habe ich es dann mit libmbus> versucht und nach einigen Versuchen auch den korrekten Aufruf gefunden,> hier mit Adresse 0, da auf einen Scan hier eine Antwort kam:
Ich hatte mal wo gelesen, das viele WMZ mit Adresse 0 ausgeliefert
werden.
> Mein Plan ist, die Antwort soweit zu kürzen, dass ich den Zählerstand> per LoRaWAN über TTN senden kann. Jetzt werd ich mich wohl mit dem> Payloadformat auseinandersetzen müssen.
Ich prüfe das XML gegen ein XSD File und versende die Daten dann per
MQTT an eine Hausautomatisierung.
Alexander S. schrieb:> Das Funkmodul FAW (https://www.engelmann.de/de/funkaufsatzmodul-faw/)> ist somit nicht mit deinem Zähler kompatibel? Zumindest scheint es> diesem ja möglich zu sein unabhängig vom Knopfdruck auszulesen.
Das nicht, es gäbe aber ein anderes passendes Modul. Bin mir nur nicht
sicher, ob das nachrüstbar ist. Da der Zähler aber beim Vermieter hängt
und der den wenn überhaupt dann vom Fachmann einbauen lassen will, wird
das teuer.
Alexander S. schrieb:> Ich prüfe das XML gegen ein XSD File und versende die Daten dann per> MQTT an eine Hausautomatisierung.
würde ich auch so machen, aber ich habe am Zähler kein WLAN, dehalb
LoRaWAN. Gateway ist vorhanden. Aber erst muss ich das Thema mit dem
Drücken des Tasters lösen. Vielleicht mit einem Servo.
Klaus R. schrieb:> Woher hast Du denn die Schale für den Servo und das Meßgerät? 3-D
Den Zähler hab ich gebraucht von eBay. Die Halterung des Servos kommt
aus dem 3D-Drucker. Bei Interesse kann ich die STL zur Verfügung
stellen. Ich konnte leider noch nicht testen, ob das auch bei dem Zähler
passt, den ich eigentlich messen will.
Hier zusätzlich als Info: ich habe diese SW gefunden, davon werde ich
einiges übernehmen können.
https://github.com/btm/emonMbus
Ich hab mir optische Module zusammengebaut und erfolgreich getestet, die
per RS-485 Bus mit 2 8P8C (RJ45) Steckern und normalen Netzwerkkabeln
vernetzt werden können und auch die Stromversorgung darüber erhalten.
Die Module haben selbst keine Intelligenz sondern setzen den RS485 Bus
direkt in Infrarotsignale zum WMZ um bzw. senden auf den Bus wenn sie
etwas vom WMZ empfangen. Das funktioniert auch ohne Kollisionen wenn man
die Zähler per primärer (vorher per Einzelanschluss zu vergeben) oder
sekundärer Adressierung anspricht. Der MAX13487 macht das per
AutoDirection möglich. Im Prinzip ist das wie ein drahtgebundener MBus,
nur mit RS485 und vor der Zählerkommunikation muss man den/die Zähler
mit 2400 Baud 8N1 2.2 Sekunden lang mit 0x55 aufwecken.
Die Gehäuse sitzen fest auf dem Wärmezähler nur mit den zwei Noppen, die
genau in die Bohrungen im Gehäuse greifen.
Im Moment sind 4 Module und ein Zusatzmodul am Bus, das mir die
TTL-UART-Signale mit einem MAX232 umwandelt und ein RS232-USB Stecker
den Bus vom Rechner aus zugänglich macht. Ich baue mir aber noch ein
Master-Gerät im Hutschienenformat das dann direkt die Daten täglich oder
monatlich einsammelt und noch ein paar andere Funktionen hat (Gaszähler-
und Wasserzählerimpulse, Stromzähler etc.)
Jetzt hab ich die 4 Module installiert und per Bus verbunden.
Funktioniert einwandfrei ;)
Muss noch das Ausleseprogramm ein bisschen erweitern damit das
Mbus-Protokoll richtig interpretiert wird.
Beispiel für Ausgabe:
Hallo zusammen,
habe heute mal meinen Itron WMZ UltraMax aufgeschraubt und an der
rechten Seite gibt es ein Steckmodul hinter der runden Plastikabdeckung
mit 4 Leitern / Polen.
Hat jemand eine Ahnung, ob das auch die M-Bus-Schnittstelle ist, welches
werkseitig dann in der M-Bus-Variante mit dem 1,2m langem Kabel
ausgeliefert wird?
Und welcher Pol / Anschluss wie zu verdrahten ist?
Dann würde man sich den Umweg über die optische Schnittstelle sparen.
Gruß
Hallo,
ich hab den folgenden Wärmezähler:
allmess Integral-MK UltraMaXX
Wenn die optische Schnittstelle funktioniert wäre es mir ja egal ob
darüber oder per Kabel.
@ LoxWinner:
Kann man das Teil ungeschadet öffnen und wieder zusammenbekommen, oder
ist eine Öffnung nachher nachvollziehbar? Könntest du vlt. mal ein Foto
im geöffneten Zustand hochladen?
Leider hab ich es bisher nicht geschafft dem Gerät eine Antwort zu
entlocken.
Setup
- Infrarotdiode(unbekannt) und -transistor(SFH309FA-4) bisher auf
Lochrasterplatine (Dioden je an einem Transistor) (Daten werden durch
Spiegel korrekt ins Terminal zurückgegeben)
- Anordnung wo Sende-Diode und Empfangs-Transistor auf dem Integral-MK
hin müssen hab ich mal aus Stefan seinen Bildern entnommen:
links (näher am roten Taster) ist laut deiner Platine die D1, also der
Sender vom Interface)
rechts ist T1, also die Empfängertransistor
Oder?
Das sieht so schon echt top aus in dem Gehäuse mit LAN-Kabel!
Probiert hab ich
- per hterm (Win) oder moserial (Ubuntu) Kommunikation herzustellen
(wie hier mal angegeben 2.400 baud, 8N1)
- jmbus v 3.2.1 auf Ubuntu 18.04.3
- LorusFree Version 2018 auf dem Win10 Laptop
(- Tasmota mit SML Bibliothek gebaut und auf Wemos D1 Mini
https://tasmota.github.io/docs/#/peripherals/Smart-Meter-Interface
da ist aber das „Smart Meter Interface Descriptor“ Script noch nicht so
ganz fertig.
Zumal ich mir auch nicht ganz sicher bin, ob ich das Counterflag mit
oder ohne Pullup eingestellt sein muss.
1
>D
2
3
>B
4
=>sensor53 r
5
6
>M 1
7
+1,3,m,1,2400,MODBUS,1,1
8
1,xxxx0503xxxxxxxxxxxxxxuu@1,Heizung,kWh,Warmwater,3 #---> to do ...
9
#
)
- Hab mir jetzt ein Python Script geschrieben um genau die 2.2+-0.1 s
lang 0x55 zu schicken. Laut Oszi passt das jetzt auch perfekt.
Werde mich wohl als nächstes doch mal mit dem M-BUS Telegrammen
auseinandersetzten und diese in mein Script implementieren.
https://m-bus.de/telegramme.html bzw. das zur Unterstützung nehmen:
https://github.com/openenergymonitor/HeatpumpMonitor/blob/master/Firmware/Arduino/MBUS_Reader/mbus.ino
@ Stefan B. (stefan_b278)
Ich wäre wirklich froh, wenn Stefan uns seinen Code für die
Kommunikation mit dem allmess Gerät zur Verfügung stellen würde, dann
kann ich vlt. zumindest mal wissen ob es generell mit meinem Zähler und
dem provisorischen Interface funktioniert.
Komm mir langsam zu blöd vor!
Vielen Dank im Voraus!
Gruß,
Jan
LoxWinner schrieb:> Hallo zusammen,>> habe heute mal meinen Itron WMZ UltraMax aufgeschraubt und an der> rechten Seite gibt es ein Steckmodul hinter der runden Plastikabdeckung> mit 4 Leitern / Polen.> Hat jemand eine Ahnung, ob das auch die M-Bus-Schnittstelle ist, welches> werkseitig dann in der M-Bus-Variante mit dem 1,2m langem Kabel> ausgeliefert wird?> Und welcher Pol / Anschluss wie zu verdrahten ist?> Dann würde man sich den Umweg über die optische Schnittstelle sparen.> Gruß
Du meinst sicher den Stecker auf dem Foto links. Mit MBus hat das nichts
zu tun, ich denke das wird der Programmierstecker sein um z.B. die
Software draufzuladen und Kalibrierinformationen für die 2 Fühler zu
übertragen.
Der Mbus-Chip wird wohl unten rechts aufgelötet, der Kabelanschluß ist
jedenfalls schon vorhanden.
Jan S. schrieb:> Kann man das Teil ungeschadet öffnen und wieder zusammenbekommen, oder> ist eine Öffnung nachher nachvollziehbar? Könntest du vlt. mal ein Foto> im geöffneten Zustand hochladen?
Hinten sind nur zwei Schrauben durch rote Kappen (Plomben) verdeckt,
eine Öffnung sieht man nur wenn man die Plomben rauspult.
Links muss deine Diode senden, rechts sitzt der Phototransistor.
Sieht man auch gut auf dem Bild, rechts ist die weiße Infrarotled vom
WMZ.
Jan S. schrieb:> Ich wäre wirklich froh, wenn Stefan uns seinen Code für die> Kommunikation mit dem allmess Gerät zur Verfügung stellen würde, dann> kann ich vlt. zumindest mal wissen ob es generell mit meinem Zähler und> dem provisorischen Interface funktioniert.> Komm mir langsam zu blöd vor!
Kam ich mir auch vor, von 4 WMZ konnte ich einen nie auslesen, alle
anderen funktionierten. Dann hab ich die 4 Module gebaut, und mit einem
Modul funktionierte auch dieser. Den Grund hab ich bis jetzt noch nicht
herausfinden können, es liegt aber nicht an der Positionierung der Leds.
Vielleicht eine leicht andere Wellenlänge?
Meine Software hab ich mal drangehängt.
Ist ein C-Programm und kompiliert mit OSX und Linux.
Bei 1) muss ein E5 zurückkommen.
Bei 3) die kompletten Informationen vom WMZ.
Es funktioniert :-)
Vielen Dank dir!!
Da warst du ja mal richtig fleißig was die SW angeht!
Hab deine SW in Code::Blocks "gebuildet" und es lief direkt auf Ubuntu.
Ich musste nur das vorzeitige Ende (return 0;) in der Zeile 579
auskommentieren, damit ich bis zur While-Schleife mit den
Abfragemöglichkeiten kam.
Hat dann auch direkt mit der ersten Aufwachsequenz funktioniert und mit
3) kamen alle Daten:
1
-------------------------------------------------
2
primary_address: 0x00
3
customer_number: 18797981
4
manufacturer: ITR
5
generation: 23
6
medium: 4 = Wärme
7
reading_counter: 14
8
error_code: 0
9
signature: 0
10
fabrication_number: 18797981
11
energy: 1985 kWh
12
volume: 194180 l
13
power: 7200 W
14
flow: 416 l/h
15
supply_temp: 51.7 °C
16
return_temp: 36.9 °C
17
temp_difference: 14.78 K
18
date: 12.01.2020
19
time: 08:56:00
20
operating_time: 436
21
firmware_version: 7
22
software_version: 17
23
alarm_code: 0
24
-------------------------------------------------
Ich bin begeistert!
Ich hatte erwartet, dass das Display durch die Aufwachsequenz angeht,
aber das bleibt aus.
Meine HW war also definitiv okay, es lag an der SW.
Verblüffend ist, dass trotz aufwecken mit deiner SW direkt danach
dennoch mit den anderen Programmen immer noch keine Kommunikation
möglich ist.
Weder mit jmbus, libmbus oder Lorus erhalte ich irgend eine Antwort.
Dass die Programme irgendetwas senden sehe ich an der TX-LED meines
IR-Interfaces, aber es kommt laut Terminal und RX-LED einfach überhaupt
keine Reaktion vom Wärmemengenzähler.
Was auch immer du da gezaubert hast funktioniert auf jeden Fall mit
meinem Zähler. :-)
Jan S. schrieb:> Ich musste nur das vorzeitige Ende (return 0;) in der Zeile 579> auskommentieren, damit ich bis zur While-Schleife mit den> Abfragemöglichkeiten kam.
Ja stimmt ich hatte da noch einen Testlauf drin, am besten alle Zeilen
von 575-579 löschen.
Jan S. schrieb:> Verblüffend ist, dass trotz aufwecken mit deiner SW direkt danach> dennoch mit den anderen Programmen immer noch keine Kommunikation> möglich ist.
Der Zähler bleibt meines Wissens nach nur ca. 3 Sek. aufgeweckt. Da wird
dir die Zeit nicht reichen zum umschalten.
Die Software ist in Zusammenarbeit mit Alexander S. entstanden. Habe
aber teilweise bei libmbus abgeschaut für die Auswertung.
Hat jemand Erfahrung mit den Wärmemengenzählern von Ista. Bei mir ist
ein sensonic II verbaut. Die haben auch alle eine optische
Schnittstelle.
https://www.ista.com/de/technik/waerme-und-kaeltezaehler/
Verwenden die das gleiche Protokoll?
Ich hatte mal wieder Zeit und habe mir einen gebrauchten Zähler besorgt.
Leider habe ich es bis jetzt nicht geschafft dem Zähler auch nur
ansatzweise eine Antwort zu entlocken. Ich habe das Tool vom Stefan
verwendet und am Timing noch etwas modifiziert, da es bei mir noch nicht
ganz gepasst hatte.
Ich habe alles mit einem Logic-Analyzer mitgeschnitten. Neben der TXD
und der RXD Leitung habe ich auch die Batteriespannung mitgeschnitten.
Man kann daran erkennen, wenn der Controller im Zähler aufwacht. Den
Messzyklus alle 60s kann man schön erkennen.
Unterschiedliche längen der Aufwachsequenz, andere M-Bus Adressen und
Timing-Varianten habe ich schon durchprobiert. Der Zähler bleibt einfach
stumm.
Im Internet sind die Zulassungsdokumente zugänglich:
http://legnet.metas.ch/legnet2/Eichstellen/Eichstellen_Waerme/Zulassungen/thermische_energie/t2_waermezaehler_und_komponenten_nach_en_1434/741-750/T2-750/Pub-CH-T2-13750-00.PDF
Darin wird unter 2.3.1 geschrieben, dass die optische Schnittstelle auf
der Norm EN 1434 basiert. Ich denke es sollte doch möglich sein, mit dem
Zähler zu kommunizieren. Anscheinend gibt es auch Schnittstellen dafür:
https://www.youtube.com/watch?v=rXap-SOFJmQ
Hat noch jemand eine Idee, wie man die optische Schnittstelle aktiviert
bekommt? Hat jemand so einen Adapter zur Hand und könnte mal messen, was
da gesendet wird?
Warum sind die Daten auf der TXD UND RXD Leitung sichtbar?
Eventuell kann auch die Positionierung der Leds wichtig sein. Hat der
Deckel eine optische Linse eingebaut?
Ich hatte mir zum Testen eine Halterung gebaut, wo die Sendeled und
Empfangsdiode direkt über denen vom WMZ liegt, um den Faktor
auszuschließen.
Der Tipp mit den 300 Baud war gut. Ich habe die Init-Sequenz mit 300
Baud gesendet und parallel die Batteriespannung aufgezeichnet. Im Bild
kann man schön erkennen wie der Controller aus dem Schlaf aufwacht. Bei
einigen Versuchen brauchte der Controller max. ca. 400ms um aufzuwachen.
Allerdings ließ hat der Controller nicht mit 300Baud auslesen. Anhand
der Spannungseinbrüche hat man aber schön gesehen, dass der Controller
alle 4.4ms etwas macht. Das ist genau eine Byte bei 2400Baud.
Die Aufwachsequenz muss also mit 300Baud für 0.5s gesendet werden.
Danach kann praktisch ohne Verzögerung auf 2400Baud umgeschaltet werden
und man kann die Daten senden. Im Bild sieht man wie die Antwort
gesendet wird: 0xE5
Meine Fotodiode ist für die LED allerdings sehr unempfindlich. Ich nehme
an, dass die Wellenlänge nicht passt. Das Digitalisieren geht so noch
nicht. Ich muss man noch andere Fotodioden probieren.
> Warum sind die Daten auf der TXD UND RXD Leitung sichtbar?
Das liegt an den Reflexionen. Das ist praktisch nur das Echo. Die
Reflexionen sind praktisch stärker als das Nutzsignal. Ich werde jetzt
schauen, dass ich den Adapter optimieren kann.
Alexander S. schrieb:> Ich habe mal Allmess angefragt und dort hat man mir eine Software zum> Auslesen der Zähler gegeben. Wenn du mir per PM deine E-Mail zukommen> lässt schicke ich dir den Link. Damit hat es aber auch nicht> funktioniert, so langsam zweifle ich an meinen Dioden (die aber mit den> Schnittstellen in Stromzählern gehen...).
Hat zufällig jemand diese Software und könnte sie mir zur Verfügung
stellen?
Die ALlmess-Seite ist wohl komplett nicht erreichbar?
Spiele auch gerade aus Langeweile mit WMZ herum - meine eigenen sind
über M-Bus, das funktioniert
Würde es jetzt gerne über Opto-M-Bus hinbekommen, bislang spricht nur
ein Sensus Pollucom mit der Original-Software mit mir
Lorusfree geht bei diesem von 10 Versuchen 1 x
Kocht da echt jeder Hersteller seine eigene Suppe?
Viele Grüße
Heinz
Ich habe in der Zwischenzeit den Opto-Adapter mechanisch fixiert und die
LED mit etwas Schrumpfschlauch optisch abgeschirmt. Damit funktioniert
die Kommunikation sehr gut. Ich nutze ein normales FTDI-Kabel (3.3V) für
die Verbindung zum Rechner. Meine Schaltung habe ich angehängt. Die ist
sehr einfach und schnell auf einer Lochrasterplatine aufgebaut.
Auf der Softwareseite habe ich mich an der libmbus probiert:
https://github.com/rscada/libmbus
Das ganze dekodieren übernimmt die Bibliothek. Das macht die Software
schön einfach. Ich habe ein kleines Beispiel zusammengestellt um mit der
libmbus die Ista-Zähler auszulesen. Dafür muss die libmbus vorher
installiert sein.
1
git clone https://github.com/rscada/libmbus.git
2
cd libmbus
3
./build.sh
4
sudo make install
Dann einfach
1
unzip ista.zip
2
make
3
./ista
Der Beispielcode gibt die Messdaten in XML-Form wieder aus. Das ganze
sollte auch mit anderen Zählern funktionieren, wenn man die
Wakeup-Funktion entsprechend anpasst.
Heinz R. schrieb:> Kocht da echt jeder Hersteller seine eigene Suppe?
Ich würde sagen jain. Ich habe zwar nur den einen Zähler von Ista hier
aber den Berichten zufolge würde ich denken, das Problem sind die
unterschiedlichen Aufwach-Sequenzen. Beim Ista-MWZ sind es 0x55 mit
300Baud 8N1 für 0.5s. Wenn man auch nur ein bisschen davon abweicht geht
es nicht mehr. Ich hatte mal mit 300Baud 8E1 getestet, was im Signal nur
einen minimalen unterschied ausmacht. Aber es hat schon nicht mehr 100%
funktioniert.
Bei den Allmess-MWZ muss wieder eine andere Aufwach-Sequenz verwendet
werden. Das eigentlichen MBus-Protokoll ist dann standardisiert und
sollte für jeden Zähler gleich sein.
Hallo Sven,
welcher Transistortyp ist Q1?
Ich habe zwar einen IR-Lesekopf hier, aber würde mal Deine Schaltung
zusammen mit LEDs aus einem alten WMZ ausprobieren - vielleicht passt ja
auch die Wellenlänge nicht
Du schreibst, Du hast die LED optisch abgeschirmt? bei mir ist es bei
allen WMZ so, das ich grundsätzlich das gesendete auch wieder empfange,
wird wohl im Zählerinneren reflektiert
Ist das bei Dir auch so?
Heinz R. schrieb:> Hallo Sven,>> welcher Transistortyp ist Q1?
Da sollte nahezu jeder beliebige NPN-Transistor funktionieren. Ich habe
aus meiner Fundkisten einen BC237 genommen. Auch für den 2N7000 sollte
eigentlich fast jeder NChannel-FET als Ersatz funktionieren. Diese hatte
ich nur gerade da.
>> Ich habe zwar einen IR-Lesekopf hier, aber würde mal Deine Schaltung> zusammen mit LEDs aus einem alten WMZ ausprobieren - vielleicht passt ja> auch die Wellenlänge nicht>> Du schreibst, Du hast die LED optisch abgeschirmt? bei mir ist es bei> allen WMZ so, das ich grundsätzlich das gesendete auch wieder empfange,> wird wohl im Zählerinneren reflektiert> Ist das bei Dir auch so?
Nein. Die Reflexionen solltest du irgendwie unterdrücken. Sonst bringt
das zumindest die Software durcheinander. Ich habe die Sendediode mit
einem Stück Schrumpfschlauch "optimiert". Siehe Bilder. Damit waren das
Echo komplett verschwunden. Im Gehäuse sind dann Lichtleiter die bis
direkt zur Empfangs-/Sendediode gehen.
Hier gibt es den Schaltplan und Layout für die oben genannten
"Busmodule":
Die Stecker sind 8p8c:
https://www.tme.eu/de/details/rjjs881401ejh136/rj-steckverbinder/encitech/rjjs-88-1401-ejh-136/
Gehäuse:
https://www.tme.eu/de/details/hm-1551gtbu/universal-gehause/hammond/1551gtbu/
Das Gehäuse muss man ziemlich ausfräsen, die Stege wegzwicken und die
Löcher nach Plan durch den Boden bohren. Am besten erstmal kleiner damit
das Gehäuse recht streng auf die Nippel vom WMZ passt, dann hält es von
alleine.
Damit die Platine reinpasst und ganz am Boden aufliegt muss man auf der
Lötseite die THT Überstände abschleifen.
Das könnte man bei der nächsten Version sicher verbessern, aber ich
wollte kein größeres Gehäuse nehmen da man sonst entweder den WMZ nicht
mehr ablesen kann oder das Teil übersteht.
Ich habe hier nen Engelmann Sensostar U, bei dem funktioniert das
"mbus-test" Programm auch super. Das ista-tool geht auch, wenn ich
vorher mit mbus-test die Init-Sequenz schicke und dann schnell bin :-)
Eine Sache ist mir aufgefallen:
Die Temperaturen im Display aber auch auf der Schnittstelle werden nur
alle paar Minuten aktualisiert. Das ist schade :-( Laut Datenblatt
wertet der Sensor sie aber alle 2 Sekunden aus - und ich habe das am
Stromverbrauch auch nachvollzogen. Alle 2 Sekunden spiked er 2x kurz
hintereinander (vermutlich 1x pro Temperatursensor).
Ich habe dem Wärmemengenzähler auch den "Netzteilbetrieb" vorgegaukelt,
den erkennt er auch. Das macht allerdings keinen Unterschied :-(
Test mit der echten Mbus-Schnittstelle steht aus, allerdings erwarte ich
da keinen Unterschied.
Das heißt ja im Endeffekt, dass der WMZ für die Schnittstelle extra
"Register" haben muss, die er nicht ständig aktualisiert. Gibts da ein
Kommando, um das zu erzwingen?
Aktualisieren eure häufiger die Temperatur?
Matthias schrieb:> Das heißt ja im Endeffekt, dass der WMZ für die Schnittstelle extra> "Register" haben muss, die er nicht ständig aktualisiert. Gibts da ein> Kommando, um das zu erzwingen?
So etwas habe ich noch nicht gesehen.
>> Aktualisieren eure häufiger die Temperatur?
Wenn ich mich richtig erinnere misst mein Ista-Zähler alle 30s. Das
hatte ich damals an der Batteriespannung gesehen. Wie oft der aber die
Werte intern aktualisiert kann ich dir gar nicht sagen. Aktuell lasse
ich den Zähler einmal am Tag auslesen. (Verbrauchswerte)
Ich hatte anfangs mal 20 Minuten eingestellt. Irgendwann hat der Zähler
aber die Kommunikation gänzlich verweigert. Ich nehme die haben einen
Beschränkung implementiert, um die Batterie zu schonen.
Eine hochauflösende Temperaturmessung habe ich mit einem anderen Sensor
realisiert und nicht über den Zähler.
Matthias schrieb:> Eine Sache ist mir aufgefallen:> Die Temperaturen im Display aber auch auf der Schnittstelle werden nur> alle paar Minuten aktualisiert. Das ist schade :-( Laut Datenblatt> wertet der Sensor sie aber alle 2 Sekunden aus - und ich habe das am> Stromverbrauch auch nachvollzogen. Alle 2 Sekunden spiked er 2x kurz> hintereinander (vermutlich 1x pro Temperatursensor).
Wird Dein Wärmemengenzähler per Batterie gespeist oder und/auch
fremdgespeist?
Mein erster Wärmemengenzähler wurde per Langzeitbatterie gespeist. Damit
die Batterie auch mindestens (5 + 1) Jahr durchhält war die Häufigkeit
der Auslese begrenzt worden. So habe ich nur alle 20 Minuten einen Wert
ausgelesen. Gemessen wurde wesentlich häufiger. Das konnte man an
Display ablesen.
Ich habe 2011 dann einen Wärmemengenzähler mit Fremdeinspeisung gesucht
und den Sontex Supercal 539 gefunden. Der speist sich über den M-Bus
ein. Diese Option mußte man extra angeben. Er läuft immer noch. Bei
Auslesen des M-Bus bin ich bei 20 Minuten geblieben.
Die Temperaturen lese ich über Wärmesensoren ab. Damals was es ein
DS1631. Heute nehme ich ein MCP9808 mit Breakout.
https://www.reichelt.de/temperatursensor-msop-8-mcp-9808-ems-p137341.html
Der kostet als IC nur ein drittel des DS1631, ist besser zu kaufen und
ist noch genauer.
Es war für mich auch ein Problem meine I2C Schnittstelle an den MCP9808
anzupassen. Viel einfacher war da ein ESP32 oder D1Mini zunehmen und ein
Breakout des MCP9808 einzusetzen. Kein feinteiliges Löten und Software
gibt es genügend.
http://www.esp32learning.com/code/esp32-and-mcp9808-digital-temperature-sensor-example.php
Du installierst die kostenlose Ardurino IDE und schon geht es los.
Anleitungen gibt es zu hauf. Und die Welt der Sensoren steht Dir zur
Verfügung.
mfg Klaus
Danke für die Antworten, natürlich könnte ich die Temperaturen extern
lesen, aber wenn der WMZ das kann möchte ich das gern.
Und wie beschrieben hat meiner eine Netzteilerkennung, welche ich nutze
(Stromverbrauch dann etwa 100µA dauerhaft + 60 µA/100ms alle 2 Sekunden
- sonst, also auf Batterie, nur so 3-4µA + 60µa für knapp 100ms alle 2
s);
Auslesen über Optik (mbus-test) "kostet" 1,2 mA für 750ms
Hallo zusammen,
ich würde das Thema gern noch mal "aufwärmen" und nachfragen ob schon
wer einen CF55 von itron erfolgreich auslesen konnte. Es gibt wohl eine
Menge an aufsteckbaren Modulkarten, für die man jedoch die Plombe
entfernen müsste.
Auf der Front scheint ebenfalls eine optische Schnittstelle vorhanden zu
sein, welche ich gern mittels Volkszähler auslesen möchte. Im Idealfall
via "Smartmeter" Adapter im ioBroker. Ansonsten wäre mqtt natürlich auch
schön :)
Hat jemand schon Erfahrung mit dem Hersteller/Modell?
Danke!
Darfst du die Plombe nicht entfernen? Evtl. Fernwärme?
Die optische Schnittstelle wird wohl die gleiche sein wie bei den
kleineren. Also Adapter bauen mit Magnetring und testen..
Stefan B. schrieb:> Darfst du die Plombe nicht entfernen? Evtl. Fernwärme?
Korrekt.
> Die optische Schnittstelle wird wohl die gleiche sein wie bei den> kleineren. Also Adapter bauen mit Magnetring und testen..
Habe einen neuen Volkszähler heute bekommen. Werde mal nen iobroker
dranhängen und mal schauen was da rauskommt.
Oder gibt es einen einfacheren/besseren Weg das zu analysieren und zu
testen?
Danke!
Hi,
hast du geschafft ihn auszulesen?
Ich würde zu gern den Sharky 775 auslesen, aber aktuell bekomme ich da
leider nichts hin und wäre dankbar über Ansätze...
Flo schrieb:> Hi,> hast du geschafft ihn auszulesen?> Ich würde zu gern den Sharky 775 auslesen, aber aktuell bekomme ich da> leider nichts hin und wäre dankbar über Ansätze...
Leider nein. Bin auch nur selten vor Ort, weshalb ich nicht so viel Zeit
zum testen habe. Falls sonst wer noch eine Idee hat, wie man vorgehen
könnte, wäre ich auch dankbar.
Hat jemand hier Erfahrung mit dem Engelmann Sensostar E? Laut Anleitung
musste das auch genauso gehen wie oben beschrieben. Ich kriege aber nur
eine Reihe von 0x55 zurück:
Jetzt versuche ich die Daten zu verstehen. Wir haben bisher wenig
geheizt und unser Zählerstand war 48 kWh (per Knopfdruck am Gerät).
Jetzt habe ich die Heizung für einen großen Zimmer (Bodenheizung)
angemacht und schon ist der Stand auf 49 kWh.
Aus den Daten sehe ich den Unterschied aber nur sehr indirekt.
Vorher:
-------------------------------------------------
primary_address: 0x00
...
energy: 0 kWh
volume: 0 l
power: 6637 W
flow: 520 l/h
supply_temp: 21.0 °C
return_temp: 21.0 °C
temp_difference: 0.14 K
...
-------------------------------------------------
Nachher:
-------------------------------------------------
primary_address: 0x00
...
energy: 0 kWh
volume: 0 l
power: 11647 W
flow: 520 l/h
supply_temp: 37.0 °C
return_temp: 26.0 °C
temp_difference: 10.81 K
...
-------------------------------------------------
Man sieht schon, das plötzlich viel mehr Power im Spiel ist, und
Vor/Rücklauf Temperatur anders sind. Aber wie zeichne ich laufend (mit
z.B. 4 Ablesungen am Tag - laut Anleitung geht das) unser Verbrauch auf
ohne den eigentlichen Zählerstand? Der eigentliche Zählerstand ist nicht
zu sehen. Und warum ist Power schon auf 6637W obwohl kein Durchlauf
stattfindet? Ist das eine Art Basis Power für die 21° (ich bin in einer
Wohnung und habe keine Kontrolle über die Zentralheizung oder
Vorlauftemperatur).
Matthew F. schrieb:> Ist das eine Art Basis Power für die 21° (ich bin in einer> Wohnung und habe keine Kontrolle über die Zentralheizung oder> Vorlauftemperatur).
Schon mal nach Infos zum Wärmemengenzähler gesucht? Mein Hersteller war
da sehr auskunftsfreudig.
Eingesetzt wird der Wärmemengenzähler von der Allmess GmbH in Oldenburg.
Vielleicht rücken die mit Informationen zum Auslesen heraus.
mfg Klaus
Ich glaube das Problem war nur, dass bestimmte Werte mehrmals kommen,
und in der Übersicht am Ende stehen die letzte Werte pro Werttyp. Mein
Zählerstand war durchaus da, aber man musste zurück im Decoding-Teil
schauen statt in der Übersicht am Ende.
Zur Info für andere, was bei mir funktioniert hat mit dem SensostarE:
- Eine USB Buchse hat was zurück bekommen, die andere nicht (das
Test-Laptop ist ziemlich alt...)
- Serial zurücksetzen mit
1
stty -F /dev/ttyUSB0 sane
(wahrscheinlich unwichtig)
- Pause auf 240ms
- Init auf 536 Bytes gesetzt
- Schreib/Lese-Kopf "falsch rum"/von oben dran setzen
- Der Zähler muss nicht händisch aufgeweckt werden
- Zuerst aufwecken mit dem Befehl 1
- Dann Auslesen mit dem Befehl 3
Ob Pause Zeit und Init-Länge unbedingt so anders von den Defaults sein
müssen, bin ich nicht sicher.
Vielen Dank @stefan_b278 für diesen tollen Stück C Code!
So, ich habe nun auch mal bei der Fa. Alles angerufen und einen sehr
netten MA drangehabt. Dieser hat mir per Mail direkt die Doku des CF55
sowie eine Config-Software für Windows zugesandt.
Habe dann mal versucht mit dem Volkszähler und der Software Zugriff zu
bekommen, was leider auch nicht klappte. Selbst mit deren Anleitung
nicht. Allerdings habe ich auch eine Preisliste von denen erhalten, wo
sie den IR-Kopf für 750€ anbieten!?! Meint ihr, der kann was
"besonderes" oder warum klappt es mit einem normalen Kopf nicht? Hatte
Baud und Fifo beachtet...
Da es sich um M-Bus handelt, habe ich unter iobroker noch mal den Mbus
Adapter installiert, finde unter Discovery aber keine Geräte am
Lesekopf... Habe ihn auch schon mal gedreht, leider ohne Erfolg.
Muss man hier noch was weiteres beachten? Danke!
Wie man oben liest, bin ich kein Expert, aber mein Verständnis bisher,
ist das mit MBUS über einen Kabel kann man sofort kommunizieren, aber
mit MBUS über die optische Schnittstelle muss das Gerät erst aufgeweckt
werden, entweder per Hand oder wie in meinem Fall mit einem langen
Sequenz von Bytes.
Ich würde, vor man mit Volkszähler oder ioBroker oder was Kompliziertes
anfängt versuchen überhaupt einen Datenaustausch hinzukriegen. Das
C-Code mbus-test oben ist sehr hilfreich dafür. Das Programm Lorus
(https://www.m-bus.de/software.html) scheint auch Einige geholfen zu
haben.
Hinterher hat man dann evtl. das Problem, dass Volkszähler oder andere
MBUS tools (auch libmbus) dieses Aufwecken nicht machen. Ich habe in
diesem Thread von keine Automatisierung gelesen die ohne ein Bisschen
Programmieren/Zusammenkleben von Tools ging.
Vom Bild im Benutzerhandbuch sieht es so aus, dass der Lesekopf
seitwärts zu montieren ist. Ich hätte gedacht mit dem Kabel dann nach
rechts, aber in meinem Fall war es andersrum als was man erwartet hatte.
Aber die Dioden sind oben und unten und nicht links und rechts, soweit
ich sehen kann.
Ich habe mich gefreut, dass dieser Lesekopf, was eigentlich eher immer
wieder mit Stromzähler in Verbindung gebracht wird, auch hier
funktioniert hat. Ich würde denken, dass das bei Ihnen auch gehen muss,
und das man kein 750€ ausgeben muss... aber wie gesagt, mein Halbwissen
besteht erst seit gestern.
Matthew F. schrieb:> Ich würde, vor man mit Volkszähler oder ioBroker oder was Kompliziertes> anfängt versuchen überhaupt einen Datenaustausch hinzukriegen. Das> C-Code mbus-test oben ist sehr hilfreich dafür. Das Programm Lorus> (https://www.m-bus.de/software.html) scheint auch Einige geholfen zu> haben.
C-Code mbus-test erläutert doch alle MBus Codes die man braucht.
Ich habe vor über 12 Jahren selber mit dem Programm Lorus Free meine
ersten Erfolge gehabt. Heute kann das sicher noch mehr.
mfg Klaus
Das readout-test.py war eigentlich nur ein Test für mehrere Wärmezähler.
Du musst das Programm mbus-test in Release/ starten bzw. vorher mit make
compilieren.
Hatte ganz vergessen das Makefile mitzusenden, hab ich jetzt
hochgeladen.
Danke für die schnelle Reaktion :)
EDIT:
Mein USB Lesekopf war plötzlich bei /dev/ttyS0, daher hatte er ihn mit
dem Argutment "-d" nicht gefunden.
Danke!
Ich korrigiere mich erneut, ich war auf der falschen Maschine :)
Hatte mich mit der IP vertippt und bin (danke Zerotier) unbemerkt auf
einem völlig falschen Host unterwegs gewesen....
Wenn ich die Config auf dem Display richtig interpretiere müsste ich mit
der Primäradresse 0x00 auf Baud 2400 kommunizieren, oder? Habe mal die
Bilder angehängt.
So, nun endlich auf dem richtigen System folgende Meldungen:
mal Error: -2
mal Error: -1
mal Error: wring length
mit einem "sudo ./mbus-test -d /dev/ttyUSB0 -a 0x00 -t" kommt nur
"sending test data 0x55..." und dann nichts mehr.
An welchen Schrauben sollte man dann nun noch drehen, damit ich mit dem
Teil sprechen kann? Welche Parameter kann man am besten zum testen
nutzen? Danke!
Von meinen Erfahrungen vor ein paar Tagen:
- Das Program ohne -t laufen lassen, da musste einen Menu erscheinen -
Option 1 ist dann Aufwecken (viele 0x55, danach sollte ein 0xE5 zurück
kommen)
- Nicht aufgeben, wenn ein Fehler Meldung kommt, sondern weiter machen
mit Option 2 oder 3
- Bei mir kommt allerdings schon eine Antwort (0xE5) nach dem Aufwecken
- Langsam die Paket-Länge verlängern (+/-) und/oder die Pause (a/y)
verlängern
Ich bin allerdings mit dem Code von dem Thread hier unterwegs und nicht
mit der GitHub Version - ich hatte noch nicht Zeit das im Detail
anzuschauen.
Matthew F. schrieb:> Ich bin allerdings mit dem Code von dem Thread hier unterwegs und nicht> mit der GitHub Version - ich hatte noch nicht Zeit das im Detail> anzuschauen.
Ist eigentlich der gleiche nur weiterentwickelt um auch mit
nicht-optischen Zählern über MBUS (2-Draht) kommunizieren zu können.
Die Option -t brauchst du gar nicht, da sendet er 0x55 dauerhaft (zum
testen des Optokopfes und schauen mit der Handy-Kamera)
sudo brauchst du eigentlich auch nicht, gib deinem /dev/ttyUSB0-Gerät
die passenden Rechte oder dir als User die richtige Gruppe die dort
lesen und schreiben kann.
./mbus-test -v -d /dev/ttyUSB0 -a 0x00
und dann mit 0-3 alles durchprobieren.
-a ist auch unnötig außer es hängen mehrere WMZ an dem Optokopf was
unwarscheinlich ist. Mit Adresse 0x254 (default) antwortet jeder.
So, ich habe nun alles durch. vor Ort den Kopf auch mal um 180° gedreht,
habe die Lords Software getestet, habe die Software von iltron versucht
und zuletzt den mbus Adapter innerhalb von ioBroker. Keiner ist in der
Lage eine Verbindung aufzubauen.
Ich habe den CF55 auch vor Ort durch die rote taste manuell geweckt, was
auch nichts brachte.
Das Einzige was mal eine Art von Lebenszeichen war, ist die
Fehlermeldung, dass ich mal eine Meldung mit "wrong length" hatte.
Das war es aber leider auch.
Der Kopf selbst muss ok sein, da ich damit im selben Aufbau (Raspi,
iobroker) problemlos einen Smartmeter auslesen kann.
Demnach bin ich kurz davor das Thema zu begraben, sofern niemand eine
weitere Idee hat.
Danke im Voraus!
Hans M. schrieb:> Das Einzige was mal eine Art von Lebenszeichen war, ist die> Fehlermeldung, dass ich mal eine Meldung mit "wrong length" hatte.> Das war es aber leider auch.
Das ist ha schon etwas. Läßt sich das reproduzieren?
mfg Klaus
Wichtig ist der Parameter "-v", dann siehst du auch die Empfangenen
Daten. Falls diese die gleichen wie deine gesendeten sind, hast du
Reflektionen.
Bei meinen WMZ von Allmess (auch Itron) hab ich welche gehabt die sich
nur ganz selten oder gar nicht aufwecken ließen. Verschiedene IR-Leds
probiert (mit verschiedenen Wellenlängen), andere Ausrichtung etc.
Mit einem anderem Lesekopf ging es dann (siehe oben, die blauen). Keine
Ahnung warum.
Die Software in deinem größerem WMZ dürfte sogar die gleiche bzw.
ähnlich sein, somit liegt es warscheinlich nur an deinem Lesekopf. Hast
du ein Oszilloskop?
Naja wenn du keins hast brauchst du es nicht extra kaufen.
Du kannst auch mit der Handy-Kamera schauen ob was vom Zähler
zurückkommt wenn du nur die Sende-Led hinhältst und die Sequenz sendest.
Dann weisst du ob es an deinem Kopf liegt ;)
Hi
Ich habe mich mehrfach durch diesen Thread durchgearbeitet und auch die
ganzen Software Programme ausprobiert, ohne dass ich bei meinem
Verbauten WMZ (Allmess Integral-V UltraLite PRO) irgendeine Art
Lebenszeichen oder Meldung bekommen hätte. Andere haben ja aber
erfolgreich diesen WMZ hier abfragen können, also suche ich gerade nach
dem Problem.
Da ich bereits bei meinen Stromzählern gute Erfahrungen mit einem
fertigen Opto-Kopf (https://weidmann-elektronik.de/Produkt_IR-Kopf.html)
gemacht hatte, hatte ich mir diesen auch für den WMZ gekauft. Jetzt gibt
es aber auch einige Beiträge hier die mit dem Ansatz gescheitert sind
den Kopf für den Stromzähler am WMZ zu verwenden.
Kann jemand mal einen Blick auf die Beschreibung des Opto-Kopfs werfen
und mir sagen ob das vielleicht komplett das falsche ist für den WMZ?
Oder kann jemand einen kaufbaren Kopf empfehlen, der erschwinglich ist?
Der Allmess M-BUS Optokopf USB für 675,96 Euro ist mir definitiv zu
teuer, selber basteln aber halt nicht meine Kompetenz.
Hallo Zusammen,
ich habe auch einen Wärmezähler (Ditech Integral-V UltraLite PRO) der ja
mit dem Kalo Ultramax identisch zu sein scheint.
Ich würde den Zähler gerne auslesen und habe mir dazu einen Schreib-
Lesekopf besorgt der an einen ESP angeschlossen ist:
https://www.ebay.de/itm/314152997777
Zum Auslesen würde ich gerne das Tasmota Smart Meter Interface nutzen.
Das sollte eigentlich alles können was man braucht.
https://tasmota.github.io/docs/Smart-Meter-Interface/https://tasmota.github.io/docs/Scripting-Language/
Falls zwischendrin die Baudrate gewechselt werden muss geht das auch,
Beispiele dazu gibt es
(https://tasmota.github.io/docs/Smart-Meter-Interface/#landis-gyr-zmr120ares2r2sfcs-obis)
Bevor ich nun los bastel, möchte ich zunächst einmal sammeln was man tun
muss um den Zähler Aufzuwecken. Trotz intensiver Recherche ist mir das
nicht ganz klar.
Kann jemand bestätigen dass folgendes korrekt ist:
Aufwachsequenz:
2400 baud, 8E1
2,2 Sekunden lang
eine Aufwachsequenz senden? Welche?
Danach sollte der Zähler irgendwas antworten..?
Falls es hilft: ich hatte neulich das Problem mit einem Lesekopf, dass
die Dioden zu weit raus nach vorne geschaut haben. So hat mann immer die
gleiche Daten zurückbekommen, die man gesendet hat. Ein vorsichtiges
präzises drücken zurück ins Gehäuse hat geholfen.
Nick K. schrieb:> Kann jemand bestätigen dass folgendes korrekt ist:> Aufwachsequenz:> 2400 baud, 8E1> 2,2 Sekunden lang> eine Aufwachsequenz senden? Welche?
Als Byte die "5"
ergibt mit 8E1 nämlich ein genaues Rechtecksignal..
> Danach sollte der Zähler irgendwas antworten..?
Nein, kurze Pause machen (ca. 350 ms) und dann [10][5B][FE][59][16]
senden.
Muss ein "E5" zurückkommen (einzelnes Byte).
Hans M. schrieb:> Error: -2
Man sieht deutlich daß du Reflektionen hast und deine gesendeten Daten
wieder zurückbekommst. Kannst du den Lesekopf besser positionieren?
Beim 2. mal hats ja funktioniert, ich schau grad nach warum er die Daten
nicht dekodieren kann.
Um den Zähler aufzuwecken, zu warten, zum Senden aufzufordern und die
Daten dann zu lesen, wird alle 5 Sekunden folgende Schleife ausgeführt:
- 0,6s warten (weil das hier auch so gemacht wird:
https://tasmota.github.io/docs/Smart-Meter-Interface/#landis-gyr-zmb120-t213cs-obis)
- 2200ms lang 0x05 senden
- 300ms lang "nichts" senden (350ms gehen leider nicht, 400 wäre
möglich, ich hoffe es funktioniert als zu sendenden String einfach ""
anzugeben)
- "105BFE5916" senden um Daten anzufordern
Damit sollte zumindest mal irgendwas zurückkommen. Bisher erhalte ich
aber nur folgendes:
1
01:05:35.012 > 05 00 02 e0 00
2
01:05:37.252 > 00 02 80 71
3
01:05:37.553 > 10 5b fe 59 16 00 02 5c a7
.
Fragen:
- Das ist ja das was ich Sende (incl. Parity + Stopbit?). Sowohl die
Sendediode wie auch der Empfangstransistor stecken in einem schwarzen
Gehäuse mit eigenen "Kanälen", die können sich eigentlich nicht sehen.
Ich meine folgendes zu erkennen:
1
01:05:35.012 > 05 00 02 e0 00
- das ist wohl der "Aufwachblock", aber wohl nicht das was hier
rauskommen soll
1
01:05:37.252 > 00 02 80 71
- mit "" nichts zu senden klappt scheinbar nicht. Wie dann?
1
01:05:37.553 > 10 5b fe 59 16 00 02 5c a7
- ist das wenigstens korrekt? [10][5B][FE][59][16] + Parity + Stopbit?
@Stefan B.:
- Was meinst du genau mit "Als Byte die "5""? 0x05?
- 350ms warten kann ich wohl nicht, nur 300 oder 400. Was ist besser?
Ich hoffe dir ist klar daß die optische Schnittstelle nicht dafür
gemacht ist die Daten regelmäßig zu lesen. Je nach Zähler maximal 4x am
Tag bei Batteriebetrieb, sonst antwortet er einfach nicht (kommt halt
auf den Zähler an). Für eine Visualisierung brauchst du die
Drahtgebundene MBUS Schnittstelle.
> Was meinst du genau mit "Als Byte die "5""? 0x05?
Sorry, hätte gleich 0x55 schreiben sollen
> 350ms warten kann ich wohl nicht, nur 300 oder 400. Was ist besser?
mach 400, die Zähler sind meist noch 1-4 Sekunden wach. Einfach
probieren.
Stefan B. schrieb:> Ich hoffe dir ist klar daß die optische Schnittstelle nicht dafür> gemacht ist die Daten regelmäßig zu lesen. Je nach Zähler maximal 4x am> Tag bei Batteriebetrieb, sonst antwortet er einfach nicht (kommt halt> auf den Zähler an). Für eine Visualisierung brauchst du die> Drahtgebundene MBUS Schnittstelle.
Mein erster Wärmemengenzähler durfte nur alle 15 Minuten angesprochen
werden. Ich habe ihn daraufhin alle 20 Minuten ausgelesen.
Beim nächsten hatte ich ganz bewusst auf die zusätzliche
Fremdeinspeisung geachtet.
mfg Klaus
im ersten Schritt wäre ich schon mal froh, wenn ich 1x am Tag den
Zählerstand auslesen könnte. Bisher ist es mir leider immer noch nicht
gelungen irgend eine Antwort vom Zähler zu bekommen.
Noch mal zur Aufwecken: Ich muss nicht nur 1x 0x55 senden, sondern 2,2s
lang immer wieder 0x55. Richtig?
Bzgl. Drahtgebundener MBUS Schnittstelle: Gibt es da anschlüsse auf der
Platine? Stefan B., du hattest das Gerät doch mal offen?
Hat irgendjemand ein vernünftiges Manual zu dem "Integral V Ultra lite
Pro"? irgendwo muss das doch dokumentiert sein..
Ich denke bei dir wäre es sinnvoller wenn du das vorher ohne den ESP
probierst und irgendwie einen Lesekopf an einen Rechner oder Raspberry
bastelst, damit du auch später prüfen kannst was der ESP sendet.
Somit kannst du auch mein Programm verwenden und herumtesten, das ist
nämlich genau für die Itron Zähler (deiner) gemacht.
Du musst 2,2 sek. 0x55 senden mit 8E1, dann 400 ms warten, dann
umschalten auf 8N1 und die Sequenz senden.
>Bzgl. Drahtgebundener MBUS Schnittstelle: Gibt es da anschlüsse auf der>Platine? Stefan B., du hattest das Gerät doch mal offen?
Bei den Geräten ohne serienmäßigen MBus-Anschluss gibt es keine Bauteile
dafür auf der Platine, logischerweise.
Stefan B. schrieb:> Hans M. schrieb:>> Error: -2>> Man sieht deutlich daß du Reflektionen hast und deine gesendeten Daten> wieder zurückbekommst. Kannst du den Lesekopf besser positionieren?
muss ich mal schauen, bin nicht immer vor Ort
> Beim 2. mal hats ja funktioniert, ich schau grad nach warum er die Daten> nicht dekodieren kann.
hattest du schon was in Erfahrung bringen können? Hatte die komplette
Doku mal hier hochgeladen.
Danke!
Ich habe das Programm von Stefan B auf einem RaspberryPI installiert und
führe es dort aus. Der Lesekopf hängt an GPIO14/15 (/dev/serial0). Mit
der Handykamera sieht man es auch blinken, ich würde mal sagen das
funktioniert.
Allerdings bekomme ich immer noch keine Rückmelung vom Wärmezähler.
Ich rufe Stefan B.`s Programm auf:
1
./mbus-test -v -d /dev/serial0
Nachdem ich nie eine Antwort bekomme, hier mal die Meldung wenn ich
versuche nur die Aufwachswquenz sende (q: wakeup sequence)
Ausgabe ist dann:
Ich habe das gleiche Setup auf einem alten Raspi Model B. Falls nicht
schon geschehen, es ist wichtig den Serial Port als Serial Port
einzurichten:
https://learn.adafruit.com/adafruit-nfc-rfid-on-raspberry-pi/pi-serial-port
Ich glaube ansonsten funktioniert den UART als Terminal, und man hat den
Eindruck das es etwas tut aber nicht richtig funktioniert. Nach der
Umstellung (was bei mir leider zuerst auch eine Umstellung auf den
echten Raspberry PI OS erforderte) ging es.
Ich hatte zuerst mit einem USB-Schreib-Lesekopf gearbeitet, ein Variable
weniger im Mix, und bin dann, nach alles funktioniert hat auf die GPIO
Pins umgestiegen. So ist die USB Version frei für weitere Experimente
wie unsere Warmwasserzähler (gleiche Firma, gleiche (laut Anleitung)
Schnittstelle, aber andere Dioden-Abstand und kein schönen magnetischen
Platz für den Lesekopf) womit ich bisher kein Erfolg hatte.
Nick K. schrieb:> Was bedeutet dieser Error 22?
Siehe https://github.com/pyserial/pyserial/issues/196
/dev/ttyS0 of Raspberry Pi 3 Model B does not support EVEN and ODD.
So, you need to use /dev/ttyAMA0.
However /dev/ttyAMA0 of Raspberry Pi 3 Model B is bound to Bluetooth
module.
In order to use /dev/ttyAMA0, you need to add the followings line into
/boot/config.txt.
dtoverlay=pi3-miniuart-bt
After reboot, you can use /dev/ttyAMA0 as physical serial port.
Danke Stefan B. !
Damit funktioniert es und ich bekomme eine Antwort von dem Zähler, wird
auch gleich richtig dekodiert!
Die Harware scheint also zu funktionieren, jetzt muss ich das "nur" noch
auf Tasmota hin bekommen.
Ich vermute auch hier liegt es an der 8N1/8E1 umschaltung beim
aufwecken..
Nick, bist Du mittlerweile mit Deinem Tasmota-Script weiter? Ich möchte
zwar einen Wärmezähler Elster F96 Plus (baugleich Sharky 775) auslesen,
aber die Spec ist sehr ähnlich: M-BUS über ZVEI, Baudratenwechsel,
Parität umschalten, etc.
Bin vom ganzen Suchen schon tüddelig und weiß nicht mehr, wo ich das
gefunden habe, aber so ist es wohl. Das könnte man natürlich auch mit
nem TTL Kopf machen und selber einen ESP programmieren, aber ich fand
das mit Tasmota via WLAN ganz schick und habe den gleichen Kopf wie Du
gekauft. Ziel soll dan FHEM werden.
Falls jemand anders da schon weiter ist, gerne auch Tipps.
Gruß,
Carsten.
Hallo Carsten,
ich mühe mich immer noch ab. Einen durchbruch habe ich noch nicht, aber
vielleicht kommen wir gemeinsam weiter.
Hier der aktuelle Stand:
- Ich habe im Tasmota Projekt angefragt ob es eine Möglichkeit gibt die
Parität umzuschalten.
(https://github.com/arendst/Tasmota/discussions/17283) Bisher gab es die
nicht, ein netter Mensch hat aber etwas eingebaut womit das
funktioniert. Damit kann man nun wohl folgendes:
to restart hardware serial port. e.g.
sml(-1 1 "9600:8E1")
currently supports only baud rate and parity N,E,O
ignores number of bits and stop bits
- ich hab die Tasmota Firmware damit und mit den Optionen die man für
SmartMeter und Scripting braucht gebaut (hier angehängt)
- Man muss zum flashen dieser Firmware, zunächst die minimal firmware
installieren als Zwischenschritt sonst reicht der Speicher nicht
(https://github.com/arendst/Tasmota-firmware/tree/main/release-firmware/tasmota)
- ich habe eine zweite Anfrage gestartet, weil mir nach wie vor nicht
klar ist wie ich diese Abfrage z.B. alle 4h starte. Mir ist das
verhalten der einzelnen Script-teile nicht klar: der Teil nach >S wir
jede Sekunde, der Teil nach >F alle 100ms ausgeführt. Damit kann man
hochzählen und je nach Stand des Zählers irgend welche Dinge ausführen
(State Machine). Da wir aber ein 2,2s langes Aufwachsignal senden
müssen, scheidet das nach meinem Verständnis aus (das würde ja nach
spätestens 1s abbrechen)
- dazu habe ich bei Tasmota ein zweites Topic gestartet:
(https://github.com/arendst/Tasmota/discussions/17388). Die Lösung ist
wohl eine Subroutine zu schreiben die den Zähler aufweckt, wartet, daten
anfordert und liest. Diese wird dann alle 4h aufgerufen. (Allerdings ist
mir noch nicht klar wie man diesen Aufruf z.b. alle x Stunden anstellt.
Mein aktueller Code ist dieser, der ruft nach dem speichern 1x die
Subroutine auf. Leider bekomme ich damit auf der Konsole im "Dump mode"
(sensor53 d1) überhaupt keine Ausgabe und verstehe nicht warum. Ich
sollte doch zumindest sehen was ich sende..
Für heute geb' ich auf.
1
>D
2
;start, define variables
3
wkup=1
4
5
6
>B
7
;setup sensor
8
->sensor53 r
9
10
>BS
11
print start
12
delay(5000)
13
print waited 5s, call subroutine
14
15
=#readmeter
16
17
#readmeter
18
print wake up meter
19
;set serial protocol
20
sml(1 1 "2400:8E1")
21
;send 0x55 for 2,2 seconds with 8E1, 2400 baud (wakeup sequence)
22
for wkup 1 532 1
23
sml(1 1 "55")
24
next
25
wkup=1
26
print wait for the meter
27
;wait for the meter to wake up
28
delay(400)
29
;switch serial protocol
30
sml(-1 1 "2400:8N1")
31
print request data
32
;set string to send to "1040FE3E16" (request data)
Stefan B. schrieb:> Hans M. schrieb:>> Error: -2> Beim 2. mal hats ja funktioniert, ich schau grad nach warum er die Daten> nicht dekodieren kann.
Hi Stefan, ich wollte noch mal vorsichtig nachfragen ob du bzgl. der
Dekodierung was herausgefunden hast.
Vielen Dank!
Ich bin soeben selbst durch Zufall einen Schritt weiter. Ich habe
gesehen, dass der Adapter mbus in ioBroker plötzlich Objekte drin hatte.
Anhand des Timestamps konnte ich sehen, dass sie von dem Tag waren, als
ich hier meine letzten Erfolge mit dem senden des Befehls "2 - REQ_UD2"
hatte.
Habe es gerade verifiziert und kann sagen, dass es nun manuell klappt!
Wenn der Adapter in ioBroker läuft und ich parallel per Console sudo
./mbus-test -d /dev/ttyUSB0 aufrufe und den Befehl "2 - REQ_UD2" oder
einfach mit "q" ein wakeup sende, bekomme ich immer ein Update in
ioBroker.
Das müsste nun nur noch der Adapter selbst in regelmäßigen Abständen
können, dann wäre es perfekt :)
EDIT: Sehe auch grad, dass ich nun auch im mbus-test Tool endlich eine
richtige Antwort bekomme :)
Moin,
leider kann ich noch nichts ausprobieren, ich muss jetzt erstmal auf den
Tastkopf warten. Aber danke schon mal für die vorkompilierte Firmware,
das erleichtert es ja um einiges.
Falls es Dir noch nicht klar ist, wie das mit den alle-4-Stunden
funktionieren kann, der nette Kollege hat auf Github geantwortet.
Außerdem steht das M für Modus und nicht für M-Bus, also müssen wir das
ganze mit r auslesen.
Ich bin schon so gespannt...
Gruß,
Carsten.
>> eingetragen.
"-n" reicht dauerhaft leider doch nicht. Kam ein paar Stunden mit
Aussetzern und dann gar nicht mehr. Muss dann doch wieder manuell drauf
und mit "2" aufwecken und abfragen. Gibts leider nur nicht als Parameter
zum aufrufen.
@Stefan B. wäre es möglich, dass dein Tool auch Parameter mit wakeup
sequence sendet?
Danke!
Aufwecken tut er bei beiden Parametern. Aber vielleicht braucht dein WMZ
das hier vor dem auslesen:
SND_NKE → Single control character
This procedure serves to start up after the interruption or beginning of
communication. The value of the frame count bit FCB is adjusted in
master and slave, i.e. the first master telegram with FCV=1 after
SND_NKE contains a FCB=1. The slave responds to a correctly received
SND_NKE with an acknowledgment consisting of a single character (E5h).
Kannst du mal die Ausgabe hier reinkopieren wenn es funktioniert und
wenn nicht? Was für ein WMZ ist das?
Es handelt sich um den oben beschriebenen itron CF55. Ich habe es nun
mal in den sudo crontab geschrieben, damit das logging einfacher ist.
Wenn er nun mit -r aufruft und keine Daten gelesen werden können,
schreibt er
1
error:noACK,frame0
Ich habe dann manuell mit dem Tool eine "2" und somit REQ_UD2 mit wakeup
gesendet, woraufhin ich das hier erhalte
1
PortModus8N1
2
wakeup():SendeAufwachsequenz
3
Pause350ms
4
PortModus8E1
5
req_ud2():SendeAnfrageDatenKlasse2
6
5bytessent
7
0byte(s)received
Eine Minute später lief der Cron dann noch mal. Erhalte dann wieder
1
error:noACK,frame0
im Log und keine neuen Daten in der DB
Habe dann noch mal manuell "2" gesendet und erhielt dann
1
PortModus8N1
2
wakeup():SendeAufwachsequenz
3
Pause350ms
4
PortModus8E1
5
req_ud2():SendeAnfrageDatenKlasse2
6
5bytessent
7
198byte(s)received
8
Error:-2
inkl. neuer Daten
Habe gesehen, dass er heute Nacht gegen 03:00 Uhr auch mit -r mal Daten
bekommen hat. Aber das ist absolut unzuverlässig wenn er nur alle x
Stunden mal mit Glück was erhält.
Ich hoffe das hilft
Ist der im Batteriebetrieb? Dann ist wohl die Auslesehäufigkeit
begrenzt. Wie genau weiß nur der Hersteller aber dann kannst du senden
was du magst der Antwortet nicht. Möglich ist z.B. ein Wert von 4x am
Tag oder so.
Ja genau, ist im Batteriebetrieb. Wenn ich ihn manuell triggere, dann
geht definitiv jede Stunde. Dass der Abruf limitiert ist, hatte ich
schon geahnt, daher auch nur stündlicher Versuch meinerseits.
hier mal die angepasste Tasmota Firmware mit:
- Möglichkeit den hardware serial port. neu zu starten ("-" vor der
nummer des Ports), z.B. sml(-1 1 "9600:8E1")
- größerer Serial Buffer (#define SML_BSIZ 200)
wie hier besprochen https://github.com/arendst/Tasmota/discussions/17388
Entschuldige wenn ich das Thema von Tasmota wechsele. Weißt jemand was
für einen Lesekopf/Dioden man braucht um mit den Engelmann Wasserzähler
(nicht Wärmezähler) kommunizieren zu können? Laut Anleitung läuft der
Datenaustausch gleich ab (mit unserem Wärmezähler erfasse ich
erfolgreich automatisch Daten). Am Zähler sieht man die Dioden, der
Abstand ist aber kleiner, und obwohl die kreisförmige Linie den Eindruck
gibt, dass irgendeiner Lesekopf drauf kommen könnte/sollte, ist dieser
Platz scheinbar nicht magnetisch wie bei den anderen Geräten.
Ein Bild ist anbei.
Wahrscheinlich muss man den Engelmann Lesekopf hinhalten um mit der
Engelmann Software den Zähler zu konfigurieren bzw. auszulesen. Ist aber
wohl nicht dafür gedacht dauerhaft Daten rauszulesen.
Danke. Lustig ist aber, das in der Anleitung genau das gleiche steht mit
4x Auslesen pro Tag. Aber ja, was das Elektronische kann widerspiegelt
sich nicht ins Physikalische.
Nick K. schrieb:> hier mal die angepasste Tasmota Firmware mit:> - Möglichkeit den hardware serial port. neu zu starten ("-" vor der> nummer des Ports), z.B. sml(-1 1 "9600:8E1")>> - größerer Serial Buffer (#define SML_BSIZ 200)>> wie hier besprochen https://github.com/arendst/Tasmota/discussions/17388
Ich habe in "Version 2" vergessen die Option "USE_SML_SCRIPT_CMD" mit zu
aktivieren. Kann also nicht funktionieren
Mit der angehängten Firmware und dem Skript unten leuchtet die IR-Led
2,2s lang und sendet danach die Aufwachsequenz. Eine Antwort bekomme ich
trotzdem nicht :-(
Ich sende nicht 532* "55", da das aus irgend einem Grund das Script zum
Absturz bringt, sondern 53* "55555555555555555555" )=10x55. Ich hoffe
das ist das gleiche..
Kann irgenjemand einen Hinweis geben wie man die Rückmeldung vom Zähler
(so er sich denn irgendwann meldet) richtig dekodiert?
Die Tasmota Dokumentation ist hier:
https://tasmota.github.io/docs/Smart-Meter-Interface/#meter-metrics
So soll das beispielsweise aussehen
(https://github.com/arendst/Tasmota/discussions/17388#discussioncomment-4407236)
1
1,68b3b368x23uuUUUUUU@1,Energie total,,total,0 ; Total Wärmemenge
2
1,68b3b368x47uuUUUUUU@60,Flow F_akt,,F_akt,0 ; aktueller Flow in m^3
Scheint jetzt doch relativ stabil zu laufen, wenn man ihn allein machen
lässt und zwischendrin nicht noch manuell triggert. Habe fast jede
Stunde einen Wert.
Habe nun folgendes im sudo crontab:
Moin Nick, danke für die V3. Ich hatte am Wochenende leider :-D viel
Besuch und konnte den Kopf bislang erst nur mit meinem Stromzähler
ausprobieren. Nun wollte ich die V3 gerade mal flashen, aber da war ja
noch das Problem mit dem Speicher...wenn ich zuerst aber die -minimal
Version flashe kommt die gleiche Fehlermeldung. Du machst das doch via
Upgrade der Webseite des Device, oder? Also Upload aus Datei? Oder?
Ich werde mich dann gleich daran setzen, das für den Elster 96 Plus
baugleich Sharks 775 zu implementieren, Aufwecken und auslesen ist sehr
ähnlich zu Deinem Zähler. Mein Vorteil: ich habe eine Beschreibung des
Protokolls vom Hersteller geschickt bekommen. Aber daraus lässt sich
vielleicht auch für Dich was lernen.
Allerdings wirft mich das jetzt zurück, wenn ich den ESP01s jetzt erst
noch per Kabel flashen muss...ich finde meinen USB nach Seriell Wandler
grad net.
Schönen Abend noch,
Carsten.
Ich bekomme eine Antwort (mit "Firmware V3")!
Ich hatte die Parität verkehrt herum gesetzt :-(
Jetzt muss ich das "nur" noch dekodieren
So sehen die Antworten aus:
Also in meiner Spec vom Elster steht im Wesentlichen was von Aufwecken,
was man ihn fragen kann und was er antwortet. Ich denke wie er
antwortet steht hier irgendwo: https://m-bus.com/documentation aber
das habe ich noch nicht gelesen.
GrC.
@Carsten: du musst erst die minimal version flashen, das geht über das
Webinterface. Ich hatte in der Vergangenheit das Problem dass das
fehlschlug wenn ich hier direkt die URL angegeben habe. Upload von Lokal
hat immer geklappt.
Zum Thema:
Ich bekomme nun zuverlässig Antworten vom Zähler und kann diese auch
dekodieren bis auf ein paar Ausnahmen (siehe Script unten).
so sieht das Ergebnis aus:
1
WAERME Total energy 25523 kWh
2
WAERME Total volume 875.99 m³
3
WAERME Current power 0 W
4
WAERME Current flow 0.000 m³/h
5
WAERME Flow temp 58.1 °C
6
WAERME Return temp 47.1 °C
7
WAERME Temp diff 11.27 °C
8
WAERME Time 33330001
9
WAERME Meter days 1068 d
Erkenntnisse:
- mir hat es geholfen die Nachricht manuell zu "zerlegen" (siehe Anhang)
- Tasmota kann auch BCD (https://de.wikipedia.org/wiki/BCD-Code)
dekodieren, das ist aber (noch) nicht dokumentiert
- mir ist noch nicht klar wie der Zeitstempel dekodiert werden muss. Was
bedeutet "36 07 C5 2C"?
Aus Stefan B.'s Programm ist mir klar, dass die einzelnen bytes
irgendwie für Minuten, Stunden, Tage, Monate und Jahre stehen:
1
else if (t_data_size == 4) // Type F = Compound CP32: Date and Time
Nachdem das auslesen des Zählers nun klappt, habe ich noch zwei Fragen:
1. Wie wird der Zeitstempel dekodiert? In der Mbus-DOkumentation steht
das im Anhang, aber ich kriege das nicht mit dem Telegramm zusammen.
So weit ich das verstehe müsste der "Burgunderrote Block" ab Zeile 7 ab
"x04 x6D" für den Zeitstempel stehen. x36 müssten die Minuten sein und
x07 die Stunden. --> 07h 54min ist das korrekt? Die dekodierte Zeit ist
immer eine Stunde früher und ca. 10 Minuten später als es tatsächlich
ist. Könnte auch eine falsche Zeitzone und eine falsch eingestellte
Uhrzeit sein..
So sieht der Teil des Scripts dazu aus:
1
1,046Dxxuu@1,Hour,h,time_h,0
2
1,046Duu@1,Minute,min,time_m,0
Für das Datum habe ich noch überhaupt keine Idee.
2. Kann jemand ein Setup empfehlen für eine
Datenbank(influxdb?)/MQTT-Broker(mosquitto?)/Anzeige(grafana?) mit der
man die nun gewonnenen Daten schön aufbereiten kann? Am wichtigsten wäre
dass gut dokumentiert ist was man da machen muss um das einzurichten.
Naja steht doch genau beschrieben. Ein Byte nehmen, mit der Maske
verodern und evtl. noch schieben.
Mosquitto ist super, dann per Script oder NodeRED oder telegraf in
influxdb reinschreiben.
Grafana zeigts dann hübsch an.
Nick K. schrieb:> Wie wird der Zeitstempel dekodiert?
Einen Beitrag weiter oben hast du einen Schnipsel C-code gepostet, der
das perfekt erklärt.
Welches Konstrukt davon verstehst du nicht?
Komischerweise funktioniert der Code so, ist auch aus dem libmbus
Projekt geklaut. Aber die Spezifikation sieht anders aus z.B. bei den
Minuten ist bit 0 nicht dabei..
Moin, jetzt ein Update von meiner Seite:
ich habe den Hichi WIFI Schreib/Lesekopf, der aus einem TTL-Lesekopf und
einem ESP01s besteht. Software nun (via tasmota-minimal per Web-URL) die
tasmota V3 von Nick, welche SML Scripting eingeschaltet und einen
vergrößerten Serial Buffer hat. Das neue Feature "Parity Umschalten" ist
seit 12.2 mit drin. Der Zähler ist ein Elster 96 Plus baugleich Sharky
775.
Natürlich passierte gar nichts. Dass der Kopf was tut konnte ich mit dem
Messer-Test sehen, aber der Zähler tat so, als wenn er nichts davon
mitbekommt.
Also folgte ich Nicks Weg und schloss den TTL-Teil des Kopfes via eines
TTL-USB Adapters an ein hier rumliegendes Armbian System an und nutzte
die M-BUS Software von Stefan B. Siehe da, es flutscht:
Hier nur mal das Beispiel des ersten VIF. Da mein Zähler auf 40.062 MW/h
steht bin ich erstmal glücklich.
Dann folgte ich Nicks Weg der Decodierung im Datenstrom, da wir das in
Tasmota über so eine Art Pattern-Matching machen müssen. Das hat auch
ganz gut geklappt, ohne dass ich die gesamte M-Bus Spec lesen musste,
man kann es gut aus dem Output von Stefan B.s Software herauslesen.
Im nächsten Schritte gedenke ich den ESP01s wieder einzusetzen. Ich habe
mbus-test ohne Änderung mit -r aufgerufen, um an die Ergebnisse zu
kommen. Nun werde ich mal in die Software schauen, was genau da so
abgeht. Ich denke:
- Aufwachsequenz [55]..[55] 2400 8N1
- [68][04][04][68][53][FE][50][00][A1][16] 2400 8E1 -> ACK
- [10][5B][FE][59][16] -> Daten
- zB Suchen nach [00][0C] -> Akkumulierte Energie 8 digit BCD
Merkwürdig ist nur, dass das vorhin geklappt hat und nun wieder nicht.
Wahrscheinlich macht der sehr selten mit um seine Batterie zu sparen.
Ich habe ja die Datenspec des Zähler von einem Mitarbeiter der Firma
bekommen, der gleich sagte, ich sollte das bitte nicht so oft machen
:-).
Hier notiert um andern Leidensgenossen zu helfen.
Gruß,
Carsten.
Hallo, ich brauche noch mal Hilfe.
Ich habe den Lesekopf wieder an den ESP01s angeschlossen, auf dem die V3
von Nick läuft. Nachdem ich die Messages dekodieren konnte, verwende ich
nun folgendes Script:
Mit einem weniger aggressiven Timing (alle 10 Sekunden) habe ich das am
Wärmezähler probiert, aber es kam nichts. Weil nach Eingabe von sensor53
d1 keine Daten empfangen wurden, habe ich das Teil in meine Bastelbude
geholt und lasse das nun alle 10 Sekunden laufen, um es zu testen.
Ich sehe mit dem Handy, dass er etwas sendet. Allerdings kann ich auch
mit einem glänzendem Messer nicht provozieren, dass ich wenigstens die
gesendeten Daten empfange...habe ich da irgendwo versehentlich was
verstellt, einen GPIO Pin für Empfang oder so? Ist es doch nicht die
richtige Firmware?
Ich bin verwirrt, hat jemand eine Idee zum Debuggen? Wenn ich ein Budget
für die Anzahl der Auslosungen habe und das beim Testen heute morgen mit
mbus-test zufällig gerade aufgebraucht war, würde der Zähler dann so
reagieren? Aber ich meine, er reagiert ja gar nicht. Hmmm.
Gruß,
Carsten.
P.S.: den Code 6804046853FE5000A116 habe mal drin und mal draußen
gehabt, bei meinen Tests heute morgen mit mbus-test wurde das beim
Aufruf mit -r auch nicht mehr gesendet, ein einfaches REQ_UD2
Kurztelegramm scheint auszureichen.
Also, ich habe den Kopf jetzt noch einmal mit einem Stromzähler
überprüft und der antwortet brav, ein Defekt des Kopfes bzw. der Tasmota
Software können also ausgeschlossen werden. Ich habe dann 24 Stunden
gewartet bevor ich es erneut ausprobiert habe, wieder keinen Erfolg
gehabt. Ich bin ratlos. Es scheint an der "Übersetzung" von mbus-test
zum Tasmota-Script der Aufwecksequenz zu liegen.
Gruß,
Carsten.