Use of uninitialized value $fld[3]

Begonnen von WolfgangV, 13 April 2024, 10:16:55

Vorheriges Thema - Nächstes Thema

WolfgangV

Hallo,

ich habe ein Problem mit dem Plotten der Anwesenheit aus einem Logfile. In den SVG-Logs werden die folgenden Werte geloggt:

Zitat2024-04-13_10:10:02 Anwesenheit_Esszimmer last-sender: 1.1.121
2024-04-13_10:10:02 Anwesenheit_Esszimmer getG1: on
2024-04-13_10:10:02 Anwesenheit_Esszimmer on
Beim last-sender handelt es sich um die KNX-Adresse des Bewegungsmelders.

Im Plot gebe ich dann in der Spalte
Zitat$fld[3]=~"on"?2:0
und
Zitat$fld[3]=~"on"?1:0
usw ein, um verschieden hohe Balken zu erzeugen, was auch an sich gut klappt.


Eine Darstellung im Plot erziele ich allerdings nicht, wenn ich dort "on" oder "off" auswähle. Zu sehen ist bloß etwas, wenn ich alles auswähle, also ".*"

Dann allerdings müllt mir das fhem-log zu mit der Meldung:

Zitat2024.04.13 09:53:11 1: PERL WARNING: Use of uninitialized value $fld[3] in pattern match (m//) at (eval 367704) line 1, <GEN87830> line 74.
2024.04.13 09:53:11 3: eval: $fld[3]=~"on"?0.5:0
2024.04.13 09:53:11 1: PERL WARNING: Use of uninitialized value $fld[3] in pattern match (m//) at (eval 367707) line 1, <GEN87830> line 77.
2024.04.13 09:53:11 3: eval: $fld[3]=~"on"?0.5:0

Das nimme ein solches Ausmaß an, dass damit Fhem nicht mehr korrekt läuft, weil das log riesige Ausmaße annimmt.

Wer hat dazu eine gute Idee?

Gruß


Wolfgang


Raspi5  HmUART, Jeelink, VU+Duo2, Viera, Sonos, HM-CC-RT-DN,     
HM-WDS30-OT2-SM, HM-LC-Dim1TPBU-FM,    
Jeelink, TUL

betateilchen

Zitat von: WolfgangV am 13 April 2024, 10:16:55Wer hat dazu eine gute Idee?

Sogar mindestens drei...

  • im richtigen Unterforum zu SVG fragen - bzw. diesen Thread mit dem Button unten links dorthin verschieben
  • die kompletten Zeilen aus dem gplot file posten und nicht nur die Funktion, durch die die Warnung im Log entsteht
  • im gplot-Editor mal auf den Button "Show preprocessed input" klicken, um herauszufinden, welche Abfrage die Meldung erzeugt
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

WolfgangV

Hi,

ich hatte zwar gesucht, aber das Unterforum nicht gefunden...

Hier ist das gplot.file


# Created by FHEM/98_SVG.pm, 2024-04-13 14:31:45
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 'Anwesenheit Wohnbereichszonen'
set ytics
set y2tics
set grid
set ylabel "an"
set y2label "aus"

#SVG_FileLog_Anwesenheit_Esszimmer 4:Anwesenheit_Esszimmer.*::$fld[3]=~"on"?3:0
#SVG_FileLog_Anwesenheit_Wohnzimmer 4:Anwesenheit_Wohnzimmer.*::$fld[3]=~"on"?2:0
#SVG_FileLog_Anwesenheit_Kueche 4:Anwesenheit_Kueche.*::$fld[3]=~"on"?1:0

plot "<IN>" using 1:2 axes x1y2 title 'Anwesenheit Esszimmer' ls l0 lw 0.2 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Anwesenheit Wohnzimmer' ls l1 lw 0.2 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Anwesenheit Küche' ls l2 lw 0.2 with lines



Gruß

Wolfgang
Raspi5  HmUART, Jeelink, VU+Duo2, Viera, Sonos, HM-CC-RT-DN,     
HM-WDS30-OT2-SM, HM-LC-Dim1TPBU-FM,    
Jeelink, TUL

WolfgangV

Hi,

...und jetzt moniert das Log noch irgendwelche Rechenoperationen mit den KNX-Geräteadressen...??? Ich habe aber nichts derartiges bewusst angestoßen.

Zitat2024.04.13 14:33:13 1: PERL WARNING: Argument "1.1.115" isn't numeric in numeric lt (<) at ./FHEM/92_FileLog.pm line 1049, <GEN128607> line 74.
2024.04.13 14:33:13 1: PERL WARNING: Argument "1.1.115" isn't numeric in numeric lt (<) at ./FHEM/92_FileLog.pm line 1049, <GEN128607> line 77.
2024.04.13 14:33:13 1: PERL WARNING: Argument "1.1.115" isn't numeric in numeric lt (<) at ./FHEM/92_FileLog.pm line 1049, <GEN128607> line 80.
2024.04.13 14:33:13 1: PERL WARNING: Argument "1.1.115" isn't numeric in numeric lt (<) at ./FHEM/92_FileLog.pm line 1049, <GEN128607> line 83.
2024.04.13 14:33:13 1: PERL WARNING: Argument "1.1.115" isn't numeric in numeric lt (<) at ./FHEM/92_FileLog.pm line 1049, <GEN128607> line 86.
2024.04.13 14:33:13 1: PERL WARNING: Argument "1.1.115" isn't numeric in numeric lt (<) at ./FHEM/92_FileLog.pm line 1049, <GEN128607> line 89.
2024.04.13 14:33:13 1: PERL WARNING: Argument "1.1.115" isn't numeric in numeric lt (<) at ./FHEM/92_FileLog.pm line 1049, <GEN128607> line 92.
2024.04.13 14:33:13 1: PERL WARNING: Argument "1.1.115" isn't numeric in numeric lt (<) at ./FHEM/92_FileLog.pm line 1049, <GEN128607> line 95.
2024.04.13 14:33:13 1: PERL WARNING: Argument "1.1.115" isn't numeric in numeric lt (<) at ./FHEM/92_FileLog.pm line 1049, <GEN128607> line 98.
2024.04.13 14:33:13 1: PERL WARNING: Argument "1.1.121" isn't numeric in numeric gt (>) at ./FHEM/98_SVG.pm line 1631.
2024.04.13 14:33:13 1: PERL WARNING: Argument "1.1.112" isn't numeric in numeric gt (>) at ./FHEM/98_SVG.pm line 1631.
2024.04.13 14:33:13 1: PERL WARNING: Argument "1.1.16" isn't numeric in numeric gt (>) at ./FHEM/98_SVG.pm line 1631.
2024.04.13 14:33:13 1: PERL WARNING: Argument "1.1.115" isn't numeric in numeric gt (>) at ./FHEM/98_SVG.pm line 1631.
2024.04.13 14:33:13 1: PERL WARNING: Argument "1.1.115" isn't numeric in subtraction (-) at ./FHEM/98_SVG.pm line 2175.
2024.04.13 14:33:13 1: PERL WARNING: Argument "1.1.112" isn't numeric in subtraction (-) at ./FHEM/98_SVG.pm line 2175.
2024.04.13 14:33:13 1: PERL WARNING: Argument "1.1.16" isn't numeric in subtraction (-) at ./FHEM/98_SVG.pm line 2175.
2024.04.13 14:33:13 1: PERL WARNING: Argument "1.1.121" isn't numeric in subtraction (-) at ./FHEM/98_SVG.pm line 2175.

Gruß


Wolfgang
Raspi5  HmUART, Jeelink, VU+Duo2, Viera, Sonos, HM-CC-RT-DN,     
HM-WDS30-OT2-SM, HM-LC-Dim1TPBU-FM,    
Jeelink, TUL

betateilchen

Meines Erachtens greifst Du schlichtweg auf das falsche Feld zu.

$fld[3] ist halt nicht in jeder Zeile vorhanden, der Zugriff mit dem .* scheint mir wenig sinnvoll zu sein.

Zitat von: WolfgangV am 13 April 2024, 10:16:55wenn ich dort "on" oder "off" auswähle. Zu sehen ist bloß etwas, wenn ich alles auswähle, also ".*"

Hast Du mal versucht, den Zugriff richtig zu gestalten und das entsprechende reading zur Darstellung auszuwählen? Man wählt doch da nicht einen bestimmten Wert ("on" oder "off") aus.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

WolfgangV

Hallo,

ich habe natürlich nicht nur "on" oder "off" gewählt. Die kompletten Readings heißen dann "Esszimmer_Anwesenheit.on" usw.
Aber dann wird leider im Plot überhaupt nichts angezeigt.

Gruß

Wolfgang
Raspi5  HmUART, Jeelink, VU+Duo2, Viera, Sonos, HM-CC-RT-DN,     
HM-WDS30-OT2-SM, HM-LC-Dim1TPBU-FM,    
Jeelink, TUL

WolfgangV

Hi,

so wie ich $fld[3]=~"on"?2:0 verstehe, gibt doch die 3 das Reading in der Reihenfolge im Filelog an, das ausgelesen wird?
Ich habe alle Zahlen von 1-4 (obwohl es ja nur 3 sind) eingesetzt und erhalte bei 3 und 4 die besagte Fehlermeldung im Log. Bei 1 und 2 gibts keine Fehlermeldung, aber leider auch keinerlei Anzeige.

Kann es möglicherweise daran liegen, dass das Reading nicht nur "on" oder "off" lautet, sondern "Esszimer_Anwesenheit.on"?

Gruß

Wolfgang
Raspi5  HmUART, Jeelink, VU+Duo2, Viera, Sonos, HM-CC-RT-DN,     
HM-WDS30-OT2-SM, HM-LC-Dim1TPBU-FM,    
Jeelink, TUL

betateilchen

Zitat von: WolfgangV am 13 April 2024, 15:18:26Die kompletten Readings heißen dann "Esszimmer_Anwesenheit.on" usw.

Nein. Du hast den Zusammenhang zwischen device und reading vielleicht noch nicht ganz verstanden.

"Esszimmer_Anwesenheit" ist der Name des device.

Einen readingName gibt es dabei nicht, weil "on" den Wert des readings "state" darstellt, wobei der readingName "state" aber grundsätzlich nicht ins Log geschrieben wird. Das ist eine Besonderheit, die nur für "state" gilt. Wenn Du die Werte von "state" plotten willst, musst Du den Zähler von $fld[] entsprechend um 1 reduzieren.



Angenommen, ich habe ein Device "CUX_Wetter" mit dem Wert "temperature" und im Log steht eine Logzeile wie:

2024-04-13_15:28:34 CUX_Wetter temperature: 18

Dann muss im gplot stehen:

#testLog 4:CUX_Wetter.temperature::

damit das Plotten der Temperatur funktioniert.

Für Dein Beispiel gilt:

2024-04-13_10:10:02 Anwesenheit_Esszimmer last-sender: 1.1.121
2024-04-13_10:10:02 Anwesenheit_Esszimmer getG1: on
2024-04-13_10:10:02 Anwesenheit_Esszimmer on

  • in der ersten Zeile heißt das reading "last-sender"
  • in der zweiten Zeile heißt das reading "getG1"
  • in der dritten Zeile gibt es keinen Namen für das reading, das ist die Zeile, in der "state" geschrieben wird, dabei wird aber "state" als readingName nicht mit ins Log geschrieben
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Deine Logdaten habe ich in ein Test-Log geschrieben und mir dann ein SVG erzeugt.

get testLog CURRENT INT 2024-04-13_00:00:00 2024-04-13_23:59:59 2:Anwesenheit_Esszimmer.(on|off)::$fld[2]=~/on/?1:0

2024-04-13_10:10:02 1
2024-04-13_11:10:02 0
#2:Anwesenheit_Esszimmer.(on|off)::$fld[2]=~/on/?1:0

Die entscheidende Zeile in der gplot Datei sieht so aus:

#testLog 2:Anwesenheit_Esszimmer.(on|off)::$fld[2]=~/on/?1:0
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

WolfgangV

Hallo,

herzlichen Dank! Da wäre ich ohne Unterstützung nicht drauf gekommen.Es ist wirklich toll, wie man hier unterstützt wird!
Mein Plot sieht jetzt dann für drei Anwesenheitszonen so aus.

Gruß

Wolfgang
Du darfst diesen Dateianhang nicht ansehen.
Raspi5  HmUART, Jeelink, VU+Duo2, Viera, Sonos, HM-CC-RT-DN,     
HM-WDS30-OT2-SM, HM-LC-Dim1TPBU-FM,    
Jeelink, TUL

WolfgangV

Hi,

leider zeigt das log immer noch den Fehler, allerdings merkwürdigerweise nur beim Bewegungsmelder Esszimmer.

Zitat2024.04.14 09:06:10 1: PERL WARNING: Argument "1.1.121" isn't numeric in numeric lt (<) at ./FHEM/92_FileLog.pm line 1049, <GEN72583> line 3312.
2024.04.14 09:06:10 1: PERL WARNING: Argument "1.1.121" isn't numeric in numeric lt (<) at ./FHEM/92_FileLog.pm line 1049, <GEN72583> line 3315.

...und das hundert- bis tausendfach!!!

Und das ist der jetzige Code:

# Created by FHEM/98_SVG.pm, 2024-04-14 09:04:48
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 'Anwesenheit Wohnbereichszonen'
set ytics
set y2tics
set grid
set ylabel "an"
set y2label "aus"

#SVG_FileLog_Anwesenheit_Esszimmer 4:Anwesenheit_Esszimmer.(on|off)::$fld[2]=~/on/?2:0
#SVG_FileLog_Anwesenheit_Wohnzimmer 4:Anwesenheit_Wohnzimmer.(on|off)::$fld[2]=~/on/?1.5:0
#SVG_FileLog_Anwesenheit_Kueche 4:Anwesenheit_Kueche.(on|off)::$fld[2]=~/on/?0.75:0

plot "<IN>" using 1:2 axes x1y2 title 'Anwesenheit Esszimmer' ls l8fill lw 0.2 with steps,\
     "<IN>" using 1:2 axes x1y2 title 'Anwesenheit Wohnzimmer' ls l3fill lw 0.2 with steps,\
     "<IN>" using 1:2 axes x1y2 title 'Anwesenheit Küche' ls l5fill lw 0.2 with steps

Gruß


Wolfgang
Raspi5  HmUART, Jeelink, VU+Duo2, Viera, Sonos, HM-CC-RT-DN,     
HM-WDS30-OT2-SM, HM-LC-Dim1TPBU-FM,    
Jeelink, TUL

betateilchen

Zitat von: WolfgangV am 13 April 2024, 23:37:40Mein Plot sieht jetzt dann für drei Anwesenheitszonen so aus.

Das ist aber extrem unübersichtlich und läßt sich bestimmt noch "schöner" machen. Mit gefüllten Flächen würde ich da ungern arbeiten.
Überlege doch mal, ob Du die drei Werte nicht einfach in unterschiedliche Intervalle umrechnen möchtest.

#testLog 2:Anwesenheit_Kueche.(on|off)::$fld[2]=~/on/?0.8:0
#testLog 2:Anwesenheit_Wohnzimmer.(on|off)::$fld[2]=~/on/?1.8:1
#testLog 2:Anwesenheit_Esszimmer.(on|off)::$fld[2]=~/on/?2.8:2

Und dann definierst Du noch den yrange mit [0:3] und alles wird schick
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: WolfgangV am 14 April 2024, 09:35:31leider zeigt das log immer noch den Fehler, allerdings merkwürdigerweise nur beim Bewegungsmelder Esszimmer.

Dann schau Dir halt mal den preprocessed input an. Das hatte ich in meiner ersten Antwort schon als ersten Schritt für eine Lösungssuche empfohlen.

Bist Du sicher, dass die Warnung aus dem gleichen SVG device kommt oder plottest Du den Bewegungsmelder im Esszimmer eventuell auch noch in einem anderen SVG?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

WolfgangV

Hi,

der preprocessed input ist jetzt deutlich übersichtlicher als gestern, aber immer noch ziemlich lang...

get SVG_FileLog_Anwesenheit_Esszimmer CURRENT INT 2024-04-13_00:00:00 2024-04-13_23:59:59 4:Anwesenheit_Kueche.(on|off)::$fld[2]=~/on/?0.8:0

#4:Anwesenheit_Kueche.(on|off)::$fld[2]=~/on/?0.8:0

get SVG_FileLog_Anwesenheit_Wohnzimmer CURRENT INT 2024-04-13_00:00:00 2024-04-13_23:59:59 4:Anwesenheit_Wohnzimmer.(on|off)::$fld[2]=~/on/?1.8:1

2024-04-13_00:05:08 1
2024-04-13_00:05:08 1
2024-04-13_00:52:31 1.8
2024-04-13_00:52:31 1.8
2024-04-13_00:57:48 1
2024-04-13_00:57:48 1
2024-04-13_08:13:19 1.8
2024-04-13_08:13:19 1.8
2024-04-13_08:18:29 1
2024-04-13_08:18:29 1
2024-04-13_09:23:06 1.8
2024-04-13_09:23:07 1.8
2024-04-13_09:30:45 1
2024-04-13_09:30:45 1
2024-04-13_10:17:19 1.8
2024-04-13_10:17:19 1.8
2024-04-13_10:23:47 1
2024-04-13_10:23:47 1
2024-04-13_14:20:51 1.8
2024-04-13_14:20:51 1.8
2024-04-13_14:26:00 1
2024-04-13_14:26:00 1
2024-04-13_14:50:45 1.8
2024-04-13_14:50:45 1.8
2024-04-13_14:55:50 1
2024-04-13_14:55:50 1
2024-04-13_15:16:22 1.8
2024-04-13_15:16:22 1.8
2024-04-13_15:21:26 1
2024-04-13_15:21:26 1
2024-04-13_15:30:23 1.8
2024-04-13_15:30:23 1.8
2024-04-13_15:35:35 1
2024-04-13_15:35:35 1
2024-04-13_17:30:17 1.8
2024-04-13_17:30:18 1.8
2024-04-13_17:35:27 1
2024-04-13_17:35:27 1
2024-04-13_18:59:08 1.8
2024-04-13_18:59:08 1.8
2024-04-13_19:29:43 1
2024-04-13_19:29:43 1
2024-04-13_19:30:45 1.8
2024-04-13_19:37:02 1
2024-04-13_19:37:02 1
2024-04-13_19:42:12 1.8
2024-04-13_19:42:12 1.8
2024-04-13_19:47:12 1
2024-04-13_19:47:12 1
2024-04-13_19:47:49 1.8
2024-04-13_19:47:50 1.8
2024-04-13_19:57:28 1
2024-04-13_19:57:28 1
2024-04-13_19:59:03 1.8
2024-04-13_19:59:04 1.8
2024-04-13_20:11:14 1
2024-04-13_20:11:14 1
2024-04-13_20:13:16 1.8
2024-04-13_20:25:46 1
2024-04-13_20:25:46 1
2024-04-13_20:26:26 1.8
2024-04-13_20:26:26 1.8
2024-04-13_20:31:43 1
2024-04-13_20:31:43 1
2024-04-13_20:33:04 1.8
2024-04-13_20:33:04 1.8
2024-04-13_20:51:28 1
2024-04-13_20:51:28 1
2024-04-13_21:04:27 1.8
2024-04-13_21:04:27 1.8
2024-04-13_21:12:17 1
2024-04-13_21:12:17 1
2024-04-13_21:17:01 1.8
2024-04-13_21:17:01 1.8
2024-04-13_21:23:01 1
2024-04-13_21:23:01 1
2024-04-13_21:31:31 1.8
2024-04-13_21:31:31 1.8
2024-04-13_21:36:33 1
2024-04-13_21:36:33 1
2024-04-13_21:36:57 1.8
2024-04-13_21:36:57 1.8
2024-04-13_22:00:03 1
2024-04-13_22:00:03 1
2024-04-13_22:05:32 1.8
2024-04-13_22:05:32 1.8
2024-04-13_22:19:22 1
2024-04-13_22:19:22 1
2024-04-13_22:21:32 1.8
2024-04-13_22:21:32 1.8
2024-04-13_22:40:49 1
2024-04-13_22:40:49 1
2024-04-13_22:43:23 1.8
2024-04-13_22:43:23 1.8
2024-04-13_23:05:57 1
2024-04-13_23:05:58 1
2024-04-13_23:10:29 1.8
2024-04-13_23:15:28 1
2024-04-13_23:15:29 1
2024-04-13_23:15:30 1.8
2024-04-13_23:24:31 1
2024-04-13_23:24:32 1
2024-04-13_23:24:34 1.8
2024-04-13_23:24:34 1.8
2024-04-13_23:29:37 1
2024-04-13_23:29:38 1
2024-04-13_23:29:39 1.8
2024-04-13_23:29:39 1.8
2024-04-13_23:34:41 1
2024-04-13_23:34:42 1
2024-04-13_23:34:43 1.8
2024-04-13_23:34:44 1.8
2024-04-13_23:45:29 1
2024-04-13_23:45:29 1
2024-04-13_23:45:35 1.8
2024-04-13_23:45:35 1.8
#4:Anwesenheit_Wohnzimmer.(on|off)::$fld[2]=~/on/?1.8:1

get SVG_FileLog_Anwesenheit_Kueche CURRENT INT 2024-04-13_00:00:00 2024-04-13_23:59:59 4:Anwesenheit_Esszimmer.(on|off)::$fld[2]=~/on/?2.8:2

#4:Anwesenheit_Esszimmer.(on|off)::$fld[2]=~/on/?2.8:2

Gruß

Wolfgang
Raspi5  HmUART, Jeelink, VU+Duo2, Viera, Sonos, HM-CC-RT-DN,     
HM-WDS30-OT2-SM, HM-LC-Dim1TPBU-FM,    
Jeelink, TUL

betateilchen

Zitat von: WolfgangV am 14 April 2024, 10:20:04der preprocessed input ist jetzt deutlich übersichtlicher als gestern, aber immer noch ziemlich lang...

Das ist völlig normal, das ist die Liste aller im plot darzustellenden Datenpunkte.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!