fhem.pl: Use of uninitialized value $r in numeric eq (==) at fhem.pl

Begonnen von vbs, 28 Februar 2018, 10:02:17

Vorheriges Thema - Nächstes Thema

vbs

Ich bekomme momentan mit der aktuellen fhem.pl recht häufig (immer?) diese Ausgaben beim Zugriff auf "WEBApi". "WEBApi" ist bei mir eine zusätzliches Gerät vom Typ FHEMWEB über welches Tasker & Co. Sachen schalten können.

018.02.28 09:32:16.327 4: WEBApi_127.0.0.1_53944 GET /api?cmd=set%20env_presence%20transition%20leaving&fwcsrf=geheim&XHR=1; BUFLEN:0
2018.02.28 09:32:16.327 4: authorize WEBApi/cmd/set: allowed_WEBApi returned dont care
2018.02.28 09:32:16.328 1: PERL WARNING: Use of uninitialized value $r in numeric eq (==) at fhem.pl line 5099.
2018.02.28 09:32:16.328 1: stacktrace:
2018.02.28 09:32:16.328 1:     main::__ANON__                      called by fhem.pl (5098)
2018.02.28 09:32:16.328 1:     main::Authorized                    called by fhem.pl (1186)
2018.02.28 09:32:16.328 1:     main::devspec2array                 called by fhem.pl (1788)
2018.02.28 09:32:16.328 1:     main::CommandSet                    called by ./FHEM/98_cmdalias.pm (99)
2018.02.28 09:32:16.328 1:     main::CommandCmdAlias               called by fhem.pl (1173)
2018.02.28 09:32:16.328 1:     main::AnalyzeCommand                called by fhem.pl (1026)
2018.02.28 09:32:16.328 1:     main::AnalyzeCommandChain           called by ./FHEM/01_FHEMWEB.pm (2517)
2018.02.28 09:32:16.328 1:     main::FW_fC                         called by ./FHEM/01_FHEMWEB.pm (850)
2018.02.28 09:32:16.329 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (537)
2018.02.28 09:32:16.329 1:     main::FW_Read                       called by fhem.pl (3528)
2018.02.28 09:32:16.329 1:     main::CallFn                        called by fhem.pl (690)
2018.02.28 09:32:16.329 4: authorize WEBApi/devicename/env_presence: allowed_WEBApi returned dont care
2018.02.28 09:32:16.329 1: PERL WARNING: Use of uninitialized value $r in numeric eq (==) at fhem.pl line 5102.
2018.02.28 09:32:16.329 1: stacktrace:
2018.02.28 09:32:16.329 1:     main::__ANON__                      called by fhem.pl (5102)
2018.02.28 09:32:16.329 1:     main::Authorized                    called by fhem.pl (1186)
2018.02.28 09:32:16.329 1:     main::devspec2array                 called by fhem.pl (1788)
2018.02.28 09:32:16.330 1:     main::CommandSet                    called by ./FHEM/98_cmdalias.pm (99)
2018.02.28 09:32:16.330 1:     main::CommandCmdAlias               called by fhem.pl (1173)
2018.02.28 09:32:16.330 1:     main::AnalyzeCommand                called by fhem.pl (1026)
2018.02.28 09:32:16.330 1:     main::AnalyzeCommandChain           called by ./FHEM/01_FHEMWEB.pm (2517)
2018.02.28 09:32:16.330 1:     main::FW_fC                         called by ./FHEM/01_FHEMWEB.pm (850)
2018.02.28 09:32:16.330 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (537)
2018.02.28 09:32:16.330 1:     main::FW_Read                       called by fhem.pl (3528)
2018.02.28 09:32:16.330 1:     main::CallFn                        called by fhem.pl (690)
2018.02.28 09:32:16.330 1: PERL WARNING: Use of uninitialized value $r in numeric eq (==) at fhem.pl line 5103.
2018.02.28 09:32:16.331 1: stacktrace:
2018.02.28 09:32:16.331 1:     main::__ANON__                      called by fhem.pl (5103)
2018.02.28 09:32:16.331 1:     main::Authorized                    called by fhem.pl (1186)
2018.02.28 09:32:16.331 1:     main::devspec2array                 called by fhem.pl (1788)
2018.02.28 09:32:16.331 1:     main::CommandSet                    called by ./FHEM/98_cmdalias.pm (99)
2018.02.28 09:32:16.331 1:     main::CommandCmdAlias               called by fhem.pl (1173)
2018.02.28 09:32:16.331 1:     main::AnalyzeCommand                called by fhem.pl (1026)
2018.02.28 09:32:16.331 1:     main::AnalyzeCommandChain           called by ./FHEM/01_FHEMWEB.pm (2517)
2018.02.28 09:32:16.331 1:     main::FW_fC                         called by ./FHEM/01_FHEMWEB.pm (850)
2018.02.28 09:32:16.331 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (537)
2018.02.28 09:32:16.331 1:     main::FW_Read                       called by fhem.pl (3528)
2018.02.28 09:32:16.331 1:     main::CallFn                        called by fhem.pl (690)
2018.02.28 09:32:16.337 3: Forbidden device env_stats for WEBApi_127.0.0.1_53944
2018.02.28 09:32:16.337 4: authorize WEBApi/devicename/env_stats: allowed_WEBApi returned prohibited


list WEBApi
Internals:
   CONNECTS   7
   CSRFTOKEN  geheim
   DEF        8085 global
   FD         25
   NAME       WEBApi
   NR         546
   NTFY_ORDER 50-WEBApi
   PORT       8085
   STATE      Initialized
   TYPE       FHEMWEB
Attributes:
   csrfToken  geheim
   group      Schnittstellen
   room       System
   verbose    5
   webname    api


list allowed_WEBApi
Internals:
   NAME       allowed_WEBApi
   NR         547
   STATE      validFor:WEBApi
   TYPE       allowed
   allowedCommands set
   allowedDevices env_fritzbox,env_presence,wz_mode,sys_di_voiceCtrl,wz_lightSpot,env_guestWifi
   validFor   WEBApi
   READINGS:
     2018-02-27 18:17:07   state           validFor:WEBApi
Attributes:
   allowedCommands set
   allowedDevices env_fritzbox,env_presence,wz_mode,sys_di_voiceCtrl,wz_lightSpot,env_guestWifi
   room       System
   validFor   WEBApi





Was ich auch nicht ganz verstehe ist diese Meldung:
Forbidden device env_stats for WEBApi_127.0.0.1_53944

Der eigentliche Befehl über FHEMWEB geht ja an Device "env_presence" und das ist auch gelistet bei "allowedDevices". Warum meckert er an, dass "env_stats" forbidden sei? Um das Device geht es ja nicht direkt. "env_stats" wird ja maximal indirekt als Folge des "set" auf "env_presence" angefasst. Evtl. Folgefehler von der Warning?

betateilchen

Wenn ich mir Dein stacktrace anschaue, wäre meine erste Vermutung, dass eher in einem cmdalias etwas schiefgeht.


2018.02.28 09:32:16.328 1:     main::devspec2array                 called by fhem.pl (1788)
2018.02.28 09:32:16.328 1:     main::CommandSet                    called by ./FHEM/98_cmdalias.pm (99)
2018.02.28 09:32:16.328 1:     main::CommandCmdAlias               called by fhem.pl (1173)
2018.02.28 09:32:16.328 1:     main::AnalyzeCommand                called by fhem.pl (1026)
2018.02.28 09:32:16.328 1:     main::AnalyzeCommandChain           called by ./FHEM/01_FHEMWEB.pm (2517)


(von unten nach oben zu lesen!)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

Falls fhem.pl aktuell, ist, dann hat jemand verbose des betroffenen Geraetes auf einem nicht-numerischen Wert gesetzt.

vbs

Danke, werde beiden Hinweis mal nachgehen, aber spontan konnte ich nichts finden (ja, fhem.pl ist aktuell).

list .* verbose
WEBApi                   5
bd_hmVirtualWeather      0
global                   3
sz_lightLedWall          3


Und das sind meine aliase:

list TYPE=cmdalias DEF
sys_ca_dvbReceiverPause     set wz_dvbReceiver pause AS set wz_dvbReceiver remoteControl PAUSE
sys_ca_dvbReceiverPlay     set wz_dvbReceiver play AS set wz_dvbReceiver remoteControl PLAY
sys_ca_reloadVbs         reloadvbs AS reload 99_VBSUtils_Logic;reload  99_VBSUtils_Config;reload  99_VBSUtils;reload  99_VBSUtils_Calendar;reload  99_VBSUtils_Lights;reload  99_VBSUtils_WakeupAlarm;reload 99_VBSUtils_VoiceCtrl.pm
sys_ca_szMediaCenterOff     set sz_kodi powerOff AS set sz_swHtpc off;set sz_swTv off
sys_ca_szMediaCenterOn     set sz_kodi powerOn AS set sz_swHtpc on;set sz_swTv on
sys_ca_tvOff             set wz_tv off AS set wz_tv POWEROFF
sys_ca_wzDvbReceiverWol     set wz_dvbReceiver poweron AS set wz_dvbReceiverWol on
sys_ca_wzKodiWol         set wz_kodi on AS set wz_kodiWol on
sys_ca_wzTvCecOn         set wz_tv on AS set wz_tvCec CECCommand on

vbs

Zitat von: betateilchen am 28 Februar 2018, 10:33:45
Wenn ich mir Dein stacktrace anschaue, wäre meine erste Vermutung, dass eher in einem cmdalias etwas schiefgeht.
Ich hab mal probeweise alle cmdalias-Geräte bei mir gelöscht. Der Fehler besteht erstmal weiterhin.

Zitat von: rudolfkoenig am 28 Februar 2018, 10:49:12
Falls fhem.pl aktuell, ist, dann hat jemand verbose des betroffenen Geraetes auf einem nicht-numerischen Wert gesetzt.
Hm aber es geht doch um die Variable $r, oder? Die ist doch das Ergebnis vom Aufruf von "CallFn". Verstehe den Zusammenhang zu verbose momentan noch nicht.




Ist das ein FHEM-Bug oder ist da irgendwas faul bei mir? Das gilt es vermutl. noch raus zu finden. Ich hab momentan nicht mehr viele Ideen :( Kann ich noch irgendwas bereit stellen bzw. ausprobieren, was helfen könnte? Danke!

rudolfkoenig

ZitatHm aber es geht doch um die Variable $r, oder?
Hast Recht, die Zeilenangabe 5098 hat mich verwirrt.
Habe in 96_allowed.pm den return Wert angepasst, war ein einem Fall undefined statt 1.

vbs

Danke Rudi, damit sind die Warnings weg.

Für das andere Problem ("forbidden") hab ich hier mal einen neuen Thread gemacht, da es ja mit der Warning offenbar nix zu tun hat:
https://forum.fhem.de/index.php/topic,85083.0.html