Seite 2 von 2

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

Verfasst: 16. Jun 2025 00:53
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.

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

Verfasst: 16. Jun 2025 13:19
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.