Hauptmenü

DOIF Berechnungen mit [...]

Begonnen von ch.eick, 15 Mai 2020, 12:25:14

Vorheriges Thema - Nächstes Thema

ch.eick

Hallo zusammen,
ich habe da eine Merkwuerdigkeit, wobei ich es mit dem Syntax so schon, vor einigen Updates, betrieben hatte.


Das hier funktioniert
    setreading $SELF kwh_Maingau_now_euro {( round( (ReadingsVal("$SELF","kwh_gesamt",0)-ReadingsVal("$SELF","kwh_old",0)) * [$SELF:Maingau_Arbeitspreis] ,2) )} ,

und so hatte ich es schon mal laufen
    setreading $SELF kwh_Maingau_now_euro {( round( ([$SELF:kwh_gesamt]-[$SELF:kwh_old])*[$SELF:Maingau_Arbeitspreis],2))} ,


Ursprueglich habe ich natuerlich den Grundstock des Codes aus dem Forum :-)

Und das ganz merkwuerdige ist, dass dieses hier sich immer noch korrekt aktualisiert

DOELSEIF
([awattar:AktuellerPreis])
   (
    setreading $SELF aWATTar_AktuellerPreis {( round(  [awattar:AktuellerPreis]*1.19/100 ,4) )},
    setreading $SELF aWATTar_Arbeitspreis   {( round( ([awattar:AktuellerPreis]*1.19/100 + [$SELF:aWATTar_Basispreis]) ,4) )},
    setreading $SELF aWATTar_Triggerpreis   {( round( (([awattar:MedianPreis] - [awattar:NiedrigerPreis])/2 + [awattar:NiedrigerPreis])*1.19 ,1) )},
    {Log 3, "Strom_Kosten cmd_3 : Preis berechnet"},
    { if ( [$SELF:aWATTar_AktuellerPreis] lt [$SELF:aWATTar_Triggerpreis]/100 )
        { fhem("setreading $SELF aWATTar_Trigger on") }
      else
        { fhem("setreading $SELF aWATTar_Trigger off") }
    },
    {Log 3, "Strom_Kosten cmd_4 : Trigger aktualisiert"}
   )


Ich denke ich bin da eine Syntax Wutz und brauch mal wieder Nachhilfe

Gruss
    Christian

Hier mal das gesamte RAW, wie es jetzt wieder laeuft

defmod Strom_Kosten DOIF ################################################################################################################\
## 1 Strompreis Berechnungen\
##\
([:59]) ##jede Stunde zur 59sten Minute\
  (\
   get StromZaehler Strom_Status ,\
   setreading $SELF kwh_gesamt [StromZaehler:Strom_Status-02] ,\
   setreading $SELF kwh_Maingau_now_euro  {( round( (ReadingsVal("$SELF","kwh_gesamt",0) - ReadingsVal("$SELF","kwh_old",0)) * [$SELF:Maingau_Arbeitspreis] ,2) )} ,\
   setreading $SELF kwh_aWATTar_now_euro  {( round( (ReadingsVal("$SELF","kwh_gesamt",0) - ReadingsVal("$SELF","kwh_old",0)) *([$SELF:aWATTar_Basispreis] + [$SELF:aWATTar_AktuellerPreis]) ,2) )} ,\
   setreading $SELF kwh_differenz_now_euro {( round( [$SELF:kwh_Maingau_now_euro]-[$SELF:kwh_aWATTar_now_euro] ,2) )} ,\
\
   setreading $SELF kwh_old [$SELF:kwh_gesamt] ,\
   {Log 3, "Strom_Kosten cmd_1 : Kosten berechnet"}\
   {system("/usr/bin/python3 /opt/fhem/python/kostal/plenticore_statistic.py 192.168.178.18 192.168.178.40 &")}\
##   {system("/usr/bin/python3 /opt/fhem/python/kostal/plenticore_statistic.py ".ReadingsVal("PV_Anlage_1","IP-address","?")." ".ReadingsVal("PV_Anlage_1","IP-address_FHEM","?")." &")}\
  )\
################################################################################################################\
## 2 regelmaessig die Bilanz aktualisieren\
##\
DOELSEIF\
([+:05]) ## Tagsueber alle 5 Minuten\
  (\
   { if ( ($hour >= 8 || $hour < 20) ) { fhem("set Dum.Energy update") } }\
  )\
################################################################################################################\
## 3 Aktuellen aWATTar Preis holen. Achtung, die Readings werden erst wegen des http Zugriffs, verzögert aktualisiert.\
##\
DOELSEIF\
([:03])\
   (\
    set awattar reread ,\
    {Log 3, "Strom_Kosten cmd_3 : Preis aktualisiert"}\
   )\
################################################################################################################\
## 4 Sobald der aktuelle Preis geschrieben wurde werden alle anderen readings berechnet.\
##\
DOELSEIF\
([awattar:AktuellerPreis])\
   (\
    setreading $SELF aWATTar_AktuellerPreis {( round(  [awattar:AktuellerPreis]*1.19/100 ,4) )},\
    setreading $SELF aWATTar_Arbeitspreis   {( round( ([awattar:AktuellerPreis]*1.19/100 + [$SELF:aWATTar_Basispreis]) ,4) )},\
    setreading $SELF aWATTar_Triggerpreis   {( round( (([awattar:MedianPreis] - [awattar:NiedrigerPreis])/2 + [awattar:NiedrigerPreis])*1.19 ,1) )},\
    {Log 3, "Strom_Kosten cmd_3 : Preis berechnet"},\
    { if ( [$SELF:aWATTar_AktuellerPreis] lt [$SELF:aWATTar_Triggerpreis]/100 )\
        { fhem("setreading $SELF aWATTar_Trigger on") }\
      else \
        { fhem("setreading $SELF aWATTar_Trigger off") }\
    },\
    {Log 3, "Strom_Kosten cmd_4 : Trigger aktualisiert"}\
   )\
################################################################################################################\
## 5 Am Ersten des Monats den Zäehlerstand zum Stromversorger übertragen\
##\
DOELSEIF\
([01:07] and ($mday==1))\
   (\
    set maingau Zaehlerstand [StromZaehler:Strom_Status-02],\
    {Log 3, "Strom_Kosten cmd_5 : Zählerstand zur Maingau übertragen"}\
   )\
\

attr Strom_Kosten DbLogExclude .*
attr Strom_Kosten DbLogInclude aWATTar_AktuellerPreis,aWATTar_Arbeitspreis,aWATTar_Trigger,aWATTar_Triggerpreis,kwh_Maingau_now_euro,kwh_aWATTar_now_euro,kwh_differenz_now_euro,kwh_gesamt,kwh_old
attr Strom_Kosten alias Strom_Kosten
attr Strom_Kosten cmdState Kosten berechnet|Bilanz aktualisiert|Preis aktualisiert|aWATTar Trigger aktualisiert|Maingau Zählerstand Übertragen
attr Strom_Kosten comment Alle Berechnungen erfolgen mit Brutto Preisen. Der aWATTar Basispreis ergibt sich aus { 0.2067 + 0.0250 }
attr Strom_Kosten do always
attr Strom_Kosten readingList Maingau_Arbeitspreis Maingau_Grundpreis MwSt aWATTar_Basispreis aWATTar_Grundpreis kwh_old
attr Strom_Kosten room Strom->System
attr Strom_Kosten setList Maingau_Arbeitspreis Maingau_Grundpreis aWATTar_Basispreis aWATTar_Grundpreis kwh_old
attr Strom_Kosten sortby 11
attr Strom_Kosten verbose 5
attr Strom_Kosten wait 0:0:0:10:0:0

setstate Strom_Kosten Bilanz aktualisiert
setstate Strom_Kosten 2020-01-12 13:05:09 Maingau_Arbeitspreis 0.2987
setstate Strom_Kosten 2020-01-12 16:24:48 Maingau_Grundpreis 36.00
setstate Strom_Kosten 2020-05-15 12:08:17 aWATTar_AktuellerPreis 0.0238
setstate Strom_Kosten 2020-05-15 12:08:17 aWATTar_Arbeitspreis 0.2555
setstate Strom_Kosten 2020-01-17 12:58:57 aWATTar_Basispreis 0.2317
setstate Strom_Kosten 2020-01-12 16:25:33 aWATTar_Grundpreis 147.36
setstate Strom_Kosten 2020-05-15 12:08:17 aWATTar_Trigger off
setstate Strom_Kosten 2020-05-15 12:08:17 aWATTar_Triggerpreis 2.2
setstate Strom_Kosten 2020-05-15 12:20:00 cmd 2
setstate Strom_Kosten 2020-05-15 12:20:00 cmd_event timer_2
setstate Strom_Kosten 2020-05-15 12:20:00 cmd_nr 2
setstate Strom_Kosten 2020-05-15 12:11:10 kwh_Maingau_now_euro 0.00
setstate Strom_Kosten 2020-05-15 12:11:10 kwh_aWATTar_now_euro 0.00
setstate Strom_Kosten 2020-05-15 12:11:10 kwh_differenz_now_euro 0.00
setstate Strom_Kosten 2020-05-15 12:11:10 kwh_gesamt 000003.0000
setstate Strom_Kosten 2020-05-15 12:11:10 kwh_old 000003.0000
setstate Strom_Kosten 2020-05-15 12:10:43 mode enabled
setstate Strom_Kosten 2020-05-15 12:20:00 state Bilanz aktualisiert
setstate Strom_Kosten 2020-05-15 12:10:43 timer_01_c01 15.05.2020 12:59:00
setstate Strom_Kosten 2020-05-15 12:20:00 timer_02_c02 15.05.2020 12:25:00
setstate Strom_Kosten 2020-05-15 12:10:43 timer_03_c03 15.05.2020 13:03:00
setstate Strom_Kosten 2020-05-15 12:10:43 timer_04_c05 16.05.2020 01:07:00

RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

#1
Ich habe da nochmal einen Test gemacht, um das Problem zu zeigen.



kwh_gesamt 000003.0000
kwh_old 000003.0000

setreading $SELF kwh_Maingau_now_euro  {( round( (ReadingsVal("$SELF","kwh_gesamt",0) - ReadingsVal("$SELF","kwh_old",0)) ,2) )}
kwh_verbrauch 0.00

setreading $SELF kwh_verbrauch  {( round( ([$SELF:kwh_gesamt]-[$SELF:kwh_old]) ,2) )}
kwh_verbrauch 270.00


Wobei das hier wiederum richtig waere...

kwh_Maingau_now_euro 0.00
kwh_aWATTar_now_euro 0.00

setreading $SELF kwh_differenz_now_euro {( round( [$SELF:kwh_Maingau_now_euro]-[$SELF:kwh_aWATTar_now_euro] ,2) )}
kwh_differenz_now_euro 0.00


Edit: Und noch ein Test

kwh_gesamt 000003.0000
setreading $SELF kwh_verbrauch  {( [$SELF:kwh_gesamt] )}
kwh_verbrauch 30

RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

#2
So, ich habe da mal ein weiteres Ergebnis

Es schein wohl an den Werten "000003.000" zu liegen, wenn ich die unnuetzen ".000"  im original Device mit einem Format wegschmeisse, also "000003" im reading steht, dann geht es wieder wie vorher.
Somit scheint "[$SELF:kwh_gesamt]-[$SELF:kwh_old]" mit den Nachkommastellen nicht zurecht zu kommen, oder es nicht als Zahl zu erkennen.

Die korrekte Aussage ueberlasse ich dann mal den Fachleuten.

Viele Gruesse
     Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

#3
So, ich habe da mal ein weiteres Ergebnis

Es schein wohl an den Werten "000003.000" zu liegen, wenn ich die unnuetzen ".000"  im original Device mit einem Format wegschmeisse, also "000003" im reading steht, dann geht es wieder wie vorher.
Somit scheint "[$SELF:kwh_gesamt]-[$SELF:kwh_old]" mit den Nachkommastellen nicht zurecht zu kommen, oder es nicht als Zahl zu erkennen.

Vor meinem Zaehlerwechsel waren die Werte ohne Nachkommastellen mit 2 Nachkommastellen, jedoch nie mit ".00" :-)

Die korrekte Aussage ueberlasse ich dann mal den Fachleuten.

Viele Gruesse
     Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick