Hallo,
seit einem Monat habe ich in meinem Log ständig die Meldung Use of uninitialized value in concatenation (.) or string at ./FHEM/98_XmlList.pm line 55.
das kommt dann 20 -40 oder 60 linien und dann ist mal wieder kurz ruhe und dann wieder, aber ich find einfach nicht was der Auslöser ist...
Wie finde ich das raus
kann das sein das das mit dem Use of uninitialized value $ret in numeric le (<=) at FHEM/HttpUtils.pm line 449. zusammenhängt diese Meldung bekomm ich seit neustem auch immer mal wieder ....
:(
was macht die XmlList ??
Grüße
AET_FHEM
FHEM mal aktualisiert?
Benutzt Du irgendwelchen Custom-Code?
Gruß
Dan
FHEM ist aktuell
Custom code?? Tablet UI ??
Zitat von: AET_FHEM am 30 April 2017, 20:41:11
Custom code?? Tablet UI ??
Ich meine eher 99_myUtils.pm oder Ähnliches.
Gruß
Dan
ja mehrere
kann das an denen liegen?
Zitat von: AET_FHEM am 30 April 2017, 21:33:24
ja mehrere
kann das an denen liegen?
Wenn niemand Anderes ähnliche Probleme hat, dann würde ich dort anfangen zu suchen.
Gruß
Dan
bei mir ähnliche Meldung aber im Modul FHEMWEB
Use of uninitialized value $a in concatenation (.) or string at ./FHEM/01_FHEMWEB.pm
seit upgrade auf 5.8
Hallo
bei mir kam es von einer 99_myUtils
Der Tip von Den war Super!!!
--> hab mal alle aussortiert die ich nicht mehr benutze oder nur aus testzwecken drin waren, seit dem ist ruhe im Log :-)
aber was genau der auslöser war weiss ich noch nciht so genau!
Grüße
AET
Hallo zusammen,
ich habe ein ähnliches Problem. In meinem Fall ist die Warnung "Use of uninitialized value in concatenation (.) or string at (eval 38) line 1"
Die Warnung kommt von einem StateFormat den ich verwende um von einer Zeitangabe das Datum abzuschneiden:
stateFormat: {my @lichtan = split (" ",ReadingsVal("Abendlicht","timer_01_c01",""));return $lichtan[1]}
Zuvor hatte ich "return @lichtan[1]" verwendet - da habe ich aber eine Warnung bekommen es wäre besser "$" zu nehmen.
Hat jemand eine Idee, wie ich die Warnung loswerde?
Vielen Dank im Voraus,
Michael
entweder enthält timer_01_c01 in dem Fall gar kein Leerzeichen so das splitt nicht zwei Teile erzeugen kann oder kann gar nicht gelesen werden und du gibst als default "" vor das auch nicht mit split " " zerlegt werden kann. Das @ , $ Problem kannst du auch elegant mit my (undef,$lichtan) lösen da du eh immer nur $lichtan[1] benötigst, teste doch mal was zutrift mit:
{my (undef,$lichtan) = split (" ",ReadingsVal("Abendlicht","timer_01_c01"," 0:00")); return $lichtan if $lichtan; return "?:??"; }
Zitat von: Wzut am 04 Mai 2017, 07:57:36
entweder enthält timer_01_c01 in dem Fall gar kein Leerzeichen so das splitt nicht zwei Teile erzeugen kann oder kann gar nicht gelesen werden und du gibst als default "" vor das auch nicht mit split " " zerlegt werden kann. Das @ , $ Problem kannst du auch elegant mit my (undef,$lichtan) lösen da du eh immer nur $lichtan[1] benötigst, teste doch mal was zutrift mit:
{my (undef,$lichtan) = split (" ",ReadingsVal("Abendlicht","timer_01_c01"," 0:00")); return $lichtan if $lichtan; return "?:??"; }
Danke für den Tipp. Hat aber leider auch nicht geholfen. Ein wichtiger Hinweis vielleicht noch - die Meldung kommt immer nur bei einem restart von fhem. Aber ich probiere einfach noch ein bisschen in die Richtung ... Ein Leerzeichen ist definitiv enthalten und das stateformat arbeitet ja auch wie gewünscht...nur die Warnung im Log nach einen fhem restart stört mich >:(.
Zitat von: mthome am 04 Mai 2017, 07:25:08Die Warnung kommt von einem StateFormat den ich verwende um von einer Zeitangabe das Datum abzuschneiden:
Woher weißt Du das?
Gruß,
Thorsten
Zitat von: Thorsten Pferdekaemper am 04 Mai 2017, 23:24:48
Woher weißt Du das?
Gruß,
Thorsten
wenn ich die Stateformate entferne und neu starte ist die Meldung weg ;)
Hi,
kannst Du mal ein "list Abendlicht" liefern?
Gruß,
Thorsten
Hallo Thorsten,
Asche auf mein Haupt (ich glaube es kommt von einem anderen stateformat :o). Ich habe zwei DOIFs welche ich mit stateformat anzeigen lasse: Abendlicht und Rolladenautomatik.
Ich hatte immer beide stateformats rausgenommen (da ich dachte sind ja identisch) und die Warnungen waren weg. Jetzt habe ich nur den stateformat von Rolledenautomatik gelöscht und die Fehlermeldungen waren auch weg :-o. Sobald ich den stateformat bei Rolledenautomatik konfiguriere erhalte ich folgende Warnung im Log:
2017.05.07 09:30:36 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at (eval 33) line 1.
2017.05.07 09:30:36 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at (eval 36) line 1.
2017.05.07 09:30:36 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at (eval 38) line 1.
2017.05.07 09:30:36 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at (eval 40) line 1.
Hier beide lists (Rolladenautomatik und Abendlicht). Ich vermute die aktuelle Fehlermeldung kommt von Rolladenautomatik - deswegen dieser list zuerst.
Hier list Rolladenautomatik (Ui - ist das lang):
Internals:
DEF ([?status.Rolladenautomatik] eq "on" and ([{sunrise(+1200,"06:30","09:00")}|7] or [{sunrise(+1200,"05:00","09:00")}|8])) (set Rolladen_Auf on) DOELSEIF ([?status.Rolladenautomatik] eq "on" and ([{sunset(-900,"16:30","22:00")}|7] or [{sunset(-900,"16:30","22:00")}|8])) (set Rolladen_Ab on)
NAME Rolladenautomatik
NR 97
NTFY_ORDER 50-Rolladenautomatik
STATE WE: 06:30:00|7 - 21:17:29|7<br/>WT: 05:32:14|8 - 21:17:29|8
TYPE DOIF
Readings:
2017-05-07 06:30:00 cmd 1
2017-05-07 06:30:00 cmd_event timer_1
2017-05-07 06:30:00 cmd_nr 1
2017-05-07 06:30:00 state cmd_1
2017-05-07 06:30:00 timer_01_c01 08.05.2017 06:30:00|7
2017-05-07 05:34:05 timer_02_c01 08.05.2017 05:32:14|8
2017-05-06 21:15:46 timer_03_c02 07.05.2017 21:17:29|7
2017-05-06 21:15:46 timer_04_c02 07.05.2017 21:17:29|8
Condition:
0 InternalDoIf($hash,'status.Rolladenautomatik','STATE') eq "on" and (DOIF_time_once($hash,0,$wday,"7") or DOIF_time_once($hash,1,$wday,"8"))
1 InternalDoIf($hash,'status.Rolladenautomatik','STATE') eq "on" and (DOIF_time_once($hash,2,$wday,"7") or DOIF_time_once($hash,3,$wday,"8"))
Days:
0 7
1 8
2 7
3 8
Devices:
Do:
0:
0 set Rolladen_Auf on
1:
0 set Rolladen_Ab on
2:
Helper:
event timer_1
globalinit 1
last_timer 4
sleeptimer -1
timerdev
timerevent timer_1
timereventsState
triggerDev
timerevents:
timer_1
triggerEvents:
timer_1
Internals:
0 status.Rolladenautomatik:STATE
1 status.Rolladenautomatik:STATE
all status.Rolladenautomatik:STATE
Interval:
Itimer:
Localtime:
0 1494217800
1 1494214334
2 1494184649
3 1494184649
Readings:
Realtime:
0 06:30:00
1 05:32:14
2 21:17:29
3 21:17:29
Regexp:
All:
State:
State:
Time:
0 {sunrise(+1200,"06:30","09:00")}
1 {sunrise(+1200,"05:00","09:00")}
2 {sunset(-900,"16:30","22:00")}
3 {sunset(-900,"16:30","22:00")}
Timecond:
0 0
1 0
2 1
3 1
Timer:
0 0
1 0
2 0
3 0
Timers:
0 0 1
1 2 3
Triggertime:
1494184649:
localtime 1494184649
Hash:
1494214334:
localtime 1494214334
Hash:
1494217800:
localtime 1494217800
Hash:
Attributes:
room System
stateFormat {my @rolloaufwe = split(" ",ReadingsVal("Rolladenautomatik","timer_01_c01"," ??:??")); my @rolloaufwt = split(" ",ReadingsVal("Rolladenautomatik","timer_02_c01"," ??:??"));my @rolloabwe = split(" ",ReadingsVal("Rolladenautomatik","timer_03_c02"," ??:??")); my @rolloabwt = split(" ",ReadingsVal("Rolladenautomatik","timer_04_c02"," ??:??"));return "WE: $rolloaufwe[1] - $rolloabwe[1]<br/>WT: $rolloaufwt[1] - $rolloabwt[1]"}
Hier list Abendlicht:
Internals:
DEF ([[Lichtverhaeltnis:ss_weather]|78]) ((set licht.fl.Flurlicht,licht.wz.Tischlampe1,licht.wz.Tischlampe2 on)) DOELSEIF ([22:25]) ((set licht.fl.Flurlicht,licht.wz.Tischlampe1,licht.wz.Tischlampe2 off))
NAME Abendlicht
NR 96
NTFY_ORDER 50-Abendlicht
STATE 20:00:50|78 - 22:25:00
TYPE DOIF
Readings:
2017-05-06 22:25:00 cmd 2
2017-05-06 22:25:00 cmd_event timer_2
2017-05-06 22:25:00 cmd_nr 2
2017-05-06 22:25:00 state cmd_2
2017-05-07 06:00:55 timer_01_c01 07.05.2017 20:00:50|78
2017-05-06 22:25:00 timer_02_c02 07.05.2017 22:25:00
Condition:
0 DOIF_time_once($hash,0,$wday,"78")
1 DOIF_time_once($hash,1,$wday)
Days:
0 78
Devices:
Do:
0:
0 (set licht.fl.Flurlicht,licht.wz.Tischlampe1,licht.wz.Tischlampe2 on)
1:
0 (set licht.fl.Flurlicht,licht.wz.Tischlampe1,licht.wz.Tischlampe2 off)
2:
Helper:
event timer_2
globalinit 1
last_timer 2
sleeptimer -1
timerdev
timerevent timer_2
timereventsState
triggerDev
timerevents:
timer_2
triggerEvents:
timer_2
Internals:
Interval:
Itimer:
all Lichtverhaeltnis
Localtime:
0 1494180050
1 1494188700
Readings:
Realtime:
0 20:00:50
1 22:25:00
Regexp:
All:
State:
State:
Time:
0 [Lichtverhaeltnis:ss_weather]
1 22:25:00
Timecond:
0 0
1 1
Timer:
0 0
1 0
Timers:
0 0
1 1
Triggertime:
1494180050:
localtime 1494180050
Hash:
1494188700:
localtime 1494188700
Hash:
Attributes:
room System
stateFormat {my @lichtan = split(" ",ReadingsVal("Abendlicht","timer_01_c01"," ??:??"));my @lichtaus = split(" ",ReadingsVal("Abendlicht","timer_02_c02"," ??:??"));return "$lichtan[1] - $lichtaus[1]"}
Hi,
1. Bitte, bitte, bitte code-Tags verwenden. Sonst ist das eine Qual.
2. Ist wirklich garantiert, dass diese von DOIF generierten Readings genau das erwartete Format haben? Ich würde mal davon ausgehen, dass das nicht unbedingt von Anfang an der Fall ist.
...aber vielleicht sagt da Damian was dazu.
(Bei DOIF bin ich normalerweise raus, da zu kompliziert für mich.)
Gruß,
Thorsten
Hallo Thorsten,
ich schon wieder ;D. Das Problem ist gelöst (eigentlich hätte ich schon nach der Antwort von Wzut drauf kommen können). Und noch was - beide DOIFs hatten das Problem.
Also geholfen hat, dass ich den default-Wert im split des StateFormats erweitert habe. Statt split(" ",ReadingsVal("Abendlicht","timer_01_c01"," ??:??")) jetzt split(" ",ReadingsVal("Abendlicht","timer_01_c01","??:?? ??:??"))
Ich vermute mal, dass am Anfang tatsächlich nicht alle Werte gesetzt sind und dadurch der default Wert genommen wird.
Nochmals vielen Dank an alle und schönen Restsonntag!