Dieser GIRA Homeserver Logikbaustein schreibt mittels Modbus TCP Werte in die Register der Geräte wie Wärmepumpen,
Wallboxen, etc.
Alle Mehrbit-Typen werden in HoldingRegister geschrieben. Hierbei wird für kleine Bit-Breiten automatisch FC06
verwendet. Für Multi-Byte Repräsentationen wird FC16 benutzt. Der Typ bool
wird in ein coil-Register geschrieben (
FC05). (Falls das Gerät immer FC16 verwenden möchte, so bitte unter "Special Options" nachlesen!)
Andere Typen gibt es beim Schreiben nicht. (Input- und Discrete Register kann man bei Modbus nicht beschreiben)
Unterstützt wird HS Firmware 4.12 - es könnte ab 4.7 funktionieren. Vorher / Älter wird es definitiv NICHT klappen!
Nummer | Datentyp | Default | Beschreibung |
---|---|---|---|
1 | Text | 127.0.0.1 | Die IP-Adresse für den Wechselrichter. Hostname aktuell nicht implementiert. |
2 | Zahl | 502 | Der TCP-Port für Modbus. |
3 | Zahl | 1 | Die Modbus Unit ID. |
4 | Zahl | 0 | Keep Alive aktivieren / deaktivieren. 1:an, 0:aus - Hilft, falls die Modbus-Schnittstelle die Anzahl der gleichzeitigen Zugriffe (pro IP) limitiert hat. |
5 | Zahl | 0 | Word Order bei Multi-Byte Elementen. Per default: LittleEndian. (0: LittleEndian, 1: BigEndian) |
6 | Zahl | 1 | Byte Order bei Multi-Byte Elementen. Per default: BigEndian. (0: LittleEndian, 1: BigEndian) |
7 | Zahl | 0 | Debug Modus aktiv (ACHTUNG: Bei Fehlern bricht der Baustein sofort ab. Produktion: auf 0 setzen!) |
8 | Zahl | -1 | Register 1: Modbus-Register in dezimal Darstellung. -1: Abfrage wird deaktiviert. |
9 | Text | uint16 | Register 1: Datentyp des Registers |
10 | Zahl | 0 | Register 1: Nummerischer Wert, der in das Register geschrieben werden soll |
12 | Text | - | Register 1: Text, der in das Register geschrieben werden soll (nur bei Type 'string') |
13 | Zahl | -1 | Register 2: Modbus-Register in dezimal Darstellung. -1: Abfrage wird deaktiviert. |
13 | Text | uint16 | Register 2: Datentyp des Registers |
14 | Zahl | 0 | Register 2: Nummerischer Wert, der in das Register geschrieben werden soll |
15 | Text | - | Register 2: Text, der in das Register geschrieben werden soll (nur bei Type 'string') |
16 | Zahl | -1 | Register 3: Modbus-Register in dezimal Darstellung. -1: Abfrage wird deaktiviert. |
17 | Text | uint16 | Register 3: Datentyp des Registers |
18 | Zahl | 0 | Register 3: Nummerischer Wert, der in das Register geschrieben werden soll |
19 | Text | - | Register 3: Text, der in das Register geschrieben werden soll (nur bei Type 'string') |
20 | Zahl | -1 | Register 4: Modbus-Register in dezimal Darstellung. -1: Abfrage wird deaktiviert. |
21 | Text | uint16 | Register 4: Datentyp des Registers |
22 | Zahl | 0 | Register 4: Nummerischer Wert, der in das Register geschrieben werden soll |
23 | Text | - | Register 4: Text, der in das Register geschrieben werden soll (nur bei Type 'string') |
Änderungen von Eingängen die keine Werte darstellen werden beim nächsten Wert berücksichtigt - führen aber NICHT zu einem neu-senden der bestehenden Werte.
Alle Ausgänge senden bei jedem Abruf den entsprechenden Wert -- unabhängig davon, ob dieser sich geändert hat oder nicht. Der Datentyp des KO, das mit dem Ausgang verbunden wird hängt vom Modbus-Register ab: Je nach Länge machen auch nur größere Genauigkeiten beim KO Sinn.
Nummer | Beschreibung |
---|---|
1 | Counter der erfolgreichen Schreibzugriffe insgesamt (muss verbunden werden. Kann ein internes Dummy-Objekt sein!) |
2 | Counter für fehlerhafte Schreibzugriffe insgesamt (Fehler werden nur ausgegeben (und ggf. dann abgebrochen) im Debug-Modus!) |
Folgende Datentypen werden unterstützt. Unbekannte Typen werden übersprungen!
Typ | Register-Anzahl | Mehrbit | Beschreibung |
---|---|---|---|
int8 | 1 | Ja | Vorzeichenbehafteten Wert aus: -128 - 127 |
uint8 | 1 | Ja | Vorzeichenlosen Wert aus: 0 - 255 |
int16 | 1 | Ja | Vorzeichenbehafteten Wert aus: -32.768 - 32.767 |
uint16 | 1 | Ja | Vorzeichenlosen Wert aus: 0 - 65.535 |
int32 | 2 | Ja | Vorzeichenbehafteten Wert aus: −2.147.483.648 - 2.147.483.647 |
uint32 | 2 | Ja | Vorzeichenlosen Wert aus: 0 - 4.294.967.295 |
int64 | 4 | Ja | Vorzeichenbehafteten Wert aus: −9.223.372.036.854.775.808 - 9.223.372.036.854.775.808 |
uint64 | 4 | Ja | Vorzeichenlosen Wert aus: 0 - 18.446.744.073.709.551.615 |
float32 | 2 | Ja | Gleitkommazahl mit einfacher Genauigkeit |
float64 | 4 | Ja | Gleitkommazahl mit doppelter Genauigkeit |
string | n | Ja | ASCII-Text, Länge bestimmt Register |
bool | 1 | Nein | Boolean, der in ein coil-Register geschrieben wird (bei Input Registern bitte ein uint verwenden!) |
Regulär werden alle typen in kleiner Schreibweise angegeben. Ab der Version 1.2 ist auch INT16
möglich.
In der Regel wird bei Modbus bei alle Mehrbit-Register unterschieden, ob man ein Register schreibt oder nur eins. Eins wird mit Functioncode 06 (FC6
) geschrieben, hingegen werden mehrere Register mit FC16
angewiesen. Manche Geräte weichen davon ab und wollen, dass auch einzelne Register mit Functioncode 16 geschrieben werden. Hierzu kann man diese Unterscheidung bei einzelnen Registern deaktivieren:
int16;fc16
Der umgekehrte Weg funktioniert nicht: int32;fc6
-- eine solche Verwendung bei Geräten wurde bisher auch noch nicht gesehen.
Eine Angabe von fc16
bei Multi-Registern schadet nicht, führt aber zu keiner Funktionsveränderung! (int32;fc16
)
Nur wenn Debug-Eingang gesetzt wurde - zur Vermeidung von Kollisionen bei mehrfacher Verwendung von Write-Bausteinen. Anders ausgedrückt: Nur einen Writer-Baustein in Debug setzen!
Der Logikbaustein zeigt auch die RAW-Werte und weitere interne Werte im Debug-Fenster des Homeservers an. Dort sind auch die letzten Fehler einzusehen:
- Homeserver hslist aufrufen: https://[HS IP]/hslist
- Listenschlüssel:
debug
, Username und Passwort von einem admin-User eingeben. - Unter HSL2.0 oder hs_modbusTCP_writer14185 die Fehler suchen oder die Werte überprüfen.
Wichtig: Im Falle eines Fehlers wird der Fehler unter Debug oder HSL2.0 mist Stacktrace ausgegeben. Der HS muss dann neugestartet werden. Für den produktiven Einsatz sollte Debug daher abgschaltet werden: Der Baustein versucht dann von Fehlern selbst zu recovern.
Es wird weder eine Haftung noch eine Gewährleistung übernommen. Für den Betrieb ist der Anlagenbetreiber bzw. Integrator verantwortlich.
- Der Sourcecode ist auf Github zu finden: hs_modbusTCP_writer
- Der Baustein wird im KNX-Forum diskutiert: Forum
- Download des Bausteins übers KNX-Forum möglich.
- Der Baustein wird unter der LGPL 2.1 frei für die private Nutzung zur Verfügung gestellt.
- Die Nutzung des Logikbausteins ist für Endverbraucher frei, wenn sie diese selbst und selbstständig in Betrieb nehmen und konfigurieren. - Integratoren haben eine angemessene Aufwandsentschädigung zu leisten. Diese kann beim Autoren angefragt werden.
- Freie Software heißt nicht freie Wartung & Support und geschieht auf freiwilliger Basis
- Es wird keine Gewährleistung noch Haftung für Schäden aus der Nutzung des Bausteins übernommen
- Er enthält folgende weiteren Libraries und Lizenzen
- pymodbus - Own License
- pyserial - BSD-3-Clause License
- six - MIT License