Hallo,
ich habe mich letzte Woche mal hingesetzt und habe ein Modul für das Ansprechen des MBus geschrieben, weil es sowas offenbar noch nicht gibt. Das Modul ist eigentlich nur ein Wrapper. Es ruft ein vom Anwender zu erstellendes Script auf, welches wiederum die Kommandos des RScada Projektes (http://www.rscada.se/libmbus/) nutzt, welche letztendlich die Protokollumsetzung für MBus machen. Das Script schreibt nach stdout eine Zeile mit allen Readings und diese werden vom MBus Modul dann geparst.
Wir haben in unserem Technikraum einen Fernwärmemengenzähler und eine Wasseruhr die ich mit einem MBus-Modul ausgerüstet habe. Deren Datenleitungen sind via CAT5 Kabel in den Sicherungsschrank gelegt und laufen dort in einen Relay PW3 Pegelwandler. Der Pegelwandler ist wiederum über ein USB2Serial Kabel mit dem Pi verbunden, auf dem FHEM läuft.
Es gibt im Netz auch Selbstbauanleitungen für die MBus Pegelwandler, aber ich habe einen günstigen PW vom Relay bei Ebay gefunden und zugeschlagen.
Den Code habe ich angehängt. Er enthält auch die HTML Doku für die FHEM OnlineDoku. Dort ist auch beschrieben, wie man alles einrichtet. Vielleicht ist es ja für den ein oder anderen interessant und kann ein Anfang für Erweiterungen sein.
Ich bin absoluter Anfänger mit Perl und habe mich von dem 98_HelloWorld.pm Modul beginnend durchgehangelt. Es läuft nun seit 2 Wochen ohne jede Probleme und generiert mir die Readings für meine beiden Zähler (es müssen zwei separate Devices angelegt werden!). Daher dachte ich, es wäre nun an der Zeit, dass ich meinen Code mal dem Forum zur Verfügung stellen könnte...
Ich bin auf Euer Feedback gespannt.
Ich habe selber keinen M-Bus, aber ich denke Du solltest Deinen Beitrag eher in ein andere Bereich des Forums verschieben (Sonstige Systeme?), da Du ja eigentlich keine Frage hast, sondern sogar etwas beitragen kannst. Hier wird Dein Beitrag möglicherweise übersehen.
Gruss,
Johannes
Zitat von: viegener am 05 Dezember 2015, 22:10:40
Hier wird Dein Beitrag möglicherweise übersehen.
Gruss,
Johannes
Nicht möglicherweise - hier geht der Beitrag mit Sicherheit unter (und das Modul auch).
Im Forum lässt sich aber finden wie Module eingepflegt werden können und wie sie supported werden.
Hallo,
ok.. kann ich es selbst verschieben? Oder wie kriege ich es verschoben?
Kannst du selbst
Hi,
Ich würde gerne deinen Ansatz verwenden, um meinen Sparky Wärmemengenzähler "ins Internet" zu bringen. Mir schwebt vor, die Daten des Wärmemengenzählers in eine MySQL Datenbank hochzuladen. Brauche ich dazu dann überhaupt FHEM hochzuziehen? Ich denke mal nicht, oder? Es müsste doch reichen, einen Pi oder BeagleBoneBlack oder Pinano dafür abzustellen und die Lips von rSCADA entsprechend mit einem eigenen Skript anzuprechen, oder? Welche alternativen gibt noch zum relay MBUS - Wandler? Prinzipiell könnte man sich doch den Umweg über USB ebenfalls sparen, oder?
Grüße
Andreas
Hi Andreas,
ja, im Prinzip brauchst Du kein FHEM. Bei den rScada Libs sind Binaries dabei, mit denen Du den MBus scannen und abfragen kannst (mbus-serial-scan-bus und mbus-serial-request-data). Bei mir hat die neueste Version probemlos unter Raspbian kompiliert.
Die Daten werden als XML Datei nach stdout gegeben und können z.B. mit xmllint abgefragt bzw. gefiltert werden. So mache ich es ja auch bei meiner Lösung.
Es gibt noch ein paar weitere Hersteller von Pegelwandlern, aber MBus scheint immer noch etwas "elitäres" zu sein, jedenfalls kostet die HW immer noch viel Geld für den privaten Geldbeutel. Der Relay PW3, den ich habe, kostet regulär um die 150 EUR. Ich hatte das Glück bei Ebay einen gebrauchten für 70 EUR zu schiessen. Der PW3 besitzt eine serielle Schnittstelle wo er RS232 Pegel erwartet, daher kannst Du ihn nicht direkt an den Pi anschliessen, sondern nur über den Umweg über so einen USB2Serial Adapter (oder eine DIY Lösung). Wenn Du den PW3 direkt an einen PC anschliessen wolltest, ginge das natürlich ohne Wandler.
VG
Markus
Hallo
Ich würde auch gerne den MBus von meinen Stromzähler EMU 32.61 mit FHEM verwenden. Ist ein Eigenbau Bus Empfänger mit dem PI möglich oder gibt es ein günstigen Empfänger 20€ ?
Gesendet von iPhone mit Tapatalk
Ich hab noch nichts an Pegelwandlern gesehen, was nicht mind. 80EUR kostet :(
Es gibt ein paar Eigenbau-Varianten im Netz, die mir aber als nicht ganz einfach fuer einen Laien aussehen.
http://www.m-bus.de/pw1.html
Ich hab nen M-Bus Wasserzaehler, und der Kostenfaktor fuer den Pegelwandler haelt mich bis zuletzt davon ab ihn auszuwerten.
Gruß
Markus
Hallo,
die Seite mit dem Selbstbauschaltplan hatte ich auch gefunden. Abgehalten hat mich, dass man eine positive/negative Spannungsquelle benötigt (habe einige ICs von Maxim gefunden, die das immerhin könnten bis -15V), aber habe es dann auch gelassen, weil ich dann nicht bei Problemen erstmal ausschliessen muss, dass der Pegelwandler richtig funktioniert.
Diese Link kennt ihr bestimmt auch schon http://blog.bubux.de/m-bus-wasserzaehler/ (http://blog.bubux.de/m-bus-wasserzaehler/). Wenn ich nicht den PW3 "relativ günstig" bei Ebay gefunden hätte, hätte ich es wohl auch gelassen, weil es schon viel Geld für eine "Spielerei" ist.
Ich hab schon mehrmals auf PW3 bei ebay geboten, aber mehr als 50 will ich fuer nen gebrauchten auch nicht ausgeben...
Leider scheint es keine guenstigen Pegelwandler zu geben.
Bei Solvismus habe ich mal eine OEM Platine angefragt, aber unter 50EUR is auch da nix zu bekommen. Und dann muss immer noch ne RS232 Buchse und Strom ran.
Hallo zusammen,
Aliexpress fuehrt dieses Teil:
http://goo.gl/fkI33x
Hat das zufaellig schon jemand getestet? Ich kann leider nicht rauslesen ob das ein M-Bus Master oder Slave ist und wie man mit den USB-Daten dann umgeht...
Gruß
Markus
Servus,
also wenn es ein Master ist, wirst Du via USB vermutlich einen virtuellen seriellen Port im System bekommen und kannst den dann mit den rScada-Libs abfragen (s.o.).
Ob es Master oder Slave ist, kann ich auch nicht ersehen, aber ich schätze mal sehr, dass es ein Master-Device ist...
Allerdings: 46 Dollar + Zolleinfuhrgebühr + Wagnis, dass das Ding nix taugt wäre mir auch zu teuer...
Zoll: Bis dato ist bei jede Warenlieferung aus China im Zoll hängen geblieben und ich durfte dann immer 1h dorthin gurken und mich blöd anreden lassen....
also ich hatte bislang noch keine Probleme. aber mal sehen, viellcht Versuch ichs mal. angeblich wird Rücksendung akzeptiert.
Hallo Daubsi & Co
Ich haben diesen interessanten Thread erst jetzt gefunden.
Ich habe ein ähnliches Problem - hier beschrieben:
https://forum.fhem.de/index.php/topic,53258.0.html
Ich habe einen Wasserzähler von GWF der per Kabel mit einem Wandablesemodul verbunden ist. Die Schnittstelle solle anscheinend ebenfalls auf mbus basieren. Seht ihr eigentlich Möglichkeit wie ich mich hier per FHEM einklicken könnte?
Gruss
Alen
Servus,
wenn du nicht an das Kabel selber hinkommst, könnte es wohl schwer werden. Um MBus zu "sprechen", brauchst Du wie oben beschrieben einen Pegelwandler, der die Befehle auf den Bus setzt. Wenn das Kabel bei Dir nur in dieses Auslesemodul geht, dann sieht es wohl eher schlecht aus... BT Schnittstelle kann jetzt auch alles und nichts sein. Meine Heizung kann auch über ein IR Modul ausgelesen werden, dass man vorne hinklippst - das hatte der Techniker auch mal dabei -, aber solange Du nicht Zugangscodes etc. hast, wirst Du damit wohl auch nicht weit kommen.
Einfach schon mal freundlich beim Versorger angefragt? Manchmal hat man ja Glück und man gelangt an einen hilfsbereiten Menschen, der einem u.U. sogar die PIN für den Auslese-Zugang rausgibt (so geschehen bei einem Kollegen von mir...)
VG
daubsi
Hallo Zusammen,
Ich hab ein Problem beim Testen der seriellen Schnittstelle: Ich habe einen Wärmemengenzähler der eine RS232 Schnittstelle besitzt, über diese er das MBUS - Protokoll spricht.
Auf dem Rpi3 hab ich das Serial Modul von https://www.abelectronics.co.uk/p/51/Serial-Pi-Plus gesteckt und nach deren Anleitung konfiguriert. Nachdem ich auch den RPI3 Bluetooth hack durchgeführt hatte, bekam ich auch keine Probleme mehr beim connecten der rSCADA Lib zum Port. Nur jetzt kommt gar nichts mehr. Das Script läuft, und beendet sich ohne Rückmeldung. Ich hab das Gefühl, dass ich den falschen Serial Port im RPI3 erwischt habe.
dmesg liefert folgenden output:
andreas@FHEM:~ $ dmesg | grep tty
[ 0.000000] Kernel command line: 8250.nr_uarts=1 dma.dmachans=0x7f35 bcm2708_fb.fbwidth=656 bcm2708_fb.fbheight=416 bcm2709.boardrev=0xa02082 bcm2709.serial=0x5dfdc392 smsc95xx.macaddr=B8:27:EB:FD:C3:92 bcm2708_fb.fbswap=1 bcm2709.uart_clock=48000000 vc_mem.mem_base=0x3dc00000 vc_mem.mem_size=0x3f000000 dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
[ 0.001290] console [tty1] enabled
[ 0.268311] 3f215040.uart: ttyS0 at MMIO 0x3f215040 (irq = 29, base_baud = 50000000) is a 16550
[ 0.908209] 3f201000.uart: ttyAMA0 at MMIO 0x3f201000 (irq = 83, base_baud = 0) is a PL011 rev2
[ 2.491519] systemd[1]: Starting system-getty.slice.
[ 2.495059] systemd[1]: Created slice system-getty.slice.
ttyS0 und ttyAMA0 habe ich probiert. die Bautraten hatte ich nochmal angepasst auf 2400Baud. immer mit dem gleichen ergebnis.
Weiß jemand Rat?
Hi,
hm, was meinst Du mit "RS232 über die er MBus spricht"?
MBus ist ja ein Protocol mit 2 Drähten und bis zu 36V Spannung? Da kannst Du doch keine normale RS232 anschliessen?
Oder ist das Ding sowas wie der Pegelwandler, den ich oben erwähnt habe?
VG
daubsi
Zitat von: daubsi am 11 Mai 2016, 21:40:41
Servus,
wenn du nicht an das Kabel selber hinkommst, könnte es wohl schwer werden. Um MBus zu "sprechen", brauchst Du wie oben beschrieben einen Pegelwandler, der die Befehle auf den Bus setzt. Wenn das Kabel bei Dir nur in dieses Auslesemodul geht, dann sieht es wohl eher schlecht aus...
also an das Kabel würde ich schon raunkommen. Siehe Bild. Das blaue Ding ist das Auslesemodu. Der Vorsorger hat so ein Auslesegerät (induktiv). Das hält er dort hin und kann die Daten via Bluetooth an an ein Tablet/Notebook übertragen. Das ist das Auslesegerät: http://www.gwf.ch/fileadmin/download/Versorgung/Prospekte/Automatisierte_Auslesung/NEU_CAB-05.pdf
Die Frage ist ob ich etwas nachbauen könnte, damit ich die Daten auch von diesem Ding (induktiv) ablesen kann und dann ins FHEM einbinden könnte?
Oder ich hänge etwas im Kabel dazwischen (M-Bus Master) natürlich in Rücksprache mit dem Vesorger.
Was denkt ihr?
Den Versorger/Hersteller habe isch schon angefragt, aber leider keine Antwort.
Gruss
A.
Servus,
hm so ein Busmaster könnte vlt funktionieren, aber dass Du Duch in die BT Schnittstelle "reinhacken" kannst, kann ich mir eher nicht vorstellen ...
Aber unbedingt mit dem Betreiber vorher abklären...
VG daubsi
Pegelwandler (PW3) da
HRI-Modul fuer Sensus Zaehler da
libmbus test funktioniert
Jetzt wird dein Modul getestet :D
Hier mein Script zum Auslesen eines HRI-B1 Moduls das an einem SENSUS Wasserzaehler haengt. Als Pegelwandler wird ein Relay PW3 genutzt.
#!/bin/bash
/home/pi/libmbus-0.8.0/bin/mbus-serial-request-data -b 300 /dev/usbteil3 0 > /opt/fhem/log/zaehler
volume=$(xmllint --xpath '//DataRecord[@id=1]/Value/text()' /opt/fhem/log/zaehler)
echo VOLUME:$volume/V
echo $(date) VOLUME:$volume >> /opt/fhem/log/zaehlerlog.txt
300 baud weil die Entfernung schon ein paar Meter sind und ich bei 2400 baud eher zufaellig gueltige Readings hatte.
Das Zaehlerlog schreibe ich nur aktuell zu Testzwecken mit. Da ich nur ein einziges Reading brauche habe ich alle anderen Werte entsprechend geloescht.
Bestärkt mich in der Ansicht, dass der MBus viel zu viel Overhead für die Hausautomatisierung bietet.
LG
pah
mangels alternativen und bei nur 45eur für nen PW3 kann ich damit leben.
Klar, muss ja - zeigt aber m.E., dass MBus keine so richtige Zukunft hat.
LG
pah
Zitat von: micomat am 20 September 2016, 21:32:50
Hier mein Script zum Auslesen eines HRI-B1 Moduls das an einem SENSUS Wasserzaehler haengt. Als Pegelwandler wird ein Relay PW3 genutzt.
#!/bin/bash
/home/pi/libmbus-0.8.0/bin/mbus-serial-request-data -b 300 /dev/usbteil3 0 > /opt/fhem/log/zaehler
volume=$(xmllint --xpath '//DataRecord[@id=1]/Value/text()' /opt/fhem/log/zaehler)
echo VOLUME:$volume/V
echo $(date) VOLUME:$volume >> /opt/fhem/log/zaehlerlog.txt
300 baud weil die Entfernung schon ein paar Meter sind und ich bei 2400 baud eher zufaellig gueltige Readings hatte.
Das Zaehlerlog schreibe ich nur aktuell zu Testzwecken mit. Da ich nur ein einziges Reading brauche habe ich alle anderen Werte entsprechend geloescht.
Moin!
Interessant, ich bin momentan auch auf 300 Baud runter, weil ich andauernd Abbrüche hatte. Das Kabel ist bei mir aber nur etwa 10m lang.
Ich habe mein Script zum Auslesen GetHRIDataUnit.sh noch ein bisschen erweitert zur Fehlerbehandlung. Ein Problem ist z.B. dass ich ja 2 MBus Devices habe und FHEM die unter Umständen so scheduled dass zeitgleich versucht wird beide Devices auszulesen, was natürlich nicht klappt. Daher habe ich eine Warteschleife eingebaut. Ausserdem wird das richtige USB2Serial Kabel dynamisch ermittelt, da ich auch noch einen JeeLink habe, und nicht jedesmal 100% exakt dem gleichen ttyUSB-Device das gleiche HW-Device zugeordnet wird. Alternativ könnt ihr es über udev rules statisch zuweisen, siehe das letzte Script.
GetHRIDataUnit.sh
#!/bin/bash
DEVICE=`/home/pi/listUSB.sh | grep Prolific | cut -d " " -f 1`
/usr/local/bin/mbus-serial-request-data -b 300 $DEVICE 10 > /tmp/hridataunit
if [ $? -ne 0 ]; then
sleep 10
/usr/local/bin/mbus-serial-request-data -b 300 $DEVICE 10 > /tmp/hridataunit
fi
serial=$(xmllint --xpath '//DataRecord[@id=0]/Value/text()' /tmp/hridataunit)
water=$(xmllint --xpath '//DataRecord[@id=1]/Value/text()' /tmp/hridataunit)
vendor=$(xmllint --xpath '//SlaveInformation/Manufacturer/text()' /tmp/hridataunit)
requests=$(xmllint --xpath '//SlaveInformation/AccessNumber/text()' /tmp/hridataunit)
echo VENDOR:$vendor,SERIAL:$serial,REQUESTS:$requests,LITERS:$water/V
rm /tmp/hridataunit
listusb.sh:
#!/bin/bash
for sysdevpath in $(find /sys/bus/usb/devices/usb*/ -name dev); do
(
syspath="${sysdevpath%/dev}"
devname="$(udevadm info -q name -p $syspath)"
[[ "$devname" == "bus/"* ]] && continue
eval "$(udevadm info -q property --export -p $syspath)"
[[ -z "$ID_SERIAL" ]] && continue
echo "/dev/$devname - $ID_SERIAL"
)
done
/etc/udev/rules.d/80-serials.rules:
# Ensure the myJeelink (the one with the serial number) is called ttyUSB0 and the Prolific USB2Serial cable for the MBus interface is called ttyUSB1 (identified via manufacturer tag)
KERNEL=="ttyUSB*", ATTRS{serial}=="AJ02Wxxx", NAME="ttyUSB0"
KERNEL=="ttyUSB*", ATTRS{manufacturer}=="Prolific Technology Inc.", NAME="ttyUSB1"
Ich habe auch in Etwa 10m Laenge. Dachte erst es liegt irgendwie an EMV da im Heizungs-/Hausanschlussraum ja doch noch einiges anderes steht. Seit ich aber auf 300baud bin flutscht das.
Ich hab auch eine udev-Rule, da am gleichen Pi noch IR-Lesekoepfe fuer Stromzaehler haengen.
Ich hoffe ich finde noch irgendwo eine weitere MBus Verwendungsmoeglichkeit. Sonst liegen 2 der 3 Anschluesse am PW3 brach.
@pah, wenn ich jedoch hausverwalter bin und habe einen PW60 um die einzelnen Wohnungen zu messen, dann macht das sicher mehr Spass als alle einzeln abzufragen ;)
@daubsi, du hast nicht zufaellig ne ahnung, wie ich den zaehlerwert in das HRI modul schreiben kann? ich haette gern den wert auf der uhr synchron mit dem in FHEM
Hm... na ja, nachdem der Zähler ja für viele nicht nur als "Spielerei" für FHEM gedacht ist, sondern die Basis für die Abrechnung an die Wasserwerke (das ist ja der Witz, dass da nicht zwingend jemand vorbei kommen muss um die Uhr abzulesen), kann ich mir nur schwer vorstellen, dass man den einfach so auf einen anderen Wert setzen kann...
Hast Du denn das Anleitungsblatt von dem HRI B1 mitbekommen? Ich habe da 2,3 Datenblätter, bzw. auch Anleitungen für die Anbindung an einen Pegelwandler o.ä. Evtl steht da was dazu, aber ich glaube es, wie gesagt, eher nicht.
eigentlich auch ne bloede frage ;D hast recht. wenns so einfach waer wuerds jeder machen.
ich werd mir einfach nen dummy/doif bauen und die differenz addieren.
danke 8)
Ich könnte mir schon vorstellen, dass es grundsätzlich geht - nur halt nicht einfach so via "SetCounter()" o.ä.
Ich meine bei meinem Fernwärme Zähler kann man das einstellen - aber halt nur nach Eingabe der PIN des Versorgers - die ich natürlich nicht habe ;-)
Aloha, hat mich mein Gedächtnis doch nicht im Stich gelassen:
https://sensus.webdamdb.com/bp/#/search?q=%22HRI%20Sensor%22&filters=%257B%257D#22972030 (https://sensus.webdamdb.com/bp/#/search?q=%22HRI%20Sensor%22&filters=%257B%257D#22972030)
Seite 3: Data Interface. "Counter start reading: To synchronize the MBus counter with the meter reading" ... "All settings are also programmable in the field"... "Minicom is a SW to programm the HRI B using a PC"
cool :) danke
Hallo zusammen,
ich habe einen Wärmemengenzähler Landis Gyr T550 Ultraheat mit Mbus-Schnittstelle. Diese Schnittstelle wird vom EVU genutzt.
Nachdem meine Versuche, über die optische Schnittstelle mit dem Script von http://www.sedelmaier.at/node/112 ins Stocken geraten, stell ich jetzt mal eine blöde Frage an euch:
Habt Ihr Erfahrungen mit einem Mbus-Splitter ( 2x Master, 1x Slave)? ich habe einen Pegelwandler PW3 vorliegen, jedoch hält mich der Preis für einen derartigen Splitter doch etwas ab, einfach zu bestellen und dann festzustellen, dass es nicht funktioniert.
http://www.relay.de/de/produkte/m-bus-accessories/m-bus-splitter.html
Für diesen Geldbetrag kann ich mir schon fast einen "eigenen" Wärmemengenzähler verbauen lassen ;-)
Vielen Dank und Grüsse
klaso
Hm, ich denke schon dass das funktionieren müsste, denn das ist ja genau der Einsatzzweck des Gerätes.
Allerdings ist eventuell fraglich, ob Du den Splitter dazwischen klemmen darfst, weil Du damit ja "theoretisch" etwas manipulieren könntest.Und oft sind die Energieversorger da so ein bisschen pingelig.
Ich habe auch den PW3 von Relay im Einsatz und bin damit sehr zufrieden. Es klappt alles einwandfrei. Der teure Preis ist vermutlich auch dadurch gerechtfertigt, dass es einfach kein Mainstream-Produkt ist.
Versuch mal Dein Glück bei Ebay bzw. Ebay Kleinanzeigen. Dort hatte ich auch den PW3 für einen "Spottpreis" von gerade mal 70 EUR bekommen :o
Viel Erfolg!
Vielen Dank für das Feedback!!
Hallo,
ich habe an meiner Wasseruhr eine HRI Data Unit von Sensus installiert. Es ist eine HRI B4 /8l.
Als Pegelwandler habe ich einen PW3. Nun kommen aus der HRI Unit 4 Kabelfarben. Ich habe braun und weiss an den PW3 angeschlossen, jedoch bekomme ich den Zähler nicht ausgelesen. Installiert habe ich libmbus und auslesen möchte ich es über das Neue MBus Modul.
Kann mir jemand eine Hilfestellung geben um das Problem in den Griff zu bekommen.
Grüße
Rudi
Servus Rudi,
nun ja, "was" geht denn nicht?
Wie hast Du den Zähler angeschlossen? Die genaue Modellbezeichnung habe ich gerade nicht im Kopf, aber bei mir ist das grüne und braune Kabel am PW3 angeschlossen.
Wichtig ist, dass Du beim HRI tief runter gehst mit der Baudrate, da das Device maximal, glaube ich, nur 1200 baud kann. Ich habe ihn mit 300 baud angebunden, das läuft stabil.
Die Baudrate stellst Du über den Parameter "-b" ein.
Welche Ausgabe bekommst Du bei folgendem Kommando?
root@fhem:/usr/local/bin# /usr/local/bin/mbus-serial-request-data -b 300 /dev/ttyUSB1 10
<MBusData>
<SlaveInformation>
<Id>52780535</Id>
<Manufacturer>INV</Manufacturer>
<Version>64</Version>
<ProductName></ProductName>
<Medium>Water</Medium>
<AccessNumber>61</AccessNumber>
<Status>00</Status>
<Signature>0000</Signature>
</SlaveInformation>
<DataRecord id="0">
<Function>Instantaneous value</Function>
<Unit>Fabrication number</Unit>
<Value>52780535</Value>
<Timestamp>2017-05-08T06:57:15</Timestamp>
</DataRecord>
<DataRecord id="1">
<Function>Instantaneous value</Function>
<Unit>Volume (m m^3)</Unit>
<Value>116178</Value>
<Timestamp>2017-05-08T06:57:15</Timestamp>
</DataRecord>
</MBusData>
Wenn Du die Geräte-ID noch nicht weisst, dann kannst Du mit "mbus-serial-scan" den Bus absuchen lassen.
VG
Markus
Hallo daubsi,
ich würde auch gerne den libmbus auf meinem Raspi3 installieren. Aber genau da scheitere ich schon als blutige Anfänger. Ich erhalte immer eine Fehlermeldung, dass die Paket-Architektur nicht zum Sytem passt. Ich wollte die letzte Version 0.8.0 von rSCADA installieren. Was mache ich falsch bzw. welche Version hast Du wie auf deinem Pi installiert?
Gruß
Garf
Hallo,
ich nehme an, Du verwendest die Version von http://www.rscada.se/libmbus/index.php?lang=en?
Der RPI3 ist meines Wissens nach nativ 64 bit, also sollte eigentlich die v0.8.0 passen, da diese ja als 64 bit Paket vorliegt.
Ich kann leider gerade nicht nachschauen, welche Version ich nutze, da es mir mal wieder die SD Karte meines PIs zerhauen hat und ich mir nicht mal mehr die installierte Paketliste anschauen kann...
Ich denke aber, dass es zum Setup die aktuellste Version war, und das hätte dann ja auch schon v0.8.0 sein müssen.
Edit: Habs doch gefunden! Ich habe die Sourcen der v0.8.0 Library verwendet und kein fertiges Paket genommen. Also einfach das tar.gz runterladen, entpacken und compilieren. Lief problemlos durch.
Vielleicht hat bei mir das fertig gebaute Paket auch nicht funktioniert.
Ich habe fhem auf einem Pi1 da ich dort das Funk Shield von busware.de (http://shop.busware.de/product_info.php/cPath/1_35/products_id/97) nutze. Zum damaligen Zeitpunkt gab es noch keine Version, die auf Pi2/3 funktionierte.
Was für ein Fehler kommt denn?
Zitat von: daubsi am 28 Oktober 2017, 14:24:24
ich nehme an, Du verwendest die Version von http://www.rscada.se/libmbus/index.php?lang=en?
Ja, genau.
Zitat von: daubsi am 28 Oktober 2017, 14:24:24
Ich habe die Sourcen der v0.8.0 Library verwendet und kein fertiges Paket genommen. Also einfach das tar.gz runterladen, entpacken und compilieren. Lief problemlos durch.
Die habe ich mittlerweile auch genommen. Nur die dann erforderlichen Schritte habe ich noch nicht wirklich verstanden. Im Moment läuft die "mbus-tcp-scan" Abfrage und es werden zwei Devices angezeigt. Wenn ich versuche über "mbus-tcp-request-data" die Daten zu lesen, dann kommt eine Fehlermeldung.
Die Installation von libmbus habe ich nach folgender Anweisung aus dem RaspberryPi-Forum durchgeführt:
ZitatZ. B. in das geignete Verzeichnis (evtl. "Downloads") wechseln und:
Code
wget -4 -c http://www.rscada.se/public-dist/libmbus-0.8.0.tar.gz
tar xzvf libmbus-0.8.0.tar.gz
cd libmbus-0.8.0
CFLAGS+="-g -O2 -Wl,-rpath=/home/$USER/Downloads/libmbus-0.8.0/mbus/.libs" ./configure --with-gnu-ld
make
ldd bin/.libs/mbus-tcp-scan
wenn OK:
Code
sudo make install
ldd $(which mbus-tcp-scan)
mbus-tcp-scan -h
Aber es ist ja wie so oft im Leben, wenn man gar nicht weiß was man da macht, dann kann man den Fehler auch nicht finden. Ich vermute mal, dass ich nicht alles compiliert habe?! Bevor ich jetzt irgendwelche Dinge ausprobiere, frage ich lieber nach.
Entschuldige bitte, dass ich mich erst jetzt melde, aber ich hatte gar nicht damit gerechnet, dass der Thread noch aktiv beobachtet wird.
Gruß Garf
Hallo,
verrat doch mal, was Du eigentlich für Geräte abfragen möchtest?
Ich wundere mich nämlich gerade, dass Du von dem mbus-tcp-scan sprichst. Hast Du die Geräte nicht über eine serielle Schnittstelle angebunden?
Meine beiden Messgeräte sind nämlich seriell angebunden.
Kurz zur Info wie das bei mir ablief:
pi@fhem /usr/local/bin $ mbus-serial-scan /dev/ttyUSB1
Found a M-Bus device at address 1
Found a M-Bus device at address 10
Abfragen kann man es nun z.B. so:
pi@fhem /usr/local/bin $ mbus-serial-request-data -b 300 /dev/ttyUSB1 10
<MBusData>
<SlaveInformation>
<Id>52780535</Id>
<Manufacturer>INV</Manufacturer>
<Version>64</Version>
<ProductName></ProductName>
<Medium>Water</Medium>
<AccessNumber>186</AccessNumber>
<Status>00</Status>
<Signature>0000</Signature>
</SlaveInformation>
<DataRecord id="0">
<Function>Instantaneous value</Function>
<Unit>Fabrication number</Unit>
<Value>52780535</Value>
<Timestamp>2017-10-31T20:50:38</Timestamp>
</DataRecord>
<DataRecord id="1">
<Function>Instantaneous value</Function>
<Unit>Volume (m m^3)</Unit>
<Value>164059</Value>
<Timestamp>2017-10-31T20:50:38</Timestamp>
</DataRecord>
</MBusData>
Mit mbus-tcp-request-data sollte es analog funktionieren, nur dass Du hier halt IP/Port angibst, anstatt die serielle Schnittstelle und das Gerät.
Hallo daubsi,
ich habe hier zwei M-Bus Feldgeräte (1x Wechselstromzähler, 1x Wärmemengenzähler) an einem Relay PW20 angeschlossen. Dieser ist an einem Relay Seriell/TCP Wandler angeschlossen und soll nun an Port 1001 im IP Netzwerk Daten zur Verfügung stellen. Gefunden werden die beiden M-Bus Devices an Adresse 1 und 2. Werte kann ich allerdings keine abfragen, da offensichtlich die libmbus libary auf dem RasPi3 noch nicht richtig installiert wurde. Und genau hier bräuchte ich Hilfe. Wie installiere ich die Libary auf dem Raspberry richtig, damit ich alle Kommandos für seriell und TCP ausführen kann?
Kannst Du mir hierbei helfen?
Garf
Hallo,
ich weiß nicht wie die TCP Variante funktioniert, aber wenn Du mal schreibst was für ein Fehler kommt bzw. Warum Du denkst dass etwas nicht passt, können wir mal schauen was man tun kann...
Hi,
so der libmbus funktioniert nun wie er soll. Ich habe die folgenden Kommandos noch durchgeführt:
Zitat./configure
make
make install
Bei der Eingabe für die Datenabfrage muss man bei Verwendung von Copy und Paste darauf achten den Port
1001 einzugeben. Im Beispiel von rscada hat sich da offensichtlich ein Tippfehler eingeschlichen.
Zitatmbus_request_data 192.168.0.100 10001 1
Jetzt bekomme ich auch die Daten für die beiden Feldgeräte ausgelesen.
Beispiel für M-Bus Adresse 1:
pi@raspberrypi:~ $ mbus-tcp-request-data 192.162.170.3 1001 1
<MBusData>
<SlaveInformation>
<Id>93</Id>
<Manufacturer>SBC</Manufacturer>
<Version>35</Version>
<ProductName></ProductName>
<Medium>Electricity</Medium>
<AccessNumber>5</AccessNumber>
<Status>00</Status>
<Signature>0000</Signature>
</SlaveInformation>
<DataRecord id="0">
<Function>Instantaneous value</Function>
<Unit>Energy (10 Wh)</Unit>
<Value>0</Value>
<Timestamp>2017-11-01T05:18:41</Timestamp>
</DataRecord>
<DataRecord id="1">
<Function>Instantaneous value</Function>
<Unit>Energy (10 Wh)</Unit>
<Value>0</Value>
<Timestamp>2017-11-01T05:18:41</Timestamp>
</DataRecord>
<DataRecord id="2">
<Function>Instantaneous value</Function>
<Unit> V</Unit>
<Value>235</Value>
<Timestamp>2017-11-01T05:18:41</Timestamp>
</DataRecord>
....Wie und womit kann ich die Daten nun weiter verarbeiten?
Werden die Daten auch als xml File irgendwo abgelegt?
Am liebsten würde ich die Daten mit NodeRed weiterverarbeiten. Leider findet man in Deutschland so gut wie keine User, die mit NodeRed arbeiten.
Garf
Hi daubsi,
nur um sicher zu gehen: die libmbus muss installiert und lauffähig sein, d.h. es muss auf einem Linux-basierten System laufen, richtig?
Mein FHEM läuft auf Windows :-X und ich frage mich, ob ich das hier überhaupt zum Laufen bekommen würde.
Bei mir steht ein Wasserzählerwechsel an und ich könnte einen mit mBus und Impuls-Schnittstelle bekommen.
Es gäbe ja aber noch das wmBus-Modul, das über einen CUL laufen würde - den habe ich bei mir schon integriert.
Danke & Gruß
Spiff.
Hi,
klar die Libs brauchts weil ich ja dann mit "mbus-fetch-serial" etc. die eigentlichen Werte auslese.
Wenn Du es schaffst die Lib unter Windows zu kompilieren (sollte grundsätzlich denkbar sein), würde es vermutlich auch unter Windows laufen!
Ist halt leider schon uralt die Lib, daher fürchte ich wird die nicht mehr weiter entwickelt...
VG
Markus
Alles klar, danke!
Hallo zusammen,
ich wollte die Daten von meinem WMZ über MBus auslesen um sie den in FHEM 8) darzustellen und verarbeiten. Auf der Suche nach einen kostengünstigen Pegelwandler bin ich irgendwann auf diesen MBus Master mit USB-Schnittstelle aufmerksam geworden.
https://de.aliexpress.com/item/Industrielle-USB-zu-MBUS-host-USB-MBUS-meter-lesen-kommunikation-USB-versorgung-10-lasten/32897415863.html (https://de.aliexpress.com/item/Industrielle-USB-zu-MBUS-host-USB-MBUS-meter-lesen-kommunikation-USB-versorgung-10-lasten/32897415863.html)
Nach tagelangem Warten ist das gute Stück irgendwann aus China angekommen und konnte in Betrieb genommen werden. Das Teil mach was es soll und funktioniert auch mit der Originalsoftware Software meines WMZ zusammen. Durch das von daubsi veröffentliche Modul ( ;) Vielen Dank!) und kleinen Anpassungen für meinem WMZ war die Integration in FHEM sehr leicht. ;D
VG
Martin
Hallo,
ich habe bisher einen Wasserzähler von Sensus installiert, eine HRI B4 .
Das hat mit dem MBus super funktioniert.
Nun hat unser Wasserversorger eine neue Wasseruhr , Diehl Hydrus 171A/B installiert. Auch mit MBus.
Nun funktioniert aber mein bisheriges Skript nicht mehr.
Hat vielleicht jemand schon ein funktionierendes Skript für diese Wasseruhr erstellt?
LG Rudi
Hallo hier noch das Ergebnis vom Aufruf
/usr/local/bin/mbus-serial-request-data -b 2400 /dev/ttyUSB0 1
<SlaveInformation>
<Id>65369736</Id>
<Manufacturer>HYD</Manufacturer>
<Version>149</Version>
<ProductName></ProductName>
<Medium>Water</Medium>
<AccessNumber>232</AccessNumber>
<Status>00</Status>
<Signature>3727</Signature>
</SlaveInformation>
<DataRecord id="0">
<Function>Instantaneous value</Function>
<Unit>Volume (m m^3)</Unit>
<Value>264</Value>
<Timestamp>2019-11-14T17:48:31</Timestamp>
</DataRecord>
<DataRecord id="1">
<Function>Instantaneous value</Function>
<Unit>Volume (m m^3)</Unit>
<Value>257</Value>
<Timestamp>2019-11-14T17:48:31</Timestamp>
</DataRecord>
<DataRecord id="2">
<Function>Instantaneous value</Function>
<Unit>Volume ( m^3)</Unit>
<Value>0</Value>
<Timestamp>2019-11-14T17:48:31</Timestamp>
</DataRecord>
<DataRecord id="3">
<Function>Instantaneous value</Function>
<Unit>Volume ( m^3)</Unit>
<Value>257</Value>
<Timestamp>2019-11-14T17:48:31</Timestamp>
</DataRecord>
<DataRecord id="4">
<Function>Instantaneous value</Function>
<Unit>Unknown (VIF=0x79)</Unit>
<Value>546381567657134183</Value>
<Timestamp>2019-11-14T17:48:31</Timestamp>
</DataRecord>
</MBusData>
Lg Rudi
Hallo,
ganz blöde Frage von mir:
Habe seit ein paar Tagen nen Sensus Modul auf meinem Wasserzähler. Scheint mbus zu sein. Wie bindet man das Gerät elektrisch in fhem ein. Mein fhem läuft auf einem pi4. Gibt es einfache USB Adapter, oder was braucht man minimal für die elektrische Koppliung?
Danke
Spartacus.
Du brauchst ein MBUS Master z.B. KH-TTL-M5 (https://www.aliexpress.com/item/33001106212.html?spm=a2g0o.productlist.0.0.35c7192aYzzqie&algo_pvid=72d58bd7-5b46-42a7-ad1b-3715301c76c6&algo_expid=72d58bd7-5b46-42a7-ad1b-3715301c76c6-8&btsid=ed163e6d-57d6-4c65-8865-54833b12e45d&ws_ab_test=searchweb0_0,searchweb201602_1,searchweb201603_53).
Entweder dieses am UART des Raspi anschliessen oder ein USB TTL Kabel (https://www.aliexpress.com/item/32669054489.html?spm=a2g0o.productlist.0.0.7d4b763elZnzyx&algo_pvid=9bc9f29d-93d0-4cfe-aad4-e63d99f50bb1&algo_expid=9bc9f29d-93d0-4cfe-aad4-e63d99f50bb1-13&btsid=5280ea6a-b6fb-41d6-a560-593c45160d67&ws_ab_test=searchweb0_0,searchweb201602_1,searchweb201603_53)
Zusätzlich brauchst du noch ein 24V Netzteil für den MBUS Master
Hi,
Besten Dank für die Antwort. Dan werde ich mir das mal beschaffen.
Christian
Hallo daubsi,
in deinem Eröffnungsbeitrag schreibst du dass du den Code für die Integration in FHEM angehängt hast. Er fehlt jedoch.
ich habe das Problem, dass ich nicht weiß wie ich die ausgelesenen Daten (mit "mbus-serial-request-data -b 2400 /dev/ttyUSB0 0") in FHEM integrieren kann.
Kannst du den Code bitte nochmals veröffentlichen?
Danke
Gruß Uli
Habe jedoch jetzt das zip-File gefunden. Werde mich mal damit beschäftigen.
Folgendes Problem:
Ich habe jetzt nach der Anleitung von daubsi die MBus Abfrage in FHEM integriert jedoch erhalte ich keine Werte sondern nur Datum und Uhrzeit.
Wenn ich mit Putty direkt den MBus Abfrage (mbus-serial-request-data -b 2400 /dev/ttyUSB1 1) erhalte ich alle Werte.
Anbei die "RAW Definition"
defmod LandisGyr MBus ttyUSB0 0 /usr/local/bin/GetLandisGyr.sh
setstate LandisGyr ENERGY: POWER: RETURN: FORWARD: FLOWPERHOUR: VOLUME:
setstate LandisGyr 2021-11-14 20:34:18 ENERGY
setstate LandisGyr 2021-11-14 20:34:18 FLOWPERHOUR
setstate LandisGyr 2021-11-14 20:34:18 FORWARD
setstate LandisGyr 2021-11-14 20:34:18 POWER
setstate LandisGyr 2021-11-14 20:34:18 RAW SERIAL:,VENDOR:,PRODUCT/V:,REQUESTS:,POWER:/V,FLOWPERHOUR:/V,VOLUME:/V,ENERGY:/V,FORWARD:/V,RETURN:/V,DIFF:
setstate LandisGyr 2021-11-14 20:34:18 RETURN
setstate LandisGyr 2021-11-14 20:34:18 VOLUME
Was kann die Ursache sein?
Wohin werden denn die Daten geschrieben? Muss da vielleicht eine Datei oder Verzeichnis angelegt werden?
Hallo,
was für ein Gerät willst Du denn integrieren?
Versuch erstmal mit
/usr/local/bin/mbus-serial-request-data -b 300 <ttydevice> <mbusid>
überhaupt Daten zurück zu bekommen. Die MBusID ist entweder fest vergeben oder wurde Dir bei der Einrichtung gesagt - hoffe ich.
Dann musst Du aus dem XML die für Dich interessanten Felder rausparsen und als Key-Value Paare zurückgeben an FHEM:
Siehe mein Beispiel für das Auslesen des Wasserzählers:
/usr/local/bin/ReadHRIDataUnit.sh:
#!/bin/bash
DEVICE=`/home/pi/listUSB.sh | grep Prolific | cut -d " " -f 1 | head -1`
#DEVICE=/dev/ttyUSB2
#mbus-serial-request-data -b 300 $DEVICE 10 > /tmp/hridataunit
python3 /home/pi/ReadHRIDataUnitMBus.py -b 300 ${DEVICE} 10 > /tmp/hridataunit
if [ $? -ne 0 ]; then
sleep 10
python3 /home/pi/ReadHRIDataUnitMBus.py -b 300 ${DEVICE} 10 > /tmp/hridataunit
#/usr/local/bin/mbus-serial-request-data -b 300 $DEVICE 10 > /tmp/hridataunit
fi
serial=$(xmllint --xpath '//DataRecord[@id=0]/Value/text()' /tmp/hridataunit)
water=$(xmllint --xpath '//DataRecord[@id=1]/Value/text()' /tmp/hridataunit)
vendor=$(xmllint --xpath '//SlaveInformation/Manufacturer/text()' /tmp/hridataunit)
requests=$(xmllint --xpath '//SlaveInformation/AccessNumber/text()' /tmp/hridataunit)
echo VENDOR:$vendor,SERIAL:$serial,REQUESTS:$requests,LITERS:$water/V
rm /tmp/hridataunit
Wie Du siehst habe ich das inzwischen in ein Python Script ausgelagert, weil ich es gleich via MQTT als JSON Dokument auch weiterschicke und gar nicht mehr nur primär in FHEM importiere.
/home/pi/ReadHRIDataUnitMBus.py:
#!/usr/bin/env python3
import sys
import json
import paho.mqtt.client as mqtt
import xml.etree.ElementTree as ET
from mbus.MBus import MBus
address = sys.argv[4]
usbdevice = sys.argv[3] # "/dev/ttyUSB1"
mbus = MBus(device=usbdevice)
mbus.connect()
mbus.send_request_frame(int(address))
reply = None
try:
reply = mbus.recv_frame()
except:
sys.exit(1)
reply_data = mbus.frame_data_parse(reply)
xml = mbus.frame_data_xml(reply_data).strip()
print(xml)
mbus.frame_data_free(reply_data)
mbus.disconnect()
# MQTT it
#
tree = ET.ElementTree(ET.fromstring(xml))
timestamp = tree.findall(".//DataRecord[@id='1']/Timestamp")[0].text
water = int(tree.findall(".//DataRecord[@id='1']/Value")[0].text)
serialnumber = int(tree.findall(".//SlaveInformation/Id")[0].text)
manufacturer = tree.findall(".//SlaveInformation/Manufacturer")[0].text
accessnumber = int(tree.findall(".//SlaveInformation/AccessNumber")[0].text)
json_msg = { "manufacturer": manufacturer, "serial": serialnumber, "timestamp": timestamp, "value": water, "access": accessnumber }
msg = json.dumps(json_msg)
client = mqtt.Client()
client.connect("192.168.0.1", 1883, 60)
client.publish("mbus/hridataunit/state", msg)
client.disconnect()
Das FHEM Modul war mein erster Versuch sowas zu machen und ich gebe zu, ich habe keine Ahnung von PERL, daher habe ich es nur "irgendwie" reingekriegt, aber "schön ist anders".
FHEM führt das /usr/local/bin/ReadHRIDataUnit.sh aus, bekommt auf stdout die Key-Value-Paare und setzt dann die internen Variablen basierend da drauf.
Hallo Markus,
vielen Dank für deine Antwort.
Die Daten von meinem Engelmann Wärme-Zähler werden alle 60 s ausgelesen und im File landisgyr gespeichert
<MBusData>
<SlaveInformation>
<Id>4171317</Id>
<Manufacturer>EFE</Manufacturer>
<Version>0</Version>
<ProductName>Engelmann SensoStar 2</ProductName>
<Medium>Heat: Outlet</Medium>
<AccessNumber>179</AccessNumber>
<Status>00</Status>
<Signature>0000</Signature>
</SlaveInformation>
<DataRecord id="0">
<Function>Instantaneous value</Function>
<Unit>Fabrication number</Unit>
<Value>4171317</Value>
<Timestamp>2021-11-15T15:25:23</Timestamp>
</DataRecord>
<DataRecord id="1">
<Function>Instantaneous value</Function>
<Unit>Energy (kWh)</Unit>
<Value>2443</Value>
<Timestamp>2021-11-15T15:25:23</Timestamp>
</DataRecord>
<DataRecord id="2">
<Function>Instantaneous value</Function>
<Unit>Volume (m m^3)</Unit>
<Value>702175</Value>
<Timestamp>2021-11-15T15:25:23</Timestamp>
</DataRecord>
<DataRecord id="3">
<Function>Instantaneous value</Function>
<Unit>Power (W)</Unit>
<Value>2970</Value>
<Timestamp>2021-11-15T15:25:23</Timestamp>
</DataRecord>
<DataRecord id="4">
<Function>Maximum value</Function>
<Unit>Power (W)</Unit>
<Value>44381</Value>
<Timestamp>2021-11-15T15:25:23</Timestamp>
</DataRecord>
<DataRecord id="5">
<Function>Instantaneous value</Function>
<Unit>Volume flow (m m^3/h)</Unit>
<Value>955</Value>
<Timestamp>2021-11-15T15:25:23</Timestamp>
</DataRecord>
<DataRecord id="6">
<Function>Maximum value</Function>
<Unit>Volume flow (m m^3/h)</Unit>
<Value>3311</Value>
<Timestamp>2021-11-15T15:25:23</Timestamp>
</DataRecord>
<DataRecord id="7">
<Function>Instantaneous value</Function>
<Unit>Flow temperature (deg C)</Unit>
<Value>35</Value>
<Timestamp>2021-11-15T15:25:23</Timestamp>
</DataRecord>
<DataRecord id="8">
<Function>Instantaneous value</Function>
<Unit>Return temperature (deg C)</Unit>
<Value>32</Value>
<Timestamp>2021-11-15T15:25:23</Timestamp>
</DataRecord>
<DataRecord id="9">
<Function>Instantaneous value</Function>
<Unit>Temperature Difference (1e-2 deg C)</Unit>
<Value>269</Value>
<Timestamp>2021-11-15T15:25:23</Timestamp>
</DataRecord>
<DataRecord id="10">
<Function>Instantaneous value</Function>
<Unit>On time (days)</Unit>
<Value>399</Value>
<Timestamp>2021-11-15T15:25:23</Timestamp>
</DataRecord>
<DataRecord id="11">
<Function>Instantaneous value</Function>
<Unit>Time Point (time & date)</Unit>
<Value>2021-11-15T16:24:00</Value>
<Timestamp>2021-11-15T15:25:23</Timestamp>
</DataRecord>
<DataRecord id="12">
<Function>Instantaneous value</Function>
<Unit>Energy (kWh)</Unit>
<Value>0</Value>
<Timestamp>2021-11-15T15:25:23</Timestamp>
</DataRecord>
<DataRecord id="13">
<Function>Instantaneous value</Function>
<Unit>Volume (m m^3)</Unit>
<Value>0</Value>
<Timestamp>2021-11-15T15:25:23</Timestamp>
</DataRecord>
<DataRecord id="14">
<Function>Instantaneous value</Function>
<Unit>Time Point (date)</Unit>
<Value>2020-12-31</Value>
<Timestamp>2021-11-15T15:25:23</Timestamp>
</DataRecord>
<DataRecord id="15">
<Function>Instantaneous value</Function>
<Unit>Error flags</Unit>
<Value>0</Value>
<Timestamp>2021-11-15T15:25:23</Timestamp>
</DataRecord>
<DataRecord id="16">
<Function>Instantaneous value</Function>
<Unit>Model / Version</Unit>
<Value>5</Value>
<Timestamp>2021-11-15T15:25:23</Timestamp>
</DataRecord>
<DataRecord id="17">
<Function>Instantaneous value</Function>
<Unit>Energy (kWh)</Unit>
<Value>0</Value>
<Timestamp>2021-11-15T15:25:23</Timestamp>
</DataRecord>
<DataRecord id="18">
<Function>Instantaneous value</Function>
<Unit>Energy (kWh)</Unit>
<Value>0</Value>
<Timestamp>2021-11-15T15:25:23</Timestamp>
</DataRecord>
<DataRecord id="19">
<Function>Instantaneous value</Function>
<Unit>Energy (kWh)</Unit>
<Value>0</Value>
<Timestamp>2021-11-15T15:25:23</Timestamp>
</DataRecord>
<DataRecord id="20">
<Function>Instantaneous value</Function>
<Unit>Energy (kWh)</Unit>
<Value>0</Value>
<Timestamp>2021-11-15T15:25:23</Timestamp>
</DataRecord>
<DataRecord id="21">
<Function>Instantaneous value</Function>
<Unit>Volume (m m^3)</Unit>
<Value>0</Value>
<Timestamp>2021-11-15T15:25:23</Timestamp>
</DataRecord>
<DataRecord id="22">
<Function>Instantaneous value</Function>
<Unit>Volume (m m^3)</Unit>
<Value>0</Value>
<Timestamp>2021-11-15T15:25:23</Timestamp>
</DataRecord>
<DataRecord id="23">
<Function>Instantaneous value</Function>
<Unit>Volume (m m^3)</Unit>
<Value>0</Value>
<Timestamp>2021-11-15T15:25:23</Timestamp>
</DataRecord>
<DataRecord id="24">
<Function>Instantaneous value</Function>
<Unit>Volume (m m^3)</Unit>
<Value>0</Value>
<Timestamp>2021-11-15T15:25:23</Timestamp>
</DataRecord>
<DataRecord id="25">
<Function>Instantaneous value</Function>
<Unit>Volume (m m^3)</Unit>
<Value>0</Value>
<Timestamp>2021-11-15T15:25:23</Timestamp>
</DataRecord>
<DataRecord id="26">
<Function>Instantaneous value</Function>
<Unit>Volume (m m^3)</Unit>
<Value>0</Value>
<Timestamp>2021-11-15T15:25:23</Timestamp>
</DataRecord>
</MBusData>
Mein Problem ist dass ich die Daten nicht in mein FHEM nach deiner alten Anleitung hineinbekomme. Mein System läuft auf einem Raspi 3 und ich logge Temperaturen und Stromzähler (MQTT) seit ca 1 Jahr.
Geloggt wird auf einer MariaDB.
Meine Kenntnisse von Perl und Python sind sehr begrenzt und ich hoffe ich kann mit deiner Unterstützung das Problem lösen.
Gruß Uli
ZitatDann musst Du aus dem XML die für Dich interessanten Felder rausparsen und als Key-Value Paare zurückgeben an FHEM:
Siehe mein Beispiel für das Auslesen des Wasserzählers:
Hallo Markus,
ich glaube da liegt das Problem. Das rausparsen funktioniert nicht. Aber warum?
Ich bin mit deiner alten Lösung ganz zufrieden wenn das noch klappen würde.
Also bei mir klappts eindwandfrei...
Hab Dein XML von oben nach /tmp/landys gepackt
und mein Script (original /usr/local/bin/GetLandysGyr.sh) recycled nach
GetFHEM.sh
#!/bin/bash
diff=$(xmllint --xpath '//DataRecord[@id=8]/Value/text()' /tmp/landys)
energy=$(xmllint --xpath '//DataRecord[@id=2]/Value/text()' /tmp/landys)
ruecklauf=$(xmllint --xpath '//DataRecord[@id=7]/Value/text()' /tmp/landys)
vorlauf=$(xmllint --xpath '//DataRecord[@id=6]/Value/text()' /tmp/landys)
power=$(xmllint --xpath '//DataRecord[@id=4]/Value/text()' /tmp/landys)
flowperhour=$(xmllint --xpath '//DataRecord[@id=5]/Value/text()' /tmp/landys)
volume=$(xmllint --xpath '//DataRecord[@id=3]/Value/text()' /tmp/landys)
serial=$(xmllint --xpath '//SlaveInformation/Id/text()' /tmp/landys)
vendor=$(xmllint --xpath '//SlaveInformation/Manufacturer/text()' /tmp/landys)
product=$(xmllint --xpath '//SlaveInformation/ProductName/text()' /tmp/landys)
requests=$(xmllint --xpath '//SlaveInformation/AccessNumber/text()' /tmp/landys)
echo SERIAL:$serial,VENDOR:$vendor,PRODUCT:$product,REQUESTS:$requests,POWER:$power/V,FLOWPERHOUR:$flowperhour/V,VOLUME:$volume/V,ENERGY:$energy/V,FORWARD:$vorlauf/V,RETURN:$ruecklauf/V,DIFF:$diff
Wenn ich das nun ausführe bekomme ich:
pi@fhem:/tmp $ ./GetFHEM.sh
SERIAL:4171317,VENDOR:EFE,PRODUCT:Engelmann SensoStar 2,REQUESTS:179,POWER:44381/V,FLOWPERHOUR:955/V,VOLUME:2970/V,ENERGY:702175/V,FORWARD:3311/V,RETURN:35/V,DIFF:32
Bei Dir nicht? xmllint ist aber installiert oder?
Ja, xmllint ist installiert.
Das war zunächst auch meine Vermutung dass die Datei fehlt oder nicht gefunden wird.
Wo muss die eigentlich gespeichert sein?
bei mir ist sie jetzt an 4 Stellen gespeichert (habe sie probehalber mehrfach kopiert und abgespeichert da es von Anfang an nicht funktioniert hat)
/xmllint
/bin/xmllint
/usr/local/bin/xmllint
/usr/local/bin/Daten/xmllint
/usr/share/bash-completion/completions/xmllint
Gruß Uli
Als Anhang habe ich einen Screenshot von meiner FHEM Installation angehängt.
Fehlt da vielleicht etwas?
Hallo Geisha,
ja da fehlt was...
Ich habe seit über einem Jahr 4 MBus Zähler laufen, alles ohne Probleme.
Anbei eine Grafik, wie es bei mir aussieht und eine Raw Definition.
defmod ZaehlerBrauchwasser MBus /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0 13 /usr/local/bin/GetLandisGyr13.sh
attr ZaehlerBrauchwasser comment Einbindung MBUS-Slave by-ID in den Scripten Get*.sh:\
/usr/local/bin/mbus-serial-request-data -b 9600 /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0 13 > /tmp/landisgyr13\
\
gem: https://wiki.fhem.de/wiki/Mehrere_USB-Ger%C3%A4te_einbinden bzw. Datei in MBUS/MBus auf IoT2050_1\
attr ZaehlerBrauchwasser event-min-interval ENERGY:14400,FORWARD:14400,POWER_kW:14400,RETURN:14400
attr ZaehlerBrauchwasser event-on-change-reading ENERGY,FORWARD,POWER_kW,RETURN,
attr ZaehlerBrauchwasser icon scene_bath
attr ZaehlerBrauchwasser interval 60
attr ZaehlerBrauchwasser mbusId 13
attr ZaehlerBrauchwasser readingsWatcher 300,,ENERGY
attr ZaehlerBrauchwasser room Heizung
attr ZaehlerBrauchwasser stateFormat Energie: ENERGY kWh, Leistung: POWER_kW kW <br/>\
Durchfluss: VOLUME_M3 m³, Durchfluss: FLOWPERHOUR l/h \
<div style='color:red'>Vorlauf: FORWARD °C <div style='color:blue'>Rücklauf: RETURN °C
attr ZaehlerBrauchwasser userReadings POWER_kW { ReadingsVal($name,"POWER", 0)/10;;;;}, \
VOLUME_M3 { ReadingsVal($name,"VOLUME", 0)/10;;;;},\
POWER_kW_AV { movingAverage($name,"POWER_kW",1800);;;;},
setstate ZaehlerBrauchwasser RETURN:39 FLOWPERHOUR:723 VOLUME:56771 ENERGY:769 FORWARD:38 POWER:9
setstate ZaehlerBrauchwasser 2021-11-15 22:10:37 ENERGY 769
setstate ZaehlerBrauchwasser 2021-11-15 22:10:37 FLOWPERHOUR 723
setstate ZaehlerBrauchwasser 2021-11-15 22:10:37 FORWARD 38
setstate ZaehlerBrauchwasser 2021-11-15 22:10:37 POWER 9
setstate ZaehlerBrauchwasser 2021-11-15 22:10:37 POWER_kW 0.9
setstate ZaehlerBrauchwasser 2021-11-15 22:10:37 POWER_kW_AV 1.316
setstate ZaehlerBrauchwasser 2021-11-15 22:10:37 RAW SERIAL:70107227,VENDOR:LUG,PRODUCT:Landis &; Gyr Ultraheat UH50,REQUESTS:33,POWER:9/V,FLOWPERHOUR:723/V,VOLUME:56771/V,ENERGY:769/V,FORWARD:38/V,RETURN:39/V,DIFF:11
setstate ZaehlerBrauchwasser 2021-11-15 22:10:37 RETURN 39
setstate ZaehlerBrauchwasser 2021-11-15 22:10:37 VOLUME 56771
setstate ZaehlerBrauchwasser 2021-11-15 22:10:37 VOLUME_M3 5677.1
setstate ZaehlerBrauchwasser 2021-05-16 14:16:38 ZaehlerBrauchwasser_ENERGY_EnergyYearLast 0
setstate ZaehlerBrauchwasser 2021-11-15 22:10:37 statPOWER_kWDay Min: 0.0 Avg: 1.1 Max: 5.0
setstate ZaehlerBrauchwasser 2021-11-15 22:10:37 statPOWER_kWDayAvg 1.1
setstate ZaehlerBrauchwasser 2021-11-14 23:59:55 statPOWER_kWDayAvgLast 1.1
setstate ZaehlerBrauchwasser 2021-11-14 23:59:55 statPOWER_kWDayLast Min: 0.0 Avg: 1.1 Max: 4.8
setstate ZaehlerBrauchwasser 2021-11-15 22:10:37 statPOWER_kWDayMax 5.0
setstate ZaehlerBrauchwasser 2021-11-14 23:59:55 statPOWER_kWDayMaxLast 4.8
setstate ZaehlerBrauchwasser 2021-11-15 22:10:37 statPOWER_kWHour Min: 0.1 Avg: 1.0 Max: 4.5
setstate ZaehlerBrauchwasser 2021-11-15 22:10:37 statPOWER_kWHourAvg 1.0
setstate ZaehlerBrauchwasser 2021-11-15 21:59:55 statPOWER_kWHourAvgLast 1.1
setstate ZaehlerBrauchwasser 2021-11-15 21:59:55 statPOWER_kWHourLast Min: 0.0 Avg: 1.1 Max: 4.5
setstate ZaehlerBrauchwasser 2021-11-15 22:10:37 statPOWER_kWHourMax 4.5
setstate ZaehlerBrauchwasser 2021-11-15 21:59:55 statPOWER_kWHourMaxLast 4.5
setstate ZaehlerBrauchwasser 2021-11-15 22:10:37 statPOWER_kWMonth Min: 0.0 Avg: 0.3 Max: 25.1
setstate ZaehlerBrauchwasser 2021-11-15 22:10:37 statPOWER_kWMonthAvg 0.3
setstate ZaehlerBrauchwasser 2021-09-30 23:59:55 statPOWER_kWMonthAvgLast 0.0
setstate ZaehlerBrauchwasser 2021-09-30 23:59:55 statPOWER_kWMonthLast Min: 0.0 Avg: 0.0 Max: 45.6
setstate ZaehlerBrauchwasser 2021-11-15 22:10:37 statPOWER_kWMonthMax 25.1
setstate ZaehlerBrauchwasser 2021-09-30 23:59:55 statPOWER_kWMonthMaxLast 45.6
setstate ZaehlerBrauchwasser 2021-11-15 22:10:37 statPOWER_kWYear Min: 0.0 Avg: 0.1 Max: 45.6 (since: 2021-02-26_11:17:10 )
Ich kommen heute nicht mehr dazu, habe mir aufgeschrieben, wie ich es zum Laufen gebracht habe.
Schick ich dir morgen.
Hier mein Geschmiere.
(Vermutlich merkt man, dass ich kein Linux-Profi bin).
Läuft bei mir auf einem Siemens IOT2050, da musste ich libmbus (auf Github gibt es die Version 0.9) selbst compilieren.
ZitatWenn ich das nun ausführe bekomme ich:
Code: [Auswählen]
pi@fhem:/tmp $ ./GetFHEM.sh
SERIAL:4171317,VENDOR:EFE,PRODUCT:Engelmann SensoStar 2,REQUESTS:179,POWER:44381/V,FLOWPERHOUR:955/V,VOLUME:2970/V,ENERGY:702175/V,FORWARD:3311/V,RETURN:35/V,DIFF:32
Hallo Markus,
Hast du das in die Konsole eingegeben?
wenn ich das bei mir mache kommt folgendes:
pi@raspberrypi:~ $ /tmp $ ./GetLandisGyr.sh
-bash: /tmp: Ist ein Verzeichnis
Hallo lin_win,
vielen Dank für deine Antwort.
Das Auslesen meines Wärmezählers klappt ja. Jede Minute wird er abgefragt und in die Datei landisgyr geschrieben.
Mein Problem ist dass die Umwandlung des xml files mit dem Code von daubsi nicht klappt und ich deshalb in FHEM keine Werte bekomme.
Hallo,
schau bitte nochmal in meinen Beitrag oben.
Zitat von: daubsi am 15 November 2021, 18:18:13
Also bei mir klappts eindwandfrei...
Hab Dein XML von oben nach /tmp/landys gepackt
und mein Script (original /usr/local/bin/GetLandysGyr.sh) recycled nach
GetFHEM.sh
#!/bin/bash
diff=$(xmllint --xpath '//DataRecord[@id=8]/Value/text()' /tmp/landys)
energy=$(xmllint --xpath '//DataRecord[@id=2]/Value/text()' /tmp/landys)
ruecklauf=$(xmllint --xpath '//DataRecord[@id=7]/Value/text()' /tmp/landys)
vorlauf=$(xmllint --xpath '//DataRecord[@id=6]/Value/text()' /tmp/landys)
power=$(xmllint --xpath '//DataRecord[@id=4]/Value/text()' /tmp/landys)
flowperhour=$(xmllint --xpath '//DataRecord[@id=5]/Value/text()' /tmp/landys)
volume=$(xmllint --xpath '//DataRecord[@id=3]/Value/text()' /tmp/landys)
serial=$(xmllint --xpath '//SlaveInformation/Id/text()' /tmp/landys)
vendor=$(xmllint --xpath '//SlaveInformation/Manufacturer/text()' /tmp/landys)
product=$(xmllint --xpath '//SlaveInformation/ProductName/text()' /tmp/landys)
requests=$(xmllint --xpath '//SlaveInformation/AccessNumber/text()' /tmp/landys)
echo SERIAL:$serial,VENDOR:$vendor,PRODUCT:$product,REQUESTS:$requests,POWER:$power/V,FLOWPERHOUR:$flowperhour/V,VOLUME:$volume/V,ENERGY:$energy/V,FORWARD:$vorlauf/V,RETURN:$ruecklauf/V,DIFF:$diff
Wenn ich das nun ausführe bekomme ich:
pi@fhem:/tmp $ ./GetFHEM.sh
SERIAL:4171317,VENDOR:EFE,PRODUCT:Engelmann SensoStar 2,REQUESTS:179,POWER:44381/V,FLOWPERHOUR:955/V,VOLUME:2970/V,ENERGY:702175/V,FORWARD:3311/V,RETURN:35/V,DIFF:32
Bei Dir nicht? xmllint ist aber installiert oder?
Da habe ich Dir das dummy script /tmp/GetFHEM.sh ja reingepastet. Es dient ja nur erstmal dazu festzustellen, wo das Problem bei Dir liegt.
Leg die Datei mit dem Inhalt an, kopier Dir das XML nach /tmp/landys und führ das GetFHEM.sh dann aus (chmod 755 GetFHEM.sh nicht vergessen...). Wenn dann die Ausgabe mit SERIAL, VENDOR, ... mit Werten wie bei mir oben kommt ist schon mal dieser Part in Ordnung. Wenn nicht, gibt es ein Problem mit dem xmllint Tool.
Hallo Markus,
danke für die ausführliche Anleitung jedoch kriege ich es immer noch nicht hin.
Habe die 2 Dateien erstellt im tmp Ordner.
Habe chmod ausgeführt.
Beim ausführen von GetFHEM.sh kommt die Meldung "Kommando nicht gefunden.
Siehe die angehängten Screenshots
Hallo Markus,
hab jetzt die Abfrage erfolgreich durchgeführt aber das Resultat ist das gleiche. Die Werte fehlen. Siehe Screenshot der Konsole.
xmllint ist installiert in /usr/share/bash-completion/completions/xmllint mit den Rechten 0644.
Gruppe und Eigentümer ist root.
Hast du noch eine Idee warum es nicht funktioniert?
Hallo Markus,
ich habe die Raspian Version Buster.
Welche Version hast du und wo ist bei dir xmllint installiert?
Bei mir ist es standardmäßig in "/usr/share/bash-completion/completions/" installiert.
Wenn ich es an allen anderen Stellen wo ich es hinkopiert habe lösche wird es nicht gefunden.
Wenn ich es in /bin kopiere wird es gefunden aber es funktioniert nicht. Siehe angehängten Screenshot)
Mittlerweile bin ich überzeugt dass die vorhandene Datei xmllint nur eine Ergänzung ist.
Warum die dann den gleichen Namen hat ist mir jedoch nicht klar.
Werde nun mit der libxml2 versuchen xmllint zu installieren. Davor werde ich jedoch ein Backup meiner SD-Karte machen.
Ich möchte vermeiden das ich mir mein gut funktionierendes FHEM zerschiesse.
Kannst du trotzdem dein xmllint hier reinstellen damit ich es damit mal versuche. Und bitte auch sagen wo es gespeichert werden muss. Vielleicht hast du eine ältere Version. Meine ist vom Datum 01.03.2019
Hallo,
das hier sollte ausreichen:
pi@fhem:~ $ which xmllint
/usr/bin/xmllint
pi@fhem:~ $ dpkg -S /usr/bin/xmllint
libxml2-utils: /usr/bin/xmllint
pi@fhem:~ $ file /usr/bin/xmllint
/usr/bin/xmllint: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=d100a128488c03c0dd5528956abe4f7f5d48f21f, stripped
pi@fhem:~ $
Also einfach als root "apt-get install libxml2-utils" eingeben, und das sollte es dann gewesen sein.
Hallo Markus,
Vielen Dank für deine Hilfe.
Habe jetzt die libxml2-utils installiert und es funktioniert wie gewünscht.
Gruß Uli
Prima, das freut mich!
schon etwas länger her der letzte Beitrag in diesem Thread aber vl. kann mir ja jemand weiterhelfen.
Ich nutze das MBus Modul mit einem Engelmann Sensostar 2 U mit MBus Erweiterungsmodul.
Der Zähler lässt sich im Batteriemodus alle 120Sekunden abfragen, Werte erhalte ich auch über die .sh Datei und auch im FHEM Modul.
Aber irgendwie hat es den Anschein, dass das Modul relativ unbeeindruckt ist wenn man über das Attribut interval z.B. einen Abfragewert von 300 Sekunden vorgibt.
Die Readings aktualisieren sich in ungleichmäßigen Abständen, manchmal liegt zwischen einem erfolgreichen Lesevorgang und weiteren Readingsupdates nur wenige Sekunden bis dann keine Daten mehr angezeigt werden.
2022.09.04 18:47:38.382 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11408946) line 1.
2022.09.04 18:47:38.383 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11408947) line 1.
Failed to receive M-Bus response frame.
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
2022.09.04 18:48:08.377 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11409102) line 1.
2022.09.04 18:48:08.378 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11409103) line 1.
Failed to receive M-Bus response frame.
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
2022.09.04 18:49:38.402 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11409728) line 1.
2022.09.04 18:49:38.403 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11409729) line 1.
Failed to receive M-Bus response frame.
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
2022.09.04 18:49:50.497 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11409771) line 1.
2022.09.04 18:49:50.498 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11409772) line 1.
Failed to receive M-Bus response frame.
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
2022.09.04 18:50:08.419 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11409863) line 1.
2022.09.04 18:50:08.421 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11409864) line 1.
Failed to receive M-Bus response frame.
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
2022.09.04 18:51:39.887 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11410445) line 1.
2022.09.04 18:51:39.889 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11410446) line 1.
Failed to receive M-Bus response frame.
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
2022.09.04 18:51:44.222 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11410478) line 1.
2022.09.04 18:51:44.223 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11410479) line 1.
Failed to receive M-Bus response frame.
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
2022.09.04 18:53:34.202 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11411195) line 1.
2022.09.04 18:53:34.204 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11411196) line 1.
Failed to receive M-Bus response frame.
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
2022.09.04 18:53:39.842 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11411268) line 1.
2022.09.04 18:53:39.843 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11411269) line 1.
Failed to receive M-Bus response frame.
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
2022.09.04 18:54:08.511 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11411467) line 1.
2022.09.04 18:54:08.514 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11411468) line 1.
/opt/fhem/refresh_bj_bad_klein.sh: 1: /opt/fhem/refresh_bj_bad_klein.sh: !/bin/bash: not found
Failed to receive M-Bus response frame.
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
2022.09.04 18:55:21.530 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11411905) line 1.
2022.09.04 18:55:21.531 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11411906) line 1.
Failed to receive M-Bus response frame.
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
2022.09.04 18:55:34.621 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11411952) line 1.
2022.09.04 18:55:34.623 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11411953) line 1.
Failed to receive M-Bus response frame.
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
2022.09.04 18:55:40.062 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11412014) line 1.
2022.09.04 18:55:40.063 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11412015) line 1.
Failed to receive M-Bus response frame.
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
/tmp/landisgyr:1: parser error : Document is empty
^
2022.09.04 18:55:50.138 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11412032) line 1.
2022.09.04 18:55:50.140 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11412033) line 1.
18:56:09 dann wieder erfolgreich Werte
18:57:22 ebenfalls aber auch hier ist der Zeitstempel nicht wie gewünscht 130 Sekunden später, das Modul scheint mehr oder wenig beliebig die Daten abzufragen.
Greetz
Eldrik
Ich habe das interval auf 120 gestellt und habe im Normalfall auch alle 120 s einen Wert. Da ich mit event-on-change in einer MariaDb logge sind manchmal erst Werte nach 3 oder 4 min vorhanden.
Also der Meldung
2022.09.04 18:47:38.382 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11408946) line 1.
2022.09.04 18:47:38.383 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 11408947) line 1.
Failed to receive M-Bus response frame.
/tmp/landisgyr:1: parser error : Document is empty
nach, würde ich sagen die libmbus hat Probleme mit deinem Device zu sprechen. Der Rest sind dann Folgefehler, weil die Daten nicht geliefert wurden (und die man sicher besser handlen könnte).
danke für die Unterstützuing.
Ja die Fehler mit der MBus Kommunikation lagen wohl an dem USB to Serial Adapter, diesen habe ich heute ausgetauscht und die Busabfragen sind soweit stabil.
Mit dem Modul und Timings habe ich jetzt nicht weiter herumprobiert, da ich noch vor dem Austausch des Adapters auf eine Lösung umgeschwenkt bin, welche die MBus Teilnehmer per MQTT kommuniziert.
https://the78mole.de/taking-your-m-bus-online-with-mqtt/
Greetz
Eldrik
Uff... aber auch nicht schlampig der Preis... Ich dachte schon ich war mit meinem MBus Pegelwandler für den Haussicherungskasten für 80EUR (gebraucht) gut dabei :-o
Ich habe auch den USB - M-Bus Adapter von AliExpress und der Funktioniert bei mir einwandfrei. Hat 28 EUR gekostet.
Zitat von: eldrik am 04 September 2022, 18:59:38
Ich nutze das MBus Modul mit einem Engelmann Sensostar 2 U mit MBus Erweiterungsmodul.
Sorry wenn ich hier reingrätsche, könntest Du mir sagen wie Du den Engelmann eingebunden hast?
Muss bei nem Kumpel genau das gleiche machen. Engelmann mit mbus-USB Adapter.
Danke & Grüße
Frank
Musst diesen Thread durcharbeiten. Steht hier alles drin.
Was ist denn die konkrete Frage?
Hast du einen Bus Adapter?
Gruß Uli
Danke,
habe es heute endlich mal in FHEM reingebastelt.
Was ich nur noch gerne erreichen würde wäre im Shell script die Werte richtig umzurechnen.
Bei mir kommt z.B. für die Differenztemperatur 708 anstatt 7.08 an.
hat da jemand die Lösung für? Ich scheine gerade daran zu verzweifeln. :-)
Ist bei mir genauso aber ich kann damit leben.
->> Für die "Suchenden" die die derzeit aktuelle Version libmbus 0.9.0 installieren möchten...... :D:
Die folgenden CLI-Eingaben (per / in einem bash script) habe ich für die Installierung der aktuellen libmbus 0.9.0 library von https://github.com/rscada/libmbus (https://github.com/rscada/libmbus) auf einem RPI genutzt;
#!/bin/bash
echo Starting to install MBus Library
sudo apt-get install git
sudo apt-get install libtool
sudo apt-get install autoconf
sudo apt-get install cmake
sudo apt-get install build-essential
git clone https://github.com/rscada/libmbus
cd libmbus
sudo ./build.sh
sudo ./configure
sudo make
sudo make check
sudo make install
sudo make installcheck
sudo make clean
cd /
cd usr/local/bin
sudo ldconfig
echo Finished
So sollte sichergestellt sein das alle notwendigen Update und Voraussetzung geschaffen worden sind das es auch "klappt". ;)
Gruß
300P