Inline -> Das Script wird direkt übergeben. Das Script ist kurz genug (siehe ungetestete Zeile)
Soweit ich weiß, kannst Du bei Modbus innerhalb des Channels keine Transformation durchführen, deshalb muss die Transformation im Profile erfolgen.
Wenn Du über die UI konfigurierst, wählst Du DSL als Scriptsprache aus und schreibst die Codezeile (mit Pipe) in das to Item Script Feld. Über eine Items-Datei sähe das so aus (ohne Gewähr):
Code: Alles auswählen
Number:Power AkkuLoad "Akku Leistung" {channel="inChannel"[profile="transform:DSL",toItemScript="|if(parse.float(input)> 0 ) - parse.float(input)"],
channel="outChannel"[profile="transform:DSL",toItemScript="|if(parse.float(input)> 0 ) parse.float(input)"],
unit="W", stateDescription=""[pattern="%.3f kW"]}
Die Umbrüche hier nur wegen der Lesbarkeit, natürlich kannst Du das formatieren wie es Dir beliebt.
Da modbus meines Wissens selbst keine Unit unterstützt, muss die angegebene Unit der gelieferten Unit entsprechen. Im Pattern kannst Du aber jede passende Unit verwenden, d.h. die Ausgabe sollte automatisch korrekt sein. Das Widget dürfte unit-aware sein, weil die meisten Bindings inzwischen eine Unit liefern.
Wahlweise könntest Du die beiden Scripte natürlich auch in Dateien speichern und diese angeben, aber da es ja nur eine Zeile ist und Du im Zweifel zwei Scripte benötigst, ist das etwas umständlich.
openHAB5.0.3 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime - LXC, 4 Kerne, 3 GByte RAM)
Hostsystem Proxmox 9.1.2 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte