[gelöst] Vorzeichen wenn Wert positiv/negativ im Label Widget möglich?

Begonnen von ToM_ToM, 31 Juli 2017, 10:13:01

Vorheriges Thema - Nächstes Thema

ToM_ToM

Hallo Zusammen,

ich lasse mir derzeit den aktuellen DAX Index anzeigen und würde dahinter gerne anzeigen lassen ob er gestiegen oder gefallen ist.
Also so:

DAX: 12.178,32 (+0,28)

oder

DAX: 12.178,32 (-0,28)

Gibt's da im Label-Widget eine Möglichkeit, das mit dem Vorzeichen anhand des Wertes hinzubekommen?

VG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

setstate

#1
Ja, mit data-limits und data-colors.

data-limits='[-9999,0]'
data-colors'["red","green"]'

Ich glaube, im FHEM Wiki ist für das Label Widget dazu auch ein Beispiel dabei.

https://wiki.fhem.de/wiki/FTUI_Widget_Label

ToM_ToM

Hallo setstate,

vielen Dank für die schnelle Antwort.

Aber das mit den Farben ist kein Thema. Das läuft.

Mir geht es um die Vorzeichen vor dem Wert.

VG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

setstate

Verstehe ich nicht ganz ...
Wenn du eine Differenz berechnest, hat die doch schon ein Vorzeichen.

ToM_ToM

ZitatWenn du eine Differenz berechnest, hat die doch schon ein Vorzeichen.

Ich verwende das Modul um Börseninfos anzuzeigen (bin gerade auf Arbeit und mir fällt der Name des Moduls nicht ein).
Diese Modul liefert verschiedene Readings. Unter anderem den aktuellen Wert und das Delta, welches die Differenz zum Vortag enthält.
Dieses Delta hat zwar ein negatives Vorzeichen sofern der Wert negativ ist, aber wenn der Wert positiv ist, hätte ich gerne auch ein positives Vorzeichen in der Anzeige.
Sorry, wenn meine Frage etwas verwirrend war. :)
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

setstate

Ich würde das mit einer RegEx Substitution lösen.


data-substitution="s/^([0-9,]+)$/+$1/g"

ToM_ToM

ZitatIch würde das mit einer RegEx Substitution lösen.

Ach super. Muss ich heute Abend gleich mal ausprobieren.
Mit data-substitution und nem RegEx hatte ich gestern Abend auch ewig rumprobiert, aber irgendwie raffe ich das Zusammenspiel noch nicht so ganz.

VG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

ToM_ToM

Hallo setstate,

ich habe das jetzt mal probiert. Es wurde mir jedoch kein positives Vorzeichen angezeigt. Daraufhin habe ich mal das Attribut data-fix="3" gelöscht und siehe da, Vorzeichen war da. Sogar 2.   ;D
Habe mir dann nochmal das Reading angesehen und gesehen dass dieses sogar schon mit positiven Vorzeichen existiert. Da ich aber das Attribut data-fix="3" verwendet hatte, wurde dann in der Anzeige automatisch das positive Vorzeichen vorne dran entfernt.
Daher wollte ich das jetzt komplett über data-substitution lösen. Aber das Ergebnis ist anders als erwartet.

data-substitution="s/(\+[0-9]+)\.([0-9]{2})/$1,$2/g"

Hier nochmal komplette Daten:




Reading   Value
DAX_net   +0.187352

<div data-type="label"
data-device="Boerse"
data-get="DAX_net"
data-pre-text="("
data-post-text=")"
data-limits='[0.000000001,0,0.000000001]'
data-colors='["red","white","green"]'
data-substitution="s/(\+[0-9]+)\.([0-9]{2})/$1,$2/g"
class="normal inline">
</div>


Ergebnis: (+0,187352)

Eigentlich erwartetes Ergebnis: (+0,18)

Noch cooler wäre natürlich wenn ich nicht nur die hinteren Zahlen abschneide sondern tatsächlich gerundet wird.
Aber weiß nicht ob man das per REGEX hinbekommt. Da wäre data-fix dann wieder ziemlich cool gewesen.

Hoffe, du hast noch eine Idee für mich. :)

VG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

setstate

Im Code wird erst die Substitution gemacht und dann gerundet.

Dann kann man wirklich nur mit RegEx nach 2 Nachkommastellen abschneiden

data-substitution="s/(\+[0-9]+)\.([0-9]{2}).*/$1,$2/g"

ToM_ToM

Hi setsate, ich hatte jetzt aktuell wieder den Fall wo ich die Punkte durch Komma ersetzen wollte.
Habe das folgendermaßen gelöst.
data-substitution="s/([\d]+)[\.]?([\d]{0,2})(\d*)/$1,$2/g"

Nun habe ich aber noch das Problem dass Werte nicht immer Nachkommastellen haben, sondern auch als Ganzzahlen im Reading auftauchen.
Ist der Wert nun nicht 20,5 sondern 20 dann würde mein data-subsitution ja den Wert als 20, darstellen.
Gibt es mittlerweile evtl. schon eine elegantere Lösung oder hast du noch eine Idee?

VG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

setstate

data-round="2 ist schnell eingebaut, für exaktes Runden.
Aber dann fällt das + bei positiven Zahlen wieder weg. Da habe ich noch keine elegante Idee, wie man das wieder hinzaubert. Rein technisch ist das zwar auch ganz einfach, aber ich will nicht, dass dann alle Labels nach >0 und <0 abfragen müssen.

ToM_ToM

In meinem aktuellen Fall wo ich das bräuchte, wäre das mit dem positiven Vorzeichen erst mal irrelevant.
Ich möchte aktuell nur dass allgemein alle Werte schicker aussehen und das deutsche Dezimalzeichen verwenden.
Wenn ich mit data-substitution nur Punkte durch Komma ersetze, greift data-fix ja leider nicht mehr.
Und mit meinem Regex würde bei einer Ganzzahl auch immer ein Komma hinter der Zahl stehen.

Ziel ist:
20 soll auch 20 ausgeben
20.5 soll 20,5 ausgeben
20.5318732 soll 20,53 ausgeben.

VG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

setstate

Wenn da ein Komma drin ist, erkennt JavaScript das nicht mehr als Zahl. Die Substitution Funktion kommt aber vor den Zahlen-Funktionen. Es fehlt also noch eine Format Funktion vor der Ausgabe.
Da bin ich mir noch nicht sicher, was ich da baue. Ich habe verschiedene Ansätze im Kopf:
- data-substitution erweitern (ist aber jetzt schon zu vielschichtig und verwirrend)
- data-filter (neu) mit Möglichkeit zur Angabe von verschiedenen Funktionen ( am besten per Pipe wie bei Angular)
- data-format (neu) mit Funktionsaufrufen wie bei data-substitution ( bin aber kein Fan der eval() Funktion und würde das am liebsten nicht mehr unterstützen.)

ToM_ToM

Hm... wäre es sinnvoll ein zweites data-substitution einzubauen welches grundsätzlich immer erst am Ende greift wenn alle anderen Parameter verarbeitet wurden?
also quasi ein data-final-substitution?

VG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

ToM_ToM

Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8