Autor Thema: SVG Plot HM-CC-RT-DN Heizung in OFF Stellung PEARL WARNING Lösung  (Gelesen 2312 mal)

Offline Amenophis86

  • Hero Member
  • *****
  • Beiträge: 2636
  • Anti-Statement befreite Zone ;)
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 ;)
FHEM auf Raspberry3, Betriebssystem Jessy, HMLan, HM Komponenten, LD382A, H801, Sonoff, Harmony Hub und vieles mehr. Einfach ein tolles universelles System

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 21114
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.

Offline Amenophis86

  • Hero Member
  • *****
  • Beiträge: 2636
  • Anti-Statement befreite Zone ;)
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.
« Letzte Änderung: 04 Mai 2016, 12:08:09 von Amenophis86 »
FHEM auf Raspberry3, Betriebssystem Jessy, HMLan, HM Komponenten, LD382A, H801, Sonoff, Harmony Hub und vieles mehr. Einfach ein tolles universelles System

Offline rapster

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 924
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

Offline Amenophis86

  • Hero Member
  • *****
  • Beiträge: 2636
  • Anti-Statement befreite Zone ;)
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?
FHEM auf Raspberry3, Betriebssystem Jessy, HMLan, HM Komponenten, LD382A, H801, Sonoff, Harmony Hub und vieles mehr. Einfach ein tolles universelles System

Offline rapster

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 924
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.

Offline Amenophis86

  • Hero Member
  • *****
  • Beiträge: 2636
  • Anti-Statement befreite Zone ;)
Scheint zu funktionieren. Vielen Dank.
Wobei ich deine geänderte Zeile jedoch nicht verstehe :D
FHEM auf Raspberry3, Betriebssystem Jessy, HMLan, HM Komponenten, LD382A, H801, Sonoff, Harmony Hub und vieles mehr. Einfach ein tolles universelles System

Offline rapster

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 924
#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

Offline Amenophis86

  • Hero Member
  • *****
  • Beiträge: 2636
  • Anti-Statement befreite Zone ;)
Ah super, danke für die Erklärung und Hilfe.
FHEM auf Raspberry3, Betriebssystem Jessy, HMLan, HM Komponenten, LD382A, H801, Sonoff, Harmony Hub und vieles mehr. Einfach ein tolles universelles System

Online frank

  • Hero Member
  • *****
  • Beiträge: 7895
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: 5.8(SVN) => Pi3(jessie)
IO: CUL433_V3.3(1.00.01B53)|CUL868_V3.3(1.58)|HMLAN(0.965)|HMUSB2(0.967)|HMUART(1.4.1)
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