FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: fretti am 17 November 2023, 13:33:29

Titel: [Gelöst] PERL WARNING: Use of uninitialized value $wert in string
Beitrag von: fretti am 17 November 2023, 13:33:29
Hallo,

Ich bekomme alle Minute 2 x so einen Eintrag im LOG.

2023.11.17 13:26:34 1: PERL WARNING: Use of uninitialized value $wert in string eq at (eval 2309009) line 1.

Nach anschalten von stacktrace kommt das:
2023.11.17 13:26:34 1: stacktrace:
2023.11.17 13:26:34 1:     main::__ANON__                      called by (eval 2309009) (1)
2023.11.17 13:26:34 1:     (eval)                              called by ./FHEM/33_readingsGroup.pm (357)
2023.11.17 13:26:34 1:     main::lookup2                       called by ./FHEM/33_readingsGroup.pm (1445)
2023.11.17 13:26:34 1:     main::readingsGroup_Notify          called by fhem.pl (3982)
2023.11.17 13:26:34 1:     main::CallFn                        called by fhem.pl (3894)
2023.11.17 13:26:34 1:     main::DoTrigger                     called by fhem.pl (4283)
2023.11.17 13:26:34 1:     main::Dispatch                      called by ./FHEM/00_MQTT2_CLIENT.pm (599)
2023.11.17 13:26:34 1:     main::MQTT2_CLIENT_Read             called by ./FHEM/00_MQTT2_CLIENT.pm (614)
2023.11.17 13:26:34 1:     main::__ANON__                      called by fhem.pl (3505)
2023.11.17 13:26:34 1:     main::HandleTimeout                 called by fhem.pl (705)


Kann man daraus ersehen, wo ggf der Fehler steckt?

VG Thomas
Titel: Aw: PERL WARNING: Use of uninitialized value $wert in string
Beitrag von: JoWiemann am 17 November 2023, 13:38:04
Hallo,

ein List von Deiner ReadingsGroup könnte schon mal ein Anfang sein.

Grüße Jörg
Titel: Aw: PERL WARNING: Use of uninitialized value $wert in string
Beitrag von: fretti am 17 November 2023, 13:41:56
Ja, hab ich mal gelöscht, kommt wirklich von meiner einzigen ReadingGroup.

defmod rg_batterie_status readingsGroup .*:[bB]attery
attr rg_batterie_status alias BatterieStatus
attr rg_batterie_status mapping %ALIAS
attr rg_batterie_status notime 1
attr rg_batterie_status room 4.1.Sensoren
attr rg_batterie_status style style="text-align:left"
attr rg_batterie_status valueFormat { my ($wert) = $VALUE =~ m/(\d+)/;; return $VALUE if ($wert eq "");; return "critical" if ($wert < 25);; return "low" if ($wert < 50);; return "ok" if ($wert > 50);;}
attr rg_batterie_status valueIcon { my ($wert) = $VALUE =~ m/(\d+)/;; $wert = 100 if ($VALUE eq "ok");; $wert = 49 if ($VALUE eq "low");; $wert = 0 if ($VALUE eq "critical");; return "<i class='fa fa-battery-0 green fa-2x'><span class='myhidden'>critical</i>" if ($wert < 25);; return "<i class='fa fa-battery-0 green fa-2x'><span class='myhidden'>low</i>" if ($wert < 50);; return "<i class='fa fa-battery-4 green fa-2x'></i>".FW_makeImage('measure_battery_100@green',"people_sensor","rotate-90").FW_makeImage('fa-battery',"xx");;}


Wahrscheinlich liefert ein Sensor keinen Wert, sondern einen string!? Könnte das das Problem sein?

LG Thomas

Titel: Aw: PERL WARNING: Use of uninitialized value $wert in string
Beitrag von: JoWiemann am 17 November 2023, 14:04:35
Hallo,

Du kannst Dir mit: list .* battery

alle entsprechenden Readings anzeigen lassen.

Grüße Jörg
Titel: Aw: PERL WARNING: Use of uninitialized value $wert in string
Beitrag von: fretti am 17 November 2023, 14:13:12
Hallo Jörg,

ja, da sind welche dabei, die senden nur "ok", manche z.B 80%, andere z.B. no.

Jetzt bin ich nicht der RegEx-Experte, um das alles abzufangen.

Kann man das auf die eingrenzen, die Zahlen liefern?
Oder gibt es eine andere Möglichkeit, alle zu erfassen?
Titel: Aw: PERL WARNING: Use of uninitialized value $wert in string
Beitrag von: JoWiemann am 20 November 2023, 09:11:41
Hallo,

ich würde folgende Codezeile ändern wollen:

attr rg_batterie_status valueIcon { my ($wert) = $VALUE =~ m/(\d+)/;; $wert = 100 if ($VALUE eq "ok");; $wert = 49 if ($VALUE eq "low");; $wert = 0 if ($VALUE eq "critical");; return "<i class='fa fa-battery-0 green fa-2x'><span class='myhidden'>critical</i>" if ($wert < 25);; return "<i class='fa fa-battery-0 green fa-2x'><span class='myhidden'>low</i>" if ($wert < 50);; return "<i class='fa fa-battery-4 green fa-2x'></i>".FW_makeImage('measure_battery_100@green',"people_sensor","rotate-90").FW_makeImage('fa-battery',"xx");;}
nach
attr rg_batterie_status valueIcon { my $wert;; $wert = 100 if ($VALUE eq "ok");; $wert = 49 if ($VALUE eq "low");; $wert = 0 if ($VALUE eq "critical");; return "<i class='fa fa-battery-0 green fa-2x'><span class='myhidden'>critical</i>" if ($wert < 25);; return "<i class='fa fa-battery-0 green fa-2x'><span class='myhidden'>low</i>" if ($wert < 50);; return "<i class='fa fa-battery-4 green fa-2x'></i>".FW_makeImage('measure_battery_100@green',"people_sensor","rotate-90").FW_makeImage('fa-battery',"xx");;}

my ($wert) = $VALUE =~ m/(\d+)/;; macht hier keinen Sinn. Auch muss $wert vorher initialisiert werden. Wird durch die RegEx nichts gefunden, so wird my ($wert) = $VALUE =~ m/(\d+)/;; auch nicht initialisiert.

Du kannst so etwas gut testen auf: https://www.tutorialspoint.com/execute_perl_online.php

#
# Hello World Program in Perl
#
# die beiden use müssen vorhanden sein, da ansonsten die Fehlermeldung nicht sichtbar wird
use strict;
use warnings;

my $VALUE = "99";
my ($wert) = $VALUE =~ m/(\d+)/;
print $wert;

Wenn Du hier my $VALUE = "ok" einsetzt, dann sieht Du die Fehlermeldung.

Grüße Jörg
Titel: Aw: PERL WARNING: Use of uninitialized value $wert in string
Beitrag von: fretti am 24 November 2023, 09:41:50
Hallo Jörg,

danke für den Hinweis und deine Vorschlag, ich habe den noch ein klein wenig angepasst, weil da auch noch eine "80 %"  und ein "no" dabei war, jetzt kommen keine Fehlermeldungen im LOG.

LG Thomas
Titel: Aw: [Gelöst] PERL WARNING: Use of uninitialized value $wert in string
Beitrag von: betateilchen am 24 November 2023, 10:51:26
Drei Mal gelesen, aber die Klammer um $wert bei "my ($wert) = ..." verstehe ich immer noch nicht.