Inhaltsverzeichnis
M-Bus Controller
Der Mbus Controler dient zur Anbindung des Meter-Bus an den Volkszaehler
Standart M-Bus 2400Baud 8b even 1stop
möglich auch 300Baud 8b even 1stop oder selten 9600Baud 8b even 1stop
Vorraussetzungen
- M-Bus Zähler
- Serieller Pegelwandler
- PC oder ähnliches mit Perl mit Device::SerialPort Perl-Modul
Installation
Quellpaket https://wiki.volkszaehler.org/_media/software/controller/m-bus.zip herunterladen und entpacken und ausführbar machen.
wget https://wiki.volkszaehler.org/_media/software/controller/m-bus.zip
unzip m-bus.zip
cd m-bus
chmod +x install.sh
./install.sh
erzeugt einen Benutzer mbus und packt ihn in die Gruppe dialout damit er auf die Serielle Schnittstelle zugreifen kann. Im Anschluß kopiert das Skript die Dateien in die richtigen Pfade.
Es kann vorkommen das man einen Neustart machen muss damit der Neue Benutzer richtig erkannt wird
Konfiguration
Den Seriellen Pegelwandler an den PC anschließen
In der Datei /etc/mbus/mbusconf.pm
Einstellungen zum Port Baudrate etc. vornehmen, die Einstellungen sind dort mit # einkommentiert (die # entfernen!):
$mbusPort="/dev/messbus"; # or /dev/ttyS0 .. $vzURL="http://host.domain/volkszaehler/middleware.php/"; $mbusBaudrate=2400;''
In der Datei: /var/lib/mbus/vzold
werden Zählerstände gespeichert, weil der Volkszaehler z.Zt nur mit relativen Verbrauchswerten umgehen kann.
Jetzt auf dem Mbus nach Devices suchen.
./mbus-cmd --genserial
Fehlermöglichkeiten
- Serial
Je nach Installation kann die Installation verschiedener perl-Bibliotheken erforderlich sein. Das erkennt man daran, dass der mbus-cmd Befehl Fehlermeldungen ausgibt wie z.B.:
Can't locate Device/SerialPort.pm in @INC (@INC contains: /etc/perl
sucht man z.B. in Google nach dieser Fehlermeldung findet man schnell einen Hinweis, dass mit
apt-get install libdevice-serialport-perl
- LWP
Can't locate LWP.pm in @INC
apt-get install libwww-perl
- simple LWP
Can't locate LWP/simple.pm in @INC
perl -MCPAN -e'install "LWP::Simple"'
!dieser Befehl kompiliert auch weiter PM Files und könnte etwas länger dauern
- simple Lock
Can't locate LockFile/simple.pm in @INC
perl -MCPAN -e'install "LockFile::Simple"'
die entsprechende Bibliothek nachinstalliert werden muss. Wenn alles da ist, startet der Scan und die Seriellen Adressen werden in der Datei: /etc/mbus/serialno gespeichert.
Sicherstellen, das in diese Datei nur Root schreiben darf, aber mbus lesen kann.
Jedes M-Bus Device kann wiederum viele Zähler zurückliefen.
./mbus-cmd -print-mbusconf
Bekommt man eine Ausgabe aller Zähler
$vzUuid{"09999999-Fabriknummer"}="";# (09999999) $vzUuid{"09999999-Heizenergie"}="";# (00060958) $vzUuid{"09999999-Volumen"}="";# (11245.24) $vzUuid{"09999999-Fliessgeschwindigkeit"}="";# (1.534) ...
Jetzt Zähler anlegen, z.B. mit dem frontend
Diese Zeilen können nun mit der uuid in die bestehende mbusconf.pm übernommen werden, also z.B.:
$vzUuid{"09999999-Heizenergie"}="503ad3d0-18d4-11e1-9d30-8f7c5e0b88b1";# (00060958) $vzUuid{"09999999-Volumen"}="669bd360-18d4-11e1-8c33-055342b3cb21";# (11245.24) $vzUuid{"09999999-Fliessgeschwindigkeit"}="6c345080-18d4-11e1-8e07-7d37ae5b0848";# (1.534)
Tipp: Device Konfiguration mit udev
Durch das Anlegen einer Datei /etc/udev/rules.d/99-usb-serial.rules
mit ungefähr dem Inhalt:
SUBSYSTEM=="tty",ATTRS{idVendor}=="0403",ATTRS{idProduct}=="6001",ATTRS{serial}=="FTF4ADX9",OWNER="mbus",SYMLINK+="messbus"
(alles in einer Zeile!)
kann man dafür sorgen, das das richtige Device immer /dev/messbus
heißt und dem Benutzer mbus gehört. Dann muss das der mbus Benutzer auch nicht in die Gruppe dialout.
Die nötigen Werte für idVendor usw. erhält man mit:
udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0)
Test
<code>
su - mbus
./mbus-cmd –verbose
</code>
Ergibt eine Ausgabe der übertragenen Daten.
su - mbus ./mbus-cmd --sqlout
Alternativ auch Rohdaten möglich
su - mbus ./mbus-cmd --sqlrawout
Kann man alle Zählerstände in einer MySQL Syntax abfragen um zu testen, oder die Zählerstände nochmals zusätzlich zu speichern.
Regelmäßiger Aufruf im Cron
Sicherstellen, dass die Datei: /var/lib/mbus/vzold
auch im cron geschrieben werden darf, dazu
chmod 666 /var/lib/mbus/vzold
eingeben.
/etc/cron.d/mbus
:
*/3 * * * * mbus /usr/local/bin/mbus-cmd
Nun sollte der Cron alle 3 Minuten laufen, dass lässt sich nun anhand des Datums der Datei /var/lib/mbus/vzold
überprüfen.