Autor Thema: [gelöst] aktueller Wert $data{currval1} falsch!  (Gelesen 1245 mal)

Offline th0masrad

  • Jr. Member
  • **
  • Beiträge: 53
  • 2015, 2018, 2020 = Intervall-FHEMler
[gelöst] aktueller Wert $data{currval1} falsch!
« am: 28 Juli 2022, 11:58:22 »
Anscheinend wird unter bestimmten Voraussetzungen der aktuelle Wert in $data{currval#} falsch ermittelt. Ich1) habe dabei die Funktion logProxy_Func2Plot() im Verdacht.

Leider weiß ich nicht, wie ich den Sachverhalt kurz darstellen kann; daher bitte ich um Entschuldigung, wenn ihr euch durch den Text quälen müsst.

In einem mit #logProxy Func:logProxy_Func2Plot($from,$to,'{logProxy_hms2dec(sunrise_abs_dat($sec,"REAL"))}') (aus dem Wiki) gezeichneten SVG wird der Wert von $data{currval1} als 5.68055555555556 angegeben, während er tatsächlich 5.60555555555556 beträgt.

Zur Übersicht trägt hoffentlich der anhängende Screenshot bei. Dort sieht man, dass der Minimalwert mit 5.09… und der Maximalwert mit 5.68… richtig zu sein scheinen. Der Wert für den aktuellen Zeitpunt ist aber identisch mit dem Maximalwert. Das kann nicht sein, denn der "Mess"wert im Diagramm liegt zum aktuellen Zeitpunkt (28. Juli) unter dem Maximalwert (31. Juli)! Da ich den aktuellen Wert mit logProxy_hms2dec(sunrise_abs_dat(time(),"REAL")); explizit ausrechne und anzeigen lasse, wird dies mMn. bestätigt.

Nun die FHEM-Auszüge:
  • SVG-Definition
defmod SVG_XX_XX_XX_Sonnenstand SVG logProxy:Test:
attr SVG_XX_XX_XX_Sonnenstand plotReplace TITLE={\
  my $TimeNow_org         = TimeNow();;\
  my $TimeNow_dec         = logProxy_hms2dec($TimeNow_org);;\
  my $time                = time();;\
  my $sunrise_abs_dat_org = sunrise_abs_dat($time,"REAL");;\
  my $sunrise_abs_dat_dec = logProxy_hms2dec($sunrise_abs_dat_org);;\
\
  "min:$data{min1} cur?:$data{currval1} max:$data{max1} TN:$TimeNow_dec t:$time cur!:$sunrise_abs_dat_dec"}\
\
INPUT1=Func:logProxy_Func2Plot($from,$to,'{logProxy_hms2dec(sunrise_abs_dat($sec,"REAL"))}')\
INPUT2=ConstX:TimeNow(),0,1\
\
PLOT1="axes x1y1 title 'Sonnenaufgang' with steps  ls l3"\
PLOT2="axes x1y2 title 'jetzt'         with lines  ls l4"

setstate SVG_XX_XX_XX_Sonnenstand initialized
  • gplot-Definition ("Test.gplot")
set terminal size <SIZE>

set title <TITLE>

#logProxy %INPUT1%
#logProxy %INPUT2%

plot %PLOT1%, %PLOT2%


    Liegt's an mir?  :o
    Gibt's Abhilfe?  8)
    1) = Niveau "interessierter Laie"  :)
    « Letzte Änderung: 29 Juli 2022, 13:24:41 von th0masrad »
    Mit freundlichen Grüßen
    Th0mas

    Offline frank

    • Hero Member
    • *****
    • Beiträge: 11154
    Antw:aktueller Wert $data{currval1} falsch!
    « Antwort #1 am: 28 Juli 2022, 12:22:31 »
    Zitat
    Anscheinend wird unter bestimmten Voraussetzungen der aktuelle Wert in $data{currval#} falsch ermittelt.
    ich vermute, dass "currval" immer der letzte wert eines plots ist.

    edit:
    wenn man es mit einem "aktuellen wert" ganz genau nehmen würde, gäbe es diesen wert ja (fast) nie.
    sobald ein wert im logfile landet, ist er ja bereits "veraltet" und nicht mehr aktuell.  ;)
    « Letzte Änderung: 28 Juli 2022, 12:39:31 von frank »
    FHEM: 6.0(SVN) => Pi3(buster)
    IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
    CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
    IT: ITZ500|ITT1500|ITR1500|GRR3500
    WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

    Offline th0masrad

    • Jr. Member
    • **
    • Beiträge: 53
    • 2015, 2018, 2020 = Intervall-FHEMler
    Antw:aktueller Wert $data{currval1} falsch!
    « Antwort #2 am: 29 Juli 2022, 13:23:04 »
    ich vermute, dass "currval" immer der letzte wert eines plots ist.
    Das macht ja auch (eigentlich immer) Sinn, denn zukünftige Werte gibt es (eigentlich) nie; außer wie hier bei der logProxy-Funktion, die ja nicht auf gemessenen Werten beruht.

    Danke für die Erleuchtung!  ;D

    Ich lasse die aktuellen Werte nun separat ausrechnen:TITLE={
      my $Sonnenaufgang_min   = $data{min1};
      my $Sonnenaufgang_cur   = logProxy_hms2dec(sunrise_abs_dat(time(),"REAL"));
      my $Sonnenaufgang_max   = $data{max1};
    Mit freundlichen Grüßen
    Th0mas