Heizungsplot bringt PERL WARNUNG im Logfile

Begonnen von frober, 12 Oktober 2014, 12:47:26

Vorheriges Thema - Nächstes Thema

frober

Hallo Leute,

ich habe mir ein Plot von meiner Heizung (Luxtronik 2) erzeugt, damit ich die Schaltzeiten der Wärme-und Zirkulationonspumpen überwachen kann.
Soweit funktioniert alles super, jedoch bekomme ich im Logfile dauernd eine "PERL WARNINGS":


2014.10.12 12:30:20 1: PERL WARNING: Use of uninitialized value $fld[4] in pattern match (m//) at (eval 14676) line 1, <GEN526> line 1467.
2014.10.12 12:30:20 1: PERL WARNING: Use of uninitialized value $fld[4] in pattern match (m//) at (eval 14679) line 1, <GEN526> line 1480.
2014.10.12 12:32:06 1: PERL WARNING: Use of uninitialized value $fld[4] in pattern match (m//) at (eval 15478) line 1, <GEN534> line 1467.
2014.10.12 12:32:06 1: PERL WARNING: Use of uninitialized value $fld[4] in pattern match (m//) at (eval 15481) line 1, <GEN534> line 1480.
2014.10.12 12:33:01 1: PERL WARNING: Use of uninitialized value $fld[4] in pattern match (m//) at (eval 16280) line 1, <GEN538> line 1467.
2014.10.12 12:33:01 1: PERL WARNING: Use of uninitialized value $fld[4] in pattern match (m//) at (eval 16283) line 1, <GEN538> line 1480.


Hier noch meine Plotdatei:
# Created by FHEM/98_SVG.pm, 2014-10-11 17:22:41
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 'Zirkulationspumpe'
set ytics ("Aus" 0, "An" 1)
set y2tics
set grid
set ylabel "Status"
set y2label "Durchfluß L/h"
set yrange [0.0:1.1]

#FileLog 4:Heizung.flowRate\x3a:0:
#FileLog 4:Heizung.hotWaterSwitchingValve\x3a:0:$fld[3]=~"on"?1:0
#FileLog 4:Heizung.hotWaterCircPumpExtern\x3a:0:$fld[3]=~"on"?1:0
#FileLog 4:Heizung.opStateHeatPump1\x3a:0:$fld[4]=~"laeuft"?1:0

plot "<IN>" using 1:2 axes x1y2 title 'Heizungszirkulation' ls l0 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 title 'Warmwasserumschaltung' ls l2fill lw 1 with steps,\
     "<IN>" using 1:2 axes x1y1 title 'Warmwasserzirkulation' ls l1fill_stripe lw 1 with steps,\
     "<IN>" using 1:2 axes x1y1 title 'Wärmepumpe' ls l6fill lw 1 with steps


Hat jemand eine Idee, woran das liegt?

Danke und Gruß
Bernd
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

betateilchen

Du arbeitest mit einer Variablen $fld[4] die es im jeweiligen Datensatz aber nicht gibt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

... also es gibt Zeilen im Logfile mit Heizung.opStateHeatPump1, aber ohne $fld[4], was Umgangssprachlich als Spalte 5 bezeichnet wird. Ich habe FileLog ergaenzt, damit nach der Warnung das betreffende eval (in diesem Fall
$fld[4]=~"laeuft"?1:0) angezeigt wird.

frober

#3
Hallo,

danke für die Antworten.

Betateilchen:
Wenn es diese Variable nicht gibt, wieso funktioniert es bis auf die Fehlermeldung? Die Schaltzyklen der WP werden im Plot angezeigt.

Bei Heizung.opStateHeatPump1 steht im Logfile "Waermepumpe steht" oder "Waermepumpe laeuft" , da dadurch ein weiteres Leerzeichen vorhanden ist und nur steht oder laeuft zu unterscheiden ist, habe ich Spalte 5 angenommen.

Heisst das, ich muß Spalte 4 ($fld[3]) annehmem und dafür den ganzen Text mit Leerzeichen vergleichen, geht das?
Falls ja, wie wird das Leerzeichen dargestellt?
Mit  "Waermepumpe laeuft"  funktioniert es nicht.

Danke und Gruß
Bernd

Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

rudolfkoenig

@frober: bitte meinen Beitrag auch/genau lesen.
Deine Vorschlaege funktionieren nicht (oder ich verstehe sie nicht).
Die direkte Loesung waere
$fld[4]=~"laeuft"?1:0
durch
$fld[4]&&$fld[4]=~"laeuft"?1:0zu ersetzen. Die bessere Loesung ist zu pruefen, wieso Zeilen mit Heizung.opStateHeatPump1 aber ohne 5. Spalte im Log stehen, und das vermeiden.

frober

Hallo rudolfkoenig,

In meinem Logfile steht:
2014-10-01_00:08:13 Heizung opStateHeatPump1: Waermepumpe steht

Die Daten kommen direkt von Luxtronik2.pm bzw. von der WP.

Ich habe deinen Beitrag gelesen, wenn ich es richtig verstanden habe , gibt es keine Spalte 5. D.h. " Waermepumpe steht" wäre nur eine Spalte.

Ich habe dein Vorschlag umgesetzt, die Fehlermeldungen sind weg.
Nur verstehe ich es nicht, übersetzt heißt das 'wenn in Spalte 5 und Spalte 5  laeuft steht dann 1 ansonsten 0' .
Wieso zweimal die gleiche Spalte?


Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

rudolfkoenig

#6
Ich formuliere deutlicher: es gibt einige Zeilen mit Heizung.opStateHeatPump1 im Log ohne Spalte 5. Andere Zeilen mit Heizung.opStateHeatPump1 haben eine Spalte 5, deswegen sieht man was im Plot.

Mein Vorschlag ist so zu lesen:
((falls Spalte 5 exisitert, ist nicht 0 und ist kein leerstring) und (Spalte 5 beinhaltet laeuft)), dann 1 sonst 0"

Wobei "ist nicht 0 und ist kein leerstring" in diesem Fall irrelevant ist.
$fld[X] wird nie Leerzeichen enthalten, weil @fld so entsteht, dass die Log-Zeile bei Leerzeichen aufgeteilt wird.

frober

Super, danke,
jetzt habe ich es verstanden.
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

topfi

Puuuh, mein Log habt ihr auch mit Warnungen geflutet.

Glücklicherweise steht ja hier die genaue Erklärung, sonst hätte ich mir einen Wolf gesucht. Danke dafür. Es ist doch eher die Regel als die Ausnahme, dass manche Werte mehrfach in verschiedenen Spalten auftauchen. Mit dem thread hier ist das kein Problem und erzieht tatsächlich zum sauberen Scripten, keine Frage.

Aber von allein findet doch kein Mensch den Grund und in ein paar Tagen ist der Thread in den Tiefen verschwunden.

Bartimaus

Zitat von: rudolfkoenig am 13 Oktober 2014, 09:36:58
@frober: bitte meinen Beitrag auch/genau lesen.
Deine Vorschlaege funktionieren nicht (oder ich verstehe sie nicht).
Die direkte Loesung waere
$fld[4]=~"laeuft"?1:0
durch
$fld[4]&&$fld[4]=~"laeuft"?1:0zu ersetzen. Die bessere Loesung ist zu pruefen, wieso Zeilen mit Heizung.opStateHeatPump1 aber ohne 5. Spalte im Log stehen, und das vermeiden.


Danke für den Tip. Mein Syslog wurde auch zugemüllt. Bis ich dann die Korrektur von Rudolf König in den Plot eines Fensterkontakts eingebaut habe, seitdem ist Ruhe.
LG
B.


FHEM@Intel-J4105@Debian-LXC, CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly