Das erste Problem ergibt sich aus der Definition von MaxLevelWest als int.
int ist zum Einen ein
Integer, die Zuweisung wird also
4 ergeben, zum Anderen ist
int ein
Primitive. Bitte nicht, openHAB mag keine Primitives, die Rule wird dadurch unnötig langsam.
Das zweite Problem ergibt sich aus der Verwendung des
Schlüsselwortes Number als Variablennamen
, es ist etwas irritierend, dass die Rule überhaupt funktioniert...
Es ist keine gute Idee, auf den Wert per
WaterLevelWestRaw.state zuzugreifen, denn niemand kann Dir garantieren, dass das Item zum Zeitpunkt der Ausführung der Rule noch den Wert hat, den es hatte, als die Rule getriggert wurde(!)
logInfo() benötigt zwingend zwei Strings als Argumente, von denen der erste String der Name des Loggers ist, der zweite String ist die eigentliche Meldung.
Außerdem frage ich mich, ob der Sensor bei Minimalstand tatsächlich 0.0 Volt liefert
Die korrekte Rule:
Code: Alles auswählen
val Number nMaxLevelWest = 4.6 // Maximalspannung des Sensors (volle Tonne)
val Number nMinLevelWest = 0.0 // Minimalspannung des Sensors (leere Tonne)
rule "Wasserstand Westen"
when
Item WaterLevelWestRaw changed
then
logInfo("waterlevel", "WaterLevelWestRaw: {}", newState)
val Number nLevel = ((newState as Number).floatValue - nMinLevelWest) * 100 / (nMaxLevelWest - nMinLevelWest)
logInfo("waterlevel", "Level berechnet: {}", nLevel)
WaterLevelWest.postUpdate(nLevel)
end
Du kannst nun auch die Minimalspannung definieren (im Code erst mal tatsächlich 0...)
Da Du den Rohwert gar nicht brauchst, wäre es allerdings sinnvoller, die Umrechnung im Link zum Item einzubetten. Kommt etwas darauf an, welche Version von openHAB Du verwendest. Unter openHAB4 z.B. so:
Du verlinkst WaterLevelWest direkt mit dem Channel, der WaterLevelWestRaw speist und gibst bei
Profile Script Rule DSL an. Im Feld
Thing to Item Transformation gibst Du die Zeile
Code: Alles auswählen
|((input as Number).floatValue - 0.0) * 100 / (4.6 - 0.0)
an (achte dabei auf die Pipe zu Beginn der Zeile, diese bedeutet, dass der nachfolgende Text Inline Code ist).
Die
0.0 musst Du natürlich jeweils durch die Minimalspannung ersetzen
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet