Seite 1 von 1

Umrechung von kWh in Euro, unerwarteter Wert

Verfasst: 17. Apr 2020 23:16
von joebusch
Hallo Ich habe folgendes Problem,

ich habe eine FritzPowerLine546 Steckdose in Openhab eingebunden und möchte nun den Geamtverbrauch als Euro in einer Sitemap darstellen.
Es wird auch ein Wert angezeigt dieser kann aber nicht richtig sein weil er astonomisch hoch ist.
Ich suche schon seit Tagen nach dem Fehler kann Ihn aber nicht finden.

Meine Items sehen folgendermaßen aus:

Number:Energy FRITZPowerline546EEnergy "Gesamtverbrauch {channel="avmfritz:FRITZ_Powerline_546E_Solo:192_168_10_39:energy"}

Dummy Items
Number Stromzaehler_kWh "Zählerstand [%.2f kWh]"
Number Strom_Kosten_Gesamt "Kosten Gesamt [%.2f kWh]"


Und meine Rules sehen so aus:

rule "Stromzaehler kWh"

when
Item FRITZPowerline546EEnergy received update
then
Stromzaehler_kWh.
postUpdate(FRITZPowerline546EEnergy.state as Number )
end

und

when
Item Stromzaehler_kWh received update
then
Strom_Kosten_Gesamt.
postUpdate((Stromzaehler_kWh.state as Number)*0.3)
end

hier noch die rdd4j Persistenz Einträge:

Stromzaehler_kWh : strategy = everyMinute, restoreOnStartup
Strom_Kosten_Gesamt : strategy = everyMinute, restoreOnStartup

Wenn ich nun in VS Code in der Rule mit der Maus auf "Stromzaehler_kWh" zeige wird mir der korrekte "kWh" Wert angezeigt.
Aber der Wert "Strom_Kosten_Gesamt" zeigt einen viel zu hohen Wert an (Beispiel bei 108.586 kWh werden mir
117272880.00 € angezeigt.

Was mache ich falsch?
:?: :?: :?:

LG

Re: Umrechung von kWh in Euro, unerwarteter Wert

Verfasst: 18. Apr 2020 01:00
von udo1toni
Das Problem ist hier wie so oft UoM. Da ich selbst kein Fritz!Box Addon verwende, zunächst mal die Frage: ist die Definition Number:Energy korrekt? Das Addon muss UoM unterstützen.

Warum setzt Du überhaupt FRITZPowerline546EEnergy nach Stromzaehler_kWh um, offensichtlich enthalten doch beide Items immer den gleichen Zahlenwert?
Um dann von kWh nach € zu kommen, sollte die Rule etwas anders aussehen:

Code: Alles auswählen

rule "Stromzaehler kWh"
when
    Item FRITZPowerline546EEnergy changed
then
    var Number nKosten = 0
    if(FRITZPowerline546EEnergy.state instanceof Number)
        nKosten = (FRITZPowerline546EEnergy.state as Number).floatValue * 0.3
    Strom_Kosten_Gesamt.postUpdate(nKosten)
end
Der Umweg über die Variable stellt sicher, dass die Rule keine Null Pointer Exception auslöst (falls das Item keine gültige Zahl enthält).

Re: Umrechung von kWh in Euro, unerwarteter Wert

Verfasst: 20. Apr 2020 21:46
von joebusch
Hallo Udo1Toni,

das "Number:Energy" wurde automatisch von VS Code bzw. von der Oenhab extension gesetzt.
Ich nehme es mal heraus und schau was passiert. Ob das Addon UoM untestützt kann ich nicht sagen, aber ich habe ja noch eine zweite Regel für den Tagesverbrauch und dort werden Werte richtig angezeigt.

HIer die rules dafür:

rule "Stromzaehler Verbrauch Tag"

when
Item Stromzaehler_kWh received update
then
Stromzaehler_Verbrauch_Tag.
postUpdate(Stromzaehler_kWh.deltaSince(now.withTimeAtStartOfDay,"rrd4j") as Number)

rule "Stromkosten heute"

when
Item Stromzaehler_kWh received update
then
Strom_Kosten_Tag.
postUpdate(Stromzaehler_Verbrauch_Tag.state as Number *0.3)
end

Zu "Warum setzt Du überhaupt FRITZPowerline546EEnergy nach Stromzaehler_kWh um."

ich war ich mir nicht sicher ob es besser wäre den Wert "FRITZPowerline546EEnergy" zu persistieren indem ich Ihn an ein Dummy Item übergebe.

Herzlichen Dank für Deine Rückmeldung ich probiere mal ob ich weiterkomme und melde mich dann zurück.

Re: Umrechung von kWh in Euro, unerwarteter Wert

Verfasst: 20. Apr 2020 22:55
von peter-pan
Da ich das AVM-Binding auch im Einsatz habe, kann ich bestätigen, dass das Binding UoM unterstützt und deshalb hat VSC auch das Item entsprechend generiert.
Eine Änderung am Item-Typ würde ich nicht vornehmen, da noch mehrere solche Items in deinem AVM-Items-File sein sollten. Viele andere Bindings unterstützen auch UoM.

Aber wie Udo sagte wird mit der Umwandlung ".floatValue"

Code: Alles auswählen

nKosten = (FRITZPowerline546EEnergy.state as Number).floatValue * 0.3
die Masseinheit (UoM/Suffix) entfernt und das Ergebnis richtig gerechnet. Eine elegante Lösung.