Gibt es mal kein Binding für ein Gerät, welches via modbus Werte anbietet, kann man im openHAB diese Werte dennoch lesen. Es braucht dazu halt ein bisschen mehr Aufwand, als wenn man schon ein Binding hätte.
Zuerst fügt man ein Modbus TCP Slave hinzu den man die IP-Adresse und den Port des Gerätes konfiguriert. In meinem Beispiel zeige ich wie das mit dem Kostal Smart Energy Meter geht um die Einspeisung ins Stromnetz abzulesen. Analog dazu kann man auch andere Werte lesen, wie den Netzbezug.
Damit die Werte regelmässig gelesen werden, fügt man einen Regular Poll ein. Als Bridge wählt man den Modbus TCP Slave. Der Wert Poll Interval gibt die Zeit in Millisekunden an die zwischen den Lesezyklen liegt. Bei 5000 wird also alle 5 Sekunden der Wert vom Modbus gelesen. Das Start-Register und die Länge muss man auch angeben.
Nun das Thing, welches den Wert im openHAB zur Verfügung stellt. Hier ist wichtig, die korrekte Read Address und Read Value Type einzutragen. Diese Angaben findet man in der Beschreibung des Geräteherstellers. In diesem Beispiel die KSEM Interface Modbus Beschreibung.
Das Item erstellt man als Value as Number.
Daher der Wert vom Modbus als Zehntel-Watt daherkommt, muss man diesen noch durch 10 Teilen damit man ganze Watt erhält. Dazu braucht es eine Transformation. Diese kann z.B. als JavaScript abgelegt werden, man muss aber die Transformation-Type dazu noch installieren unter Einstellungen-Transformations.
Die JavaScript-Datei legt man direkt im Verzeichnis /etc/openhab/transform ab. Hier ein Beispiel:
(function(inputData) { return parseFloat(inputData) / 10; })(input)