Mahlzeit,
nachdem ich mich jetzt gefühlte Millionen Stunden mit dem Grafflwere herumgespielt hab, hab ich ma gedacht ich bring das mal zu (virtuellem) Papier, vielleicht nützt es amal wem.
Was es nicht ist: Das Allheilmittel und Modbus Verbindung nach überall und zu allen auf dieser Welt verfügbaren Zielsystemen, unendlich in die technische Tiefe gehend
Was es ist: Eine kleine Anleitung, wie ma mit Wenig Aufwand Daten aus einer S1255 Wärmepumpe zumindest auslesen und ausgeben kann. Optional kann man dann "irgendwas" mit den Daten machen.
Voraussetzungen:
• S1X55 NIBE/KNV Wärmepumpe - no na...
• aktive Netzwerkverbindung
• alternativ Windows oder Linux Rechner
• Texteditor nach Wahl, idealerweise VI oder nano oder für Windows Klickiklackifuzzis halt an Grafischen....
Ich habs bei mir am LinuxMint Rechner gemacht, Raspberry PI2 funkt auch problemlos.
Warum Linux? Weil der Raspi mit Linux gscheiter zurecht kommt und weil ich mich in der Bash besser auskenn als in powershell.
=== Schritt 1 Modpoll ===
Ist ein freies Tool für Windows und Linux, u.A. für die Kommandozeile. Also woll ma das.
https://www.modbusdriver.com/modpoll.html Installiert ists ja gschwind unter Linux, einfach das .tgz runterladen und einem gscheiten verzeichnis (z.b. /opt/modpoll) entpacken
Konsole:
tar -zxvf modpoll-3.10.tgz
jetzt muss ma noch den modpoll- Pfad in die PATH Variable eintragen, im File .bashrc im home directory des users folgende Zeilen hinzufügen:
(Achtung Stolperfalle: je nach PC-Architektur sind die Verzeichnisse Unterschiedlich, für Raspi: arm-linux-gnueabihf, für intel PC: x86_64-linux-gnu)
Konsole:
vi ~/.bashrc
folgende beiden Zeilen eintragen (Pfad vorher kontrollieren)
# Path entry for modpoll
export PATH=$PATH:/opt/modpoll/x86_64-linux-gnu
.bashrc speichern und konsole zumachen und neu aufmachen
jetzt sollte mit modpoll -h aus jedem beliebigen Pfad die Hilfe angezeigt werden
=== Schritt 2 Modbus an der Wärmepumpe aktivieren ===
Im Menü 7.5.9 – Modbus TCP aktivieren
optional aber hilfreich: Modbus Register auf USB exportieren (siehe NIBE Handbuch)
das wars jetzt eigentlich schon, Einrichtung abgeschlossen.
Was jetz noch fehlt, ist die IP adresse der
WPWP [Wärmepumpe] zum Ansprechen, im Menü 3.1.13 kann ma die ablesen.
für unser Beispiel nehme ich die IP Adresse 192.168.1.11 und den Ersten Eintrag vom Modbus Register - den ich klugerweise vorher auf einen USB Stick exportiert hab.
Aktuelle Außenlufttemperatur (BT1)
Registertyp: MODBUS_INPUT_REGISTER
Register: 1
Divisor: 10
=== Schritt 3 Testen ===
also Konsole aufgemacht und eingetippt:
modpoll -a 1 -m tcp -t 3 -r 2 -c 1 -1 -o 1 192.168.1.11 (nicht irritieren lassen, für Modbusregister 1 muss ma R2 abfragen.....)
modpoll 3.10 - FieldTalk(tm) Modbus(R) Master Simulator
Copyright (c) 2002-2021 proconX Pty Ltd
Visit
https://www.modbusdriver.com for Modbus libraries and tools.
Protocol configuration: MODBUS/TCP, FC4
Slave configuration...: address = 1, start reference = 2, count = 1
Communication.........: 192.168.1.11, port 502, t/o 1.00 s, poll rate 1000 ms
Data type.............: 16-bit register, input register table
-- Polling slave...
[2]: 89
Da kommt der Divisionsfaktor 10 ins Spiel, es sind logischerweise nur 8,9° draussen und nicht 89°, den Output muss ma dann per Script anpassen.
=== Schritt 4 Minimal Bashscript für die Außentemperatur ===
idealerweise arbeitet man hier mit an grafischen Editor, besonders als Windows Klickiklackifuzzi. Bei mir heißt das shellscript modbus_nibe.sh
NIBE_IP="192.168.1.11" # Aktuelle Außenlufttemperatur (BT1) OutTemp=$(modpoll -a 1 -m tcp -t 3 -r 2 -c 1 -1 -o 10 $NIBE_IP | tail -1) # echo $OutTemp OutTemp=$(echo $OutTemp | egrep -o ' {1,8}[0-9]{1,5}') OutTemp=$(echo "scale=2; $OutTemp / 10" |bc) echo "OutTemp= $OutTemp" Erklärung dazu
der Code oben ist für ein Register bzw einen Wert!!
Die IP wird in die Variable NIBE_IP geschrieben und mit $NIBE_IP aufgerufen
Der Output des modpoll Befehls - [2]: 89 - wird in die variable OutTemp geschrieben, | tail -1 sagt dem befehl, daß nur die letzte Zeile verwendet weden soll
OutTemp=$(modpoll -a 1 -m tcp -t 3 -r 2 -c 1 -1 -o 10 $NIBE_IP | tail -1)
OutTemp=$(echo $OutTemp | egrep -o ' {1,8}[0-9]{1,5}')
in der Variable $OutTemp wird per Regular Expression nach Blanks gefolgt von 1-5 Zahlen gesucht, alles Andere ignoriert.
OutTemp=$(echo "scale=2; $OutTemp / 10" |bc)
in der Variable $OutTemp wird der Wert durch 0 dividiert
echo "Aktuelle Außenlufttemperatur (BT1) $OutTemp"
Ausgabe der Variable $OutTemp
Für die mir wichtig erscheinenden Werte - die Zeilen Oben müssen für jeden einzelnen Wert zusammengemankelt werden - kommt dann ungefähr sowas raus:
acer@Acerblau:~/Dokumente$ sh modbus_nibe.sh
20230110-210635 Script modbus_nibe.sh Version 0.0.13 started.
=============================================================
Aktuelle Außenlufttemperatur (BT1) 4.90
Vorlauf (BT2) 27.80
Rücklauf (BT3) 25.20
Brauchwasser, oben (BT7) 45.40
Brauchwasserbereitung (BT6) 41.80
Eintritt Wärmequellenmedium (BT10) 4.30
Austritt Wärmequellenmedium (BT11) 0.50
Mittlere Temperatur (BT1) 5.80
Volumenstrommesser (BF1) 12.20
Gradminuten -364.50
Verdichterfrequenz, Istwert 32.00
Verdichterfrequenz 32
Verdichter Aufnahmeleistung 334
Verdichterstarts 143
Gesamtbetriebszeit Verdichter 1844
Gesamtbetriebszeit Verdichter NUR BW 108
Gesamtbetriebszeit Verdichter NUR Heizung 1736
Verdichterstatus 1
Drehzahl Heizungsumwälzpumpe (GP1) 64
Drehzahl Wärmequellenpumpe (GP2) 35
Brauchwasser, einschl. interner ZH 391.50
Heizung, einschl. interner ZH 3247.80
Damit kann ma schon Einiges Anfangen und universell weiterverarbeiten. Ich werds in meine Influx Datenbank schießen und per Grafana auslesen.
Wer möchte kann gerne das Shellscript haben, werds natürlich noch weiterentwickeln....
LG Wolfgang
von
Notebook, Heizungsteufel, AndiM80, scarpej, EinHausinWien