FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: AET_FHEM am 30 April 2017, 09:51:22

Titel: Use of uninitialized value in concatenation (.) or string at ./FHEM/98_XmlList.p
Beitrag von: AET_FHEM am 30 April 2017, 09:51:22
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
Titel: Antw:Use of uninitialized value in concatenation (.) or string at ./FHEM/98_XmlList.p
Beitrag von: DeeSPe am 30 April 2017, 12:30:38
FHEM mal aktualisiert?

Benutzt Du irgendwelchen Custom-Code?

Gruß
Dan
Titel: Antw:Use of uninitialized value in concatenation (.) or string at ./FHEM/98_XmlList.p
Beitrag von: AET_FHEM am 30 April 2017, 20:41:11
FHEM ist aktuell

Custom code?? Tablet UI ??
Titel: Antw:Use of uninitialized value in concatenation (.) or string at ./FHEM/98_XmlList.p
Beitrag von: DeeSPe am 30 April 2017, 21:05:59
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
Titel: Antw:Use of uninitialized value in concatenation (.) or string at ./FHEM/98_XmlList.p
Beitrag von: AET_FHEM am 30 April 2017, 21:33:24
ja mehrere
kann das an denen liegen?
Titel: Antw:Use of uninitialized value in concatenation (.) or string at ./FHEM/98_XmlList.p
Beitrag von: DeeSPe am 30 April 2017, 21:54:09
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
Titel: Antw:Use of uninitialized value in concatenation (.) or string at ./FHEM/98_XmlList.p
Beitrag von: dl2ecg am 03 Mai 2017, 22:03:59
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
Titel: Antw:Use of uninitialized value in concatenation (.) or string at ./FHEM/98_XmlList.p
Beitrag von: AET_FHEM am 04 Mai 2017, 06:50:21
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
Titel: Antw:Use of uninitialized value in concatenation (.) or string at ./FHEM/98_XmlList.p
Beitrag von: mthome am 04 Mai 2017, 07:25:08
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
Titel: Antw:Use of uninitialized value in concatenation (.) or string at ./FHEM/98_XmlList.p
Beitrag 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 "?:??"; }

Titel: Antw:Use of uninitialized value in concatenation (.) or string at ./FHEM/98_XmlList.p
Beitrag von: mthome am 04 Mai 2017, 18:09:11
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  >:(.
Titel: Antw:Use of uninitialized value in concatenation (.) or string at ./FHEM/98_XmlList.p
Beitrag von: Thorsten Pferdekaemper am 04 Mai 2017, 23:24:48
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
Titel: Antw:Use of uninitialized value in concatenation (.) or string at ./FHEM/98_XmlList.p
Beitrag von: mthome am 06 Mai 2017, 11:09:43
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  ;)
Titel: Antw:Use of uninitialized value in concatenation (.) or string at ./FHEM/98_XmlList.p
Beitrag von: Thorsten Pferdekaemper am 06 Mai 2017, 20:14:51
Hi,
kannst Du mal ein "list Abendlicht" liefern?
Gruß,
   Thorsten
Titel: Antw:Use of uninitialized value in concatenation (.) or string at ./FHEM/98_XmlList.p
Beitrag von: mthome am 07 Mai 2017, 09:36:55
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]"}
Titel: Antw:Use of uninitialized value in concatenation (.) or string at ./FHEM/98_XmlList.p
Beitrag von: Thorsten Pferdekaemper am 07 Mai 2017, 10:34:30
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
Titel: Antw:Use of uninitialized value in concatenation (.) or string at ./FHEM/98_XmlList.p
Beitrag von: mthome am 07 Mai 2017, 13:19:16
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!