[gelöst] Frage zu Readingsgroup und SUM - Funktion

Begonnen von ToM_ToM, 01 November 2019, 18:05:26

Vorheriges Thema - Nächstes Thema

ToM_ToM

Hallo Leute,

irgendwie bekomme ich die Summierung in der Readingsgroup nicht hin.
Eig. möchte ich nur dass die Werte unten nochmal summiert werden.


defmod FinanceStockReadingsGroup readingsGroup <Wertpapier>,<Kaufpreis>,<Wert>,<Kaufpreis (gesamt)>,<Wert (gesamt)> dummy_\w+:stockPriceEuro,currentPriceEuro,totalStockPriceEuro|totalOptionPriceEuro,totalValueEuro\
<hr>\
FinanceStockReadingsGroup:<Summe>,$sum(1..$ROW:1),$sum(1..$ROW:2),$sum(1..$ROW:3),$sum(1..$ROW:4)
attr FinanceStockReadingsGroup mapping %ALIAS
attr FinanceStockReadingsGroup notime 1
attr FinanceStockReadingsGroup room Finanzen
attr FinanceStockReadingsGroup valueColumn { 'stockPriceEuro'=> 1, 'currentPriceEuro'=> 2, 'totalStockPriceEuro|totalOptionPriceEuro'=> 3, 'totalValueEuro'=> 4 }


Hat jemand eine Idee was ich falsch mache?
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

ToM_ToM

ZitatSind alle Werte numerisch ohne Einheit?

Ja, alle Werte sind numerisch und ohne Einheit. Sind Fließkommazahlen (z.B.: 579.76).

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

amenomade

Inklusiv <Wertpapier> ($sum(1..$ROW:1)) ?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

ToM_ToM

ZitatInklusiv <Wertpapier> ($sum(1..$ROW:1)) ?

Das Wertpapier soll nicht summiert werden. Das ist ja nur ein Name. Ich habe alle möglichen Kombinationen ausprobiert, aber das Ergebnis ist immer falsch.
Anbei mal ein Screenshot wie es aussieht.
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

amenomade

Deswegen habe ich gefragt, ob alle Werte numerisch sind.

3693.97 = 3500 + 68.08 + 72.47 + 4.16 + 49.26

Verstehst Du jetzt?
Die fehlen ein paar Nullen in der Tabelle
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

ToM_ToM

ZitatVerstehst Du jetzt?
Die fehlen ein paar Nullen in der Tabelle

Ach jetzt verstehe ich wie der auf diese komischen Werte kommt.  ::)

Gibt's einen Weg das zu umgehen wenn man dort keine Nullen parat hat?
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

amenomade

Mit valueFormat sollte es möglich sein, die 0 zu forcieren.
Ich weiss aber nicht, ob das für $sum reicht, da es theoretisch "nur" eine Formattierung ist
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

ToM_ToM

ZitatMit valueFormat sollte es möglich sein, die 0 zu forcieren.

valueFormat geht leider nur auf die Werte die auch schon gefüllt sind.

Vielleicht hat ja noch jemand eine Idee. Danke dir aber vielmals fürs Aufdecken meines Fehlers. :)
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

ToM_ToM

ZitatAuch so?
Ja, auch so. Habe es eben getestet.
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

amenomade

#11
Werden die fehlende Werte im Laufen der Zeit befüllt oder werden die immer leer sein?

Wenn dann, einfach mit "setreading dummy_xxx xxxxPrice 0" befüllen

EDIT: mit "!" vor dem readingsName kannst Du ein Reading erzwingen, und dann mit valueFormat formattieren:
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

#12
So... jetzt habe ich es geschafft. Es gab einen zusätzlichen Fehler in deiner Summen. Deswegen konnte ich mir nicht alle Werte erklären.

defmod FinanceStockReadingsGroup readingsGroup <Wertpapier>,<Kaufpreis>,<Wert>,<Kaufpreis (gesamt)>,<Wert (gesamt)> dummy_\w+:!stockPriceEuro,!currentPriceEuro,!totalStockPriceEuro,!totalValueEuro\
<hr>\
FinanceStockReadingsGroup:<Summe>,$sum(1..$ROW-1:1),$sum(1..$ROW-1:2),$sum(1..$ROW-1:3),$sum(1..$ROW-1:4)
attr FinanceStockReadingsGroup notime 1
attr FinanceStockReadingsGroup room Finanzen
attr FinanceStockReadingsGroup valueColumn { 'stockPriceEuro'=> 1, 'currentPriceEuro'=> 2, 'totalStockPriceEuro'=> 3, 'totalValueEuro'=> 4 }
attr FinanceStockReadingsGroup valueFormat { if ($VALUE eq "totalStockPriceEuro")\
{return ReadingsVal("$DEVICE","totalOptionPriceEuro",0)};;\
if ($VALUE =~ "Euro") {return 0} else {return $VALUE}\
}


EDIT: ne, da gibt es immer noch ein Problem in der Summe wenn Option statt Stock... grr. Die einfachste Lösung ist doch die fehlende Readings mit setreading zu befüllen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

ToM_ToM

#13
Guten Morgen  8)

Da warst du ja noch fleißig gestern.

Habe mit deinem Ansatz jetzt nochmal ein wenig rumgespielt. Aber das Problem ist dass die Werte die Format zurück liefert, in der Summe nicht berücksichtigt werden, da das Format erst später greift. Wenn du statt return 0  z.B. return 1000 eingibst, siehst du dasss das keine Auswirkung mehr auf die Summe hat. Ich denke, da werde ich dann wohl keine Chance haben.

Aber danke für deine Hilfe.

Edit: Habe es jetzt so gelöst dass ich die Optionsscheine separat abfrage:


defmod FinanceStockReadingsGroup readingsGroup <Wertpapier>,<Kaufpreis>,<Wert>,<Kaufpreis (gesamt)>,<Wert (gesamt)> dummy_(?!DS)[\w_]+(Stock|fond)[\w_]*:!stockPriceEuro,!currentPriceEuro,!totalStockPriceEuro,!totalValueEuro\
dummy_DS[\w_]+(Stock|fond)[\w_]*:!stockPriceEuro,!currentPriceEuro,!totalOptionPriceEuro,!totalValueEuro\
<tfoot>\
FinanceStockReadingsGroup:<Summe>,$sum(1..$ROW-1:1),$sum(1..$ROW-1:2),$sum(1..$ROW-1:3),$sum(1..$ROW-1:4)
attr FinanceStockReadingsGroup DbLogExclude .*
attr FinanceStockReadingsGroup mapping %ALIAS
attr FinanceStockReadingsGroup notime 1
attr FinanceStockReadingsGroup room Finanzen
attr FinanceStockReadingsGroup valueColumn { 'stockPriceEuro'=> 1, 'currentPriceEuro'=> 2, 'totalStockPriceEuro'=> 3, 'totalValueEuro'=> 4 }
attr FinanceStockReadingsGroup valueFormat {\
if ($VALUE =~ "Euro") {return 0} else {return $VALUE}\
}
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

amenomade

Zitat von: ToM_ToM am 02 November 2019, 09:21:59
Aber das Problem ist dass die Werte die Format zurück liefert, in der Summe nicht berücksichtigt werden, da das Format erst später greift. Wenn du statt return 0  z.B. return 1000 eingibst, siehst du dasss das keine Auswirkung mehr auf die Summe hat.

Ja, das hatte ich auch zuerst vermutet.
Zitat von: amenomade am 01 November 2019, 23:21:02
Mit valueFormat sollte es möglich sein, die 0 zu forcieren.
Ich weiss aber nicht, ob das für $sum reicht, da es theoretisch "nur" eine Formattierung ist
und mit Rumspielen gestern Abend definitiv festgestellt. Es wäre interessant ein zusätzliche Attribut hinzufügen, das eine Vorkalkulation ermöglichen würde. Aber es ist logisch, dass es über valuerFormat nicht funktionieren kann: Wenn Du z.B. Temperaturen mit "°C" darstellen möchtest, könntest Du danach keine Kalkulation machen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus