Drehstromzähler auslesen - Wärmepumpe

Natürlich könnt ich 1x täglich den Wert notieren, aber dazu bin ich zu faul und außerdem würd ich öfter vergessen. Also werde ich meinen SDM630 Drehstromzähler per Modbus auslesen.

Modbus

Modbus? Hä? Was isn das? Kannte ich vorher auch nicht..

kurz Wikipedia rezitiert: Das Modbus-Protokoll ist ein Kommunikationsprotokoll, das auf einer Client/Server-Architektur basiert. Es wurde 1979 von Gould-Modicon für die Kommunikation mit seinen speicherprogrammierbare Steuerungen ins Leben gerufen. In der Industrie hat sich der Modbus zu einem De-facto-Standard entwickelt, da es sich um ein offenes Protokoll handelt.

Aha na dann.

Zu meinem Glück können die NIBE S1255 Wärmepumpe und der SDM630 Drehstromzähler per Modbus angesteuert werden. Ich werd hier aber nur auf den SDM360 eingehen.


Was braucht ma

Es gibt einen ganzen Haufen fertiger Geräte, Steuerungen und Modbus Konverter, meist ziemlich teuer und eher industrielastig. Ich hab mich für einen Raspberry Pi entschieden und für einen RS485 USB Dongle. Das ist mehr oder Weniger eine Minimalbesetzung und erfordert zwar a Bissl Spielerei, aber schadet ja ned, wenn ich auch was dazulerne. Also ich habe verwendet:

  • Raspberry Pi 2 Model B Rev 1.1 (vorhanden)
  • USB zu RS485 Konverter SH-U10 Adapter mit CP2102 Chip
  • natürlich den SDM630 Drehstomzähler
  • 10" TFT Monitor für den Raspi (optional)


Hardware

Das Ganze ist recht schnell zusammengemankelt, 3 Drähte in den SDM630 === USB Dongle. Angesteckt. fertig. Das ist mein huschpfusch Versuchsaufbau.


Drehstomzähler Serielle Schnittstelle einstellen

Das SDM630 stromtechnisch anhängen, zum Testen hab ich nur L1 angeschlossen, hat auch funktioniert.

Um die RS485 Settings einzustellen, wie folgt vorgehen (ich hab 19200baud, no Parity, 1 Stoppbit genommen):


E lang drücken
[Passwort] eingeben
E lang drücken


Set Addr 001
pfeil runter
baud 19200
pfeil runter
parity NONE
pfeil runter
Stop 1
pfeil runter
mit U/I raus aus dem Menü


USB Dongle identifizieren

Der RS485 Adapter ist eigentlich Plug&Play fähig, allerdings muß ma rausfinden, als welches Gerät der Raspi den erkennt. Am Besten nach dem Anstecken in der Console eintippen:


dmesg

ergibt Ausgabe in etwa
[ 2901.376778] usb 4-2: new full-speed USB device number 4 using ohci-pci
[ 2901.572992] usb 4-2: New USB device found, idVendor=10c4, idProduct=ea60, bcdDevice= 1.00
[ 2901.573003] usb 4-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 2901.573009] usb 4-2: Product: CP2102 USB to UART Bridge Controller
[ 2901.573015] usb 4-2: Manufacturer: Silicon Labs
[ 2901.573020] usb 4-2: SerialNumber: 0001
[ 2901.696199] usbcore: registered new interface driver usbserial_generic
[ 2901.697910] usbserial: USB Serial support registered for generic
[ 2901.719590] usbcore: registered new interface driver cp210x
[ 2901.719622] usbserial: USB Serial support registered for cp210x
[ 2901.719691] cp210x 4-2:1.0: cp210x converter detected
[ 2901.730477] usb 4-2: cp210x converter now attached to ttyUSB0

Also wiss ma, daß das Device /dev/ttyUSB0 heißt.


Und die Softwär?

Da bin ich bissl haglich (heikel für die [von Geburt aus benachteiligt] nicht österreichisch Sprechenden), ich will nicht eine neue Hochsprache lernen müssen und diverse neue Programme etc installieren müssen. Ich möchte das ganz banal aus der BASH abfragen können.

Nach ziemlich lang andauernder Suche - die Meisten nehmen hier ein PERL script - hab ich dann doch noch was gefunden: modpoll

Das ist ein kleines tool, mit dem ma Modbus Geräte aus der BASH ansteuern kann. Super, nehm ich. Gibts übrigens für Windows und Linux.


kluge Info: BASH

BASH ist schreibt sich ähnlich wie DASH, das Waschmittel, ist aber was Anderes. Als Abkürzung für Bourne-again shell ists eine Mensch-Maschine-Schnittstelle mit der man dem Computer sagen kann, was er tun soll. Die BASH ist auf allen aktuellen UNIX oder Linux Computern - u.a. Raspberry Pi - mit dabei.

Wenn Ihnen die Schlagworte VI, Shellscript und Verzeichnistiefe etwas sagen, freut es mich, wenn sie meine kleine Anleitung weiterlesen.

Wenn nicht, packen Sie die Kompoenten wieder in die Schachteln ein, schenken sie dem Nachbarsbub und kaufen Sie sich einen Hamster.

(übrigens: das war eine IF-Abfrage in Textform...)


modpoll

Modpoll einrichten geht ganz gschwind in 2 Schritten:

1. Schritt

Das Ganze kommt praktisch per Download als modpoll.tgz, muß ma nur in ein Verzeichnis entpacken. 

2. Schritt

entweder vorm Aufruf oder ins Profil eintragen, damit beim Start geladen wird: 

export PATH=/opt/modpoll/arm-linux-gnueabihf :$PATH

Verzeichnis, in der die modpoll binaries liegen

Je nach Architektur das jeweilige Unterverzeichnis angeben, in meinem Fall halt ARM für den Raspberry Pi

export blabla ausführen zum Testen und schon gehts los:

mit modpoll -h bekommt ma die Hilfe angezeigt und wenn das funkt könnt ma gleich amal die bisher verbrauchte Energie auslesen:

modpoll -1 -b 19200 -s 1 -p none -m rtu -a 1 -r 343 -c 1 -f -t 3:float /dev/ttyUSB0

es kommt eine ganze Litanei zurück, aber unter Anderem die gewünschte Nutzinfo - Energie in kWh:

-- Polling slave...
[343]: 129.871994

wenn ma nur die Zahl ausgegeben haben will, muss ma a zweite Zeile hinten nachschießen

Etot=$(modpoll -1 -b 19200 -s 1 -p none -m rtu -a 1 -r 343 -c 1 -f -t 3:float /dev/ttyUSB0 | tail -1)

Etot=$(echo $Etot | egrep  -o '[0-9]{1,8}\.[0-9]{3}'); echo $Etot

was wird konkret da angestellt?

1. Zeile: vom modpoll Befehl wird mit tail -1 nur die letzte Zeile verwendet und in die Variable Etot geschrieben

2. Zeile: von der Ausgabe wird mittlels regular expression '[0-9]{1,8}\.[0-9]{3}' nur der Zahlenwert in die variable Etot geschrieben.

raus kommt dann nur: 129.871


So und derart kann ma jetzt alle möglichen Werte ausn SDM630 auslesen, per BASH aufbereiten und weiterverarbeiten.

Ich schick ma den Wert der verbrauchten Energie momentan 1x täglich per mail, irgendwann wirds amal in eine Influx DB geschossen. 


Ich hab den Raspberry Pi 2 verwendet, langt locker dafür.


geht alles per commandline in der BASH, ich find das genial.

kluge Info Energie

für die physikalischen und elektrischen Nacherbatzln, Energie hat als Einheit Kilowattstunden und ist das Produkt aus Leistung mal Zeit.

Paxisbeispiel: 10Stk 100W Glühbirnen leuchten eine Stunde lang => 10*100W * 1 Std = 1kWh

angepasstes aktuelles Praxisbeispiel: 100Stk 10W LED Lampen leuchten eine Stunde lang => 100*10W * 1 Std = 1kWh

is eh watscheneinfach....