2 Number item Verbinden zu einem (neg pos Werte)

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
udo1toni
Beiträge: 15241
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: 2 Number item Verbinden zu einem (neg pos Werte)

Beitrag von udo1toni »

Ja, das kommt davon...

Probiere es bitte mal so:

Code: Alles auswählen

Number:Power AkkuLoad "Akku Leistung" {channel="inChannel"[profile="transform:DSL",toItemScript="|if(Float::parseFloat(input)> 0 ) - Float::parseFloat(input)"],
                                       channel="outChannel"[profile="transform:DSL",toItemScript="|if(Float::parseFloat(input)> 0 )Float::parseFloat(input)"], 
                                       unit="W", stateDescription=""[pattern="%.3f kW"]} 
Falls der Channel eine Einheit mitliefert, wird auch das nicht korrekt funktionieren, falls aber keine Einheit geliefert wird, sollte es klappen.

Wenn die Einheit mit kommt, wäre dies hier möglich:

Code: Alles auswählen

Number:Power AkkuLoad "Akku Leistung" {channel="inChannel"[profile="transform:DSL",toItemScript="|if(Float::parseFloat(input.substring(0,input.length -2))> 0 ) - Float::parseFloat(input.substring(0,input.length -2))"],
                                       channel="outChannel"[profile="transform:DSL",toItemScript="|if(Float::parseFloat(input.substring(0,input.length -2))> 0 )Float::parseFloat(input.substring(0,input.length -2))"], 
                                       unit="W", stateDescription=""[pattern="%.3f kW"]} 
Zugegeben - das sieht nicht mehr so übersichtlich aus... ;) Es ginge auch in jeder anderen installierten Scriptsprache, wobei die unterschiedlichen Sprachen hier unterschiedliche Möglichkeiten bieten :)
Der Ausdruck

Code: Alles auswählen

Float::parseFloat(input.substring(0,input.length -2))
interpretiert den übergebenen String als Float Zahl, wobei die letzten zwei Zeichen des Strings abgeschnitten werden. Sollte als Einheit also mehr als (z.B.) kW übergeben werden (das müsste dann auch in die Unit des Items...), müsste man die Anzahl abgeschnittener Zeichen anpassen. Das Leerzeichen zwischen Zahl und Einheit sollte hingegen beim Parsen keine Probleme bereiten.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

nw378
Beiträge: 296
Registriert: 22. Sep 2018 10:38
Answers: 5

Re: 2 Number item Verbinden zu einem (neg pos Werte)

Beitrag von nw378 »

Alternativ könnte man statt

Code: Alles auswählen

input.substring(0,input.length -2)
auch

Code: Alles auswählen

input.split(" ").get(0)
nehmen.
Wenn keine Einheit vorhanden ist, wird nix abgetrennt, und wenn eine vorhanden ist (egal, wie viele Buchstaben) wird beim Leerzeichen getrennt.
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

Harka
Beiträge: 488
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: 2 Number item Verbinden zu einem (neg pos Werte)

Beitrag von Harka »

Moin,
Frage: reicht es nicht aus einfach ein Minuszeichen davor zu kleben? Das hätte den Vorteil, dass es egal ist ob der Wert mit oder ohne Einheit rein kommt. Mit Javascript habe ich gerade folgendes erfolgreich getestet

Code: Alles auswählen

| parseFloat(input) > 0 ? '-' +  input : 0

Antworten