SVG Plot HM-CC-RT-DN Heizung in OFF Stellung PEARL WARNING Lösung

Begonnen von Amenophis86, 04 Mai 2016, 03:05:01

Vorheriges Thema - Nächstes Thema

Amenophis86

Ich hab unsere Heizung die Tage ausgestellt und dabei festgestellt, wenn der HM-CC-RT-DN den Wert "off" ins DBLog schickt, habe ich einmalig, wenn ich meine Heizungsplots aufrufe folgenden Fehler im Logfile:

2016.05.03 21:09:02 1: PERL WARNING: Argument "off" isn't numeric in numeric gt (>) at ./FHEM/98_SVG.pm line 1483.
2016.05.03 21:09:02 1: PERL WARNING: Argument "off" isn't numeric in subtraction (-) at ./FHEM/98_SVG.pm line 1818.
2016.05.03 21:09:02 1: PERL WARNING: Argument "off" isn't numeric in subtraction (-) at ./FHEM/98_SVG.pm line 1819.
2016.05.03 21:09:02 1: PERL WARNING: Argument "off" isn't numeric in sprintf at ./FHEM/98_SVG.pm line 2027.


Also habe ich mich an die Suche gemacht, was der Fehler sein könnte und habe folgendes herausgefunden. In jeder Zeile hat eine bestimmte Variable den Wert "off" inne und sollte eigentlich eine Zahl sein. Das sie jedoch keine ist, kann Perl keine Berechnung vornehmen. "off" entspricht jedoch quasi dem Wert "0". Somit wird einfach überall der Wert off durch 0 ersetzt. Dies habe ich wie folgt gelöst:

1. Zeile 1483:
Die Variable $v ist das Problem, da diese nun den Wert "off" besitzt und keine Zahl. Daher habe ich in die Zeile 1483 folgenden Code eingefügt:
unless ( length( do { no warnings "numeric"; $v & "" } ) )    # ---------- HOMEMATIC VALUE OFF ----------
  {
$v = 0;
  }

Danach hat die Variabel $v den Wert 0 und kann weiter verarbeitet werden.

2. Zeile 1818 und Zeile 1819:
$dyp->[$i] bzw. $dyp->[$i-1] sind die beiden Problem Variablen. Auch hier wurde in die jeweilige Zeile folgender Code eingefügt:
unless ( length( do { no warnings "numeric"; $dyp->[$i-1] & "" } ) )   # ---------- HOMEMATIC VALUE OFF ----------
  {
$dyp->[$i-1] = 0;
  }
  unless ( length( do { no warnings "numeric"; $dyp->[$i] & "" } ) )   # ---------- HOMEMATIC VALUE OFF ----------
  {
$dyp->[$i] = 0;
  }


3. Zeile 2027:
Hier ist $data{"currval$j"} die böse Variable. Lösung:
unless ( length( do { no warnings "numeric"; $data{"currval$j"} & "" } ) )   # ---------- HOMEMATIC VALUE OFF ----------
  {
$data{"currval$j"} = 0;
  }



Damit habe ich erreicht, dass der Code ganz normal funktioniert im Winter und im Sommer einfach der Wert 0 angenommen wird bei off. Natürlich hat die Perl Warnung keine Auswirkung gehabt und auch nur einmalig bei einem Neustart inkl. Plot anzeigen sich gemeldet, aber schön ist es trotzdem nicht.

Vielleicht kann das ganze ja in das Modul übernommen werden. Gerne auch etwas abgewandelt. Das war jetzt eine Fehlersuche auf die Schnell um 2 Uhr nachts. Ich denke da gibt es vermutlich bessere Lösungen ;)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

rudolfkoenig

Meine Meinung:
- SVG.pm ist zeitintensiv (vulgo langsam), und ich habe keine gute Idee mehr fuer eine Optimierung (wenn man die Berechnung nicht komplett ins Browser verlagern will), ich will deswegen zusaetzliche Pruefungen an den Daten vermeiden.
- Die Datenlieferanten sollten dafuer sorgen, dass nur Zahlen an SVG.pm geliefert werden. FileLog.pm macht das bereits, DbLog.pm nicht, ergo gehoert der Patch ins DbLog.

Amenophis86

#2
Kann ich verstehen, dann muss ich vll mal in die dblog.pm schauen und dort den Filter einbauen. Werde mich wieder melden. Danke für die Rückmeldung :)

Edit:
Warum bin ich nicht früher auf die Idee gekommen, da war wesentlich einfacher :D Hier die neue Lösung:
Bei 93_DbLog.pm einfach in Zeile 478 folgenden Code einfügen:
if($value eq "off") {$value = 0;}

Vielleicht kann rapster das ganze ja fest übernehmen, dann ist es beim nächsten Update nicht raus.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

rapster

Hi,

die Lösung finde ich nicht sehr schön, bei dir bedeutet off = 0, was ist wenn ein anderer unter off z.B. 100 versteht?

Du kannst das allerdings jeweils pro Wert selber in deiner SVG festlegen, hier ein Beispiel, gerne kannst du auch dein gplot file mal anhängen.
HM-CC-RT-DN:desired-temp:0::$val=($val=~'off'?0:$val)

Gruß
Claudiu

Amenophis86

Habe mal ein File angehängt. Im File selbst habe ich noch nie gearbeitet, sondern bisher nur in der Weboberfläche. Wo bzw wie müsste ich es da einfügen?
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

rapster

1.
attr logdb DbLogType History

SVG.SZ.L.Heizung.gplot
# Created by FHEM/98_SVG.pm, 2016-01-02 13:06:25
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 'Schlafzimmer Links Heizung <L1>'
set ytics
set y2tics
set grid y2tics
set ylabel "Valve position (%)"
set y2label "Temperature in C"
set yrange [0:100]
set y2range [5:25]

#logdb SZ.Heizung.L_Clima:measured-temp
#logdb SZ.Heizung.L_Clima:ValvePosition
#logdb SZ.Heizung.L_Clima:desired-temp:0::$val=($val=~'off'?0:$val)

plot "<IN>" using 1:2 axes x1y2 title 'Temperatur' ls l0 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 title 'Ventil' ls l1 lw 1 with steps,\
     "<IN>" using 1:2 axes x1y2 title 'Eingestellt' ls l2 lw 1 with steps


Im Bild siehst du wo du die function im gplot-editor eintragen kannst.

Amenophis86

Scheint zu funktionieren. Vielen Dank.
Wobei ich deine geänderte Zeile jedoch nicht verstehe :D
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

rapster

#logdb SZ.Heizung.L_Clima:desired-temp:0::$val=($val=~'off'?0:$val)

Logdevice: logdb
Device: SZ.Heizung.L_Clima
Reading: desired-temp
default-value: 0

$val ist dein wert.
In der if Abfrage (if ? then : else) wird $val festgelegt.
Wenn $val off entspricht, wird $val zu 0, andernfalls wird $val zu $val, also nicht verändert.

Siehe auch: http://www.fhemwiki.de/wiki/SVG-Plots_von_FileLog_auf_DbLog_umstellen#.40fld

Amenophis86

Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

frank

kurz angemerkt: off beim rt bedeutet nicht NULL, sondern irgendwas unter 6 grad.
du brauchst also eigentlich nur den kleinsten numerischen wert am rt einstellen und alles ist gut.  ;)
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