« Heizung, Lüftung, Klima  |

KNV NIBE S1255 Modbus auslesen für Hausmasta - a klane Anleitung

Teilen: facebook    whatsapp    email
  •  kraweuschuasta
  •   Gold-Award
11.1.2023 - 30.5.2024
3 Antworten | 2 Autoren 3
5
8
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 WP WP [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

  •  ArthurF
27.5.2024  (#1)
Wenn ich den Verdichterstatus auslese (Reg. 1484) kommt die Zahl 20.
Aktuell ist die WP WP [Wärmepumpe] auf Sommerpause!
Hast Du Info welche Stati möglich sind und was diese bedeuten?

1
  •  kraweuschuasta
  •   Gold-Award
28.5.2024  (#2)
Hallo
Ich hab an USB stick angesteckt und mir die Registerbeschreibung rausgezogen und durchgewassert.
Und infos aus dem Mega Modbus thread hier auxh verwertet...
Lg

1
  •  kraweuschuasta
  •   Gold-Award
30.5.2024  (#3)
Hallo nochamal,
ich hab für den verdichterstatus (Ein/Aus) den Wert  1101 genommen...
VerStat=$(modpoll -a 1 -m tcp  -t3 -r 1101 -c 1 -1 -o 10 $NIBE_IP | tail -1)

LG

1



Beitrag schreiben oder Werbung ausblenden?
Einloggen

 Kostenlos registrieren [Mehr Infos]

Nächstes Thema: KWL: CO2 gesteuert oder reicht zeitliche Steuerung?