NaN-Werte in Plots

Begonnen von Stefanbbq, 26 Juni 2018, 12:00:01

Vorheriges Thema - Nächstes Thema

Stefanbbq

Hallo,

kein neues Problem, aber die gefundenen Lösungen treffen bei mir wohl nicht zu.
Ich logge per DbLog und habe einige Plots erstellt. Bei einigen kann ich die Kurven anklicken und oben erscheinen dann Wert und Uhrzeit. Leider erscheint aber in den meisten Plots oben nur NaN und die Uhrzeit.

Der funktionierende Plot:
# Created by FHEM/98_SVG.pm, 2018-06-13 00:33:39
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title 'Wetter'
set ytics
set y2tics
set grid ytics y2tics
set ylabel "°C"
set y2label "%"

#logdb WS3500_1:humidity::
#logdb WS3500_1:temperature::
#logdb WS3500_1:temperature:-5:
#logdb WS3500_1:temperature:30:
#logdb WS3500_1:humidity:1:
#logdb WS3500_1:humidity:100:

plot "<IN>" using 1:2 axes x1y2 title 'rel. LF' ls l2 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 title 'Temp.' ls l0 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 title '-5' ls l0 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 title '30' ls l0 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title '1' ls l0 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title '100' ls l0 lw 1 with lines


Und hier der nicht funktionierende Plot:
# Created by FHEM/98_SVG.pm, 2018-06-26 11:31:17
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title 'Werkstatt'
set ytics
set y2tics
set grid ytics
set ylabel "°C"
set y2label ""

#logdb DECT_Heizung_Werkstatt:temperature::
#logdb DECT_Heizung_Werkstatt:desired-temp::

plot "<IN>" using 1:2 axes x1y1 title 'Temp.' ls l0 lw 2 with lines,\
     "<IN>" using 1:2 axes x1y1 title 'Ziel' ls l1fill lw 1 with lines


Habe ich hier was übersehen???

Vielen Dank,
Stefan

rudolfkoenig

Vermutlich gibt es in den vom DbLog zurueckgelieferten Daten nicht numerische Werte, diese muss man entweder rausfiltern, oder mit einer Funktion zu einem numerischen Wert konvertieren.
Siehe auch "Show Preprocessed input" im SVG Editor (Plot Detail-Ansicht in FHEMWEB).

Stefanbbq

Hallo,

etwas eingrenzen kann ich das evtl. noch: Wenn ich als Datenquelle
#logdb DECT_Heizung_Werkstatt:temperature:::$val=$val+0
eintrage, funktioniert es. Leider friert FHEM ein, wenn ich dies bei weiteren Heizungs-Plots eintrage. Die Hardware ist dabei jeweils die gleiche und ich kann keinen strukturellen Unterschied der Datensätze feststellen.

Außerdem frage ich mich in erster Linie, warum es im einen Fall spontan funktioniert und im anderen nicht. Hier die Datensätze:

Tabelle "history":
TIMESTAMP
DEVICE
TYPE
EVENT
READING
VALUE
UNIT


funktioniert:
2018-06-26 12:50:13
WS3500_1
TRX_WEATHER
temperature: 29.2
temperature
29.2
°C

(Unit steht so wirklich in der Tabelle)

funktioniert nicht:
2018-06-12 21:15:02
DECT_Heizung_Werkstatt
FBDECT
temperature: 24.0 C (measured)
temperature
24.0
C (measured)


Kann es sein, dass der Plot die Werte aus EVENT extrahiert und sie nicht aus VALUE nimmt? Warum wird die Kurve aber korrekt gezeichnet (numerische Werte werden also korrekt erfasst), während der Zahlenwert nicht ausgegeben werden kann?

Stefan

Stefanbbq

Das ist es! 'desired-temp' enthält aktuell den Wert 'off'. Das erklärt auch, warum :::$val=$val+0 hilft. Aber warum friert mir das (manchmal) fhem ein? Gibt es eine robustere Variante?

rudolfkoenig

#4
Zitat$val=$val+0
Bin nicht sicher, dss das eine von Perl akzeptierte Loesung ist, "off" nach 0 zu konvertieren, jedenfalls erzeugt
{ "off"+0 }
im Log folgende Meldung:
ZitatPERL WARNING: Argument "off" isn't numeric in addition (+) at (eval 12) line 1


ZitatGibt es eine robustere Variante?
Ja, die bei mir zuhause. Kann mich nicht erinnern, dass es je eingefroren ist :)