Hauptmenü

DevIo Bug

Begonnen von RichardCZ, 12 April 2020, 21:58:55

Vorheriges Thema - Nächstes Thema

RichardCZ

Ich melde das hier wegen

FHEM/DevIo.pm                rudolfkoenig         Sonstiges

DevIo kann derzeit IMHO gar nicht compilieren. Gemerkt habe ich das erst nach einer Migration bei mir DevIo -> HomeBot::IO
https://gl.petatech.eu/root/HomeBot/-/blob/4e7ad071569015698f1d58d97d73519a8746a22b/lib/HomeBot/IO.pm

Nachdem das Teil im privaten Namespace ist, klappt auch ein perl -c compile check. Wie dem auch sei:

https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/DevIo.pm#L118

anser -> answer

edit:

Ah - jetzt verstehe ich warum das Teil compiliert. Es fehlt ein use strict; use warnings;
Witty House Infrastructure Processor (WHIP) is a modern and
comprehensive full-stack smart home framework for the 21st century.

RichardCZ

bei der Gelegenheit kann man auch gleich das  $r == "" in Zeile 116 drüber fixen.
Witty House Infrastructure Processor (WHIP) is a modern and
comprehensive full-stack smart home framework for the 21st century.

rudolfkoenig

Danke fuer den Hinweis, habe use strict hizugefuegt und gemeldete Fehler/Warnungen entfernt.

noansi

Hallo Rudolf,

#use warnings;

führt bei mir zu vielen Log-Einträgen auch im laufenden Betrieb:
2020.04.13 11:03:18.481 1: PERL WARNING: Subroutine DevIo_setStates redefined at /opt/fhem/FHEM/DevIo.pm line 20.
2020.04.13 11:03:18.490 1: PERL WARNING: Subroutine DevIo_DoSimpleRead redefined at /opt/fhem/FHEM/DevIo.pm line 31.
2020.04.13 11:03:18.495 1: PERL WARNING: Subroutine DevIo_SimpleRead redefined at /opt/fhem/FHEM/DevIo.pm line 67.
2020.04.13 11:03:18.498 1: PERL WARNING: Subroutine DevIo_SimpleReadWithTimeout redefined at /opt/fhem/FHEM/DevIo.pm line 91.
2020.04.13 11:03:18.503 1: PERL WARNING: Subroutine DevIo_TimeoutRead redefined at /opt/fhem/FHEM/DevIo.pm line 107.
2020.04.13 11:03:18.509 1: PERL WARNING: Subroutine DevIo_SimpleWrite redefined at /opt/fhem/FHEM/DevIo.pm line 130.
2020.04.13 11:03:18.516 1: PERL WARNING: Subroutine DevIo_Expect redefined at /opt/fhem/FHEM/DevIo.pm line 161.
2020.04.13 11:03:18.577 1: PERL WARNING: Subroutine DevIo_OpenDev redefined at /opt/fhem/FHEM/DevIo.pm line 224.
2020.04.13 11:03:18.586 1: PERL WARNING: Subroutine DevIo_SetHwHandshake redefined at /opt/fhem/FHEM/DevIo.pm line 492.
2020.04.13 11:03:18.594 1: PERL WARNING: Subroutine DevIo_CloseDev redefined at /opt/fhem/FHEM/DevIo.pm line 503.
2020.04.13 11:03:18.597 1: PERL WARNING: Subroutine DevIo_IsOpen redefined at /opt/fhem/FHEM/DevIo.pm line 551.
2020.04.13 11:03:18.602 1: PERL WARNING: Subroutine DevIo_Disconnected redefined at /opt/fhem/FHEM/DevIo.pm line 563.
2020.04.13 11:03:32.494 1: PERL WARNING: Subroutine DevIo_setStates redefined at /opt/fhem/FHEM/DevIo.pm line 20.
2020.04.13 11:03:32.502 1: PERL WARNING: Subroutine DevIo_DoSimpleRead redefined at /opt/fhem/FHEM/DevIo.pm line 31.
2020.04.13 11:03:32.506 1: PERL WARNING: Subroutine DevIo_SimpleRead redefined at /opt/fhem/FHEM/DevIo.pm line 67.
2020.04.13 11:03:32.509 1: PERL WARNING: Subroutine DevIo_SimpleReadWithTimeout redefined at /opt/fhem/FHEM/DevIo.pm line 91.
2020.04.13 11:03:32.514 1: PERL WARNING: Subroutine DevIo_TimeoutRead redefined at /opt/fhem/FHEM/DevIo.pm line 107.
2020.04.13 11:03:32.520 1: PERL WARNING: Subroutine DevIo_SimpleWrite redefined at /opt/fhem/FHEM/DevIo.pm line 130.
2020.04.13 11:03:32.528 1: PERL WARNING: Subroutine DevIo_Expect redefined at /opt/fhem/FHEM/DevIo.pm line 161.
2020.04.13 11:03:32.580 1: PERL WARNING: Subroutine DevIo_OpenDev redefined at /opt/fhem/FHEM/DevIo.pm line 224.
2020.04.13 11:03:32.589 1: PERL WARNING: Subroutine DevIo_SetHwHandshake redefined at /opt/fhem/FHEM/DevIo.pm line 492.
2020.04.13 11:03:32.596 1: PERL WARNING: Subroutine DevIo_CloseDev redefined at /opt/fhem/FHEM/DevIo.pm line 503.
2020.04.13 11:03:32.599 1: PERL WARNING: Subroutine DevIo_IsOpen redefined at /opt/fhem/FHEM/DevIo.pm line 551.
2020.04.13 11:03:32.604 1: PERL WARNING: Subroutine DevIo_Disconnected redefined at /opt/fhem/FHEM/DevIo.pm line 563.
2020.04.13 11:04:18.483 1: PERL WARNING: Subroutine DevIo_setStates redefined at /opt/fhem/FHEM/DevIo.pm line 20.
2020.04.13 11:04:18.493 1: PERL WARNING: Subroutine DevIo_DoSimpleRead redefined at /opt/fhem/FHEM/DevIo.pm line 31.
2020.04.13 11:04:18.497 1: PERL WARNING: Subroutine DevIo_SimpleRead redefined at /opt/fhem/FHEM/DevIo.pm line 67.
2020.04.13 11:04:18.500 1: PERL WARNING: Subroutine DevIo_SimpleReadWithTimeout redefined at /opt/fhem/FHEM/DevIo.pm line 91.
2020.04.13 11:04:18.505 1: PERL WARNING: Subroutine DevIo_TimeoutRead redefined at /opt/fhem/FHEM/DevIo.pm line 107.
2020.04.13 11:04:18.511 1: PERL WARNING: Subroutine DevIo_SimpleWrite redefined at /opt/fhem/FHEM/DevIo.pm line 130.
2020.04.13 11:04:18.518 1: PERL WARNING: Subroutine DevIo_Expect redefined at /opt/fhem/FHEM/DevIo.pm line 161.
2020.04.13 11:04:18.572 1: PERL WARNING: Subroutine DevIo_OpenDev redefined at /opt/fhem/FHEM/DevIo.pm line 224.
2020.04.13 11:04:18.581 1: PERL WARNING: Subroutine DevIo_SetHwHandshake redefined at /opt/fhem/FHEM/DevIo.pm line 492.
2020.04.13 11:04:18.588 1: PERL WARNING: Subroutine DevIo_CloseDev redefined at /opt/fhem/FHEM/DevIo.pm line 503.
2020.04.13 11:04:18.592 1: PERL WARNING: Subroutine DevIo_IsOpen redefined at /opt/fhem/FHEM/DevIo.pm line 551.
2020.04.13 11:04:18.597 1: PERL WARNING: Subroutine DevIo_Disconnected redefined at /opt/fhem/FHEM/DevIo.pm line 563.
2020.04.13 11:04:33.463 1: PERL WARNING: Subroutine DevIo_setStates redefined at /opt/fhem/FHEM/DevIo.pm line 20.
2020.04.13 11:04:33.472 1: PERL WARNING: Subroutine DevIo_DoSimpleRead redefined at /opt/fhem/FHEM/DevIo.pm line 31.
2020.04.13 11:04:33.477 1: PERL WARNING: Subroutine DevIo_SimpleRead redefined at /opt/fhem/FHEM/DevIo.pm line 67.
2020.04.13 11:04:33.480 1: PERL WARNING: Subroutine DevIo_SimpleReadWithTimeout redefined at /opt/fhem/FHEM/DevIo.pm line 91.
2020.04.13 11:04:33.485 1: PERL WARNING: Subroutine DevIo_TimeoutRead redefined at /opt/fhem/FHEM/DevIo.pm line 107.
2020.04.13 11:04:33.490 1: PERL WARNING: Subroutine DevIo_SimpleWrite redefined at /opt/fhem/FHEM/DevIo.pm line 130.
2020.04.13 11:04:33.498 1: PERL WARNING: Subroutine DevIo_Expect redefined at /opt/fhem/FHEM/DevIo.pm line 161.
2020.04.13 11:04:33.581 1: PERL WARNING: Subroutine DevIo_OpenDev redefined at /opt/fhem/FHEM/DevIo.pm line 224.
2020.04.13 11:04:33.600 1: PERL WARNING: Subroutine DevIo_SetHwHandshake redefined at /opt/fhem/FHEM/DevIo.pm line 492.
2020.04.13 11:04:33.617 1: PERL WARNING: Subroutine DevIo_CloseDev redefined at /opt/fhem/FHEM/DevIo.pm line 503.
2020.04.13 11:04:33.621 1: PERL WARNING: Subroutine DevIo_IsOpen redefined at /opt/fhem/FHEM/DevIo.pm line 551.
2020.04.13 11:04:33.636 1: PERL WARNING: Subroutine DevIo_Disconnected redefined at /opt/fhem/FHEM/DevIo.pm line 563.


Welches Modul DevIo.pm ständig nachlädt, weiss ich noch nicht, aber die use Warnings in DevIo.pm auszukommentieren stoppt die Meldungsflut.

Gruß, Ansgar.

rudolfkoenig

Kanst Du mir verraten, wie man das Problem nachstellt? Ich sehe das bei mir nicht.

noansi

#5
Hallo Rudolf,

ZitatKanst Du mir verraten, wie man das Problem nachstellt? Ich sehe das bei mir nicht.
leider nicht.
Ich wüßte derzeit nicht, wie ich in DevIo raus bekommen kann, wer es gerade nachlädt?!?

Gruß, Ansgar.

rudolfkoenig

"attr global stacktrace" ?

noansi

Hallo Rudolf,

Zitat"attr global stacktrace" ?
spuckt leider nicht mehr aus, es bleibt bei den Warnings.

Gruß, Ansgar.

herrmannj

Benutzt du devio in irgendeiner myUtils?

noansi

Hallo Rudolf,

ich hätte da einen Verdächtigen mit global verbose 5 im Angebot:
2020.04.13 11:55:55.311 4: BlockingCall (FRITZBOX_Readout_Run_Web): created child (30960), uses telnetPort to connect back
2020.04.13 11:55:55.345 4: FRITZBOX FritzBoxStatus: Readout_Start.755 Fork process FRITZBOX_Readout_Run_Web
2020.04.13 11:55:55.366 1: PERL WARNING: Subroutine DevIo_setStates redefined at /opt/fhem/FHEM/DevIo.pm line 20.
2020.04.13 11:55:55.375 1: PERL WARNING: Subroutine DevIo_DoSimpleRead redefined at /opt/fhem/FHEM/DevIo.pm line 31.
2020.04.13 11:55:55.381 1: PERL WARNING: Subroutine DevIo_SimpleRead redefined at /opt/fhem/FHEM/DevIo.pm line 67.
2020.04.13 11:55:55.385 1: PERL WARNING: Subroutine DevIo_SimpleReadWithTimeout redefined at /opt/fhem/FHEM/DevIo.pm line 91.
2020.04.13 11:55:55.391 1: PERL WARNING: Subroutine DevIo_TimeoutRead redefined at /opt/fhem/FHEM/DevIo.pm line 107.
2020.04.13 11:55:55.398 1: PERL WARNING: Subroutine DevIo_SimpleWrite redefined at /opt/fhem/FHEM/DevIo.pm line 130.
2020.04.13 11:55:55.407 1: PERL WARNING: Subroutine DevIo_Expect redefined at /opt/fhem/FHEM/DevIo.pm line 161.
2020.04.13 11:55:55.475 1: PERL WARNING: Subroutine DevIo_OpenDev redefined at /opt/fhem/FHEM/DevIo.pm line 224.
2020.04.13 11:55:55.485 1: PERL WARNING: Subroutine DevIo_SetHwHandshake redefined at /opt/fhem/FHEM/DevIo.pm line 492.
2020.04.13 11:55:55.495 1: PERL WARNING: Subroutine DevIo_CloseDev redefined at /opt/fhem/FHEM/DevIo.pm line 503.
2020.04.13 11:55:55.499 1: PERL WARNING: Subroutine DevIo_IsOpen redefined at /opt/fhem/FHEM/DevIo.pm line 551.
2020.04.13 11:55:55.505 1: PERL WARNING: Subroutine DevIo_Disconnected redefined at /opt/fhem/FHEM/DevIo.pm line 563.
2020.04.13 11:55:55.564 4: Connection accepted from telnetPort_127.0.0.1_60876
2020.04.13 11:55:55.572 5: Cmd: >{BlockingRegisterTelnet($cl,12)}<
2020.04.13 11:55:55.579 4: FRITZBOX FritzBoxStatus: Readout_Run_Web.1339 Prepare query string for luaQuery.
2020.04.13 11:55:55.583 5: FRITZBOX FritzBoxStatus: Web_Query.4727 Request data via API luaQuery.
2020.04.13 11:55:57.012 5: FRITZBOX FritzBoxStatus: Web_Query.4735 Response: 200 OK


Gruß, Ansgar.

rudolfkoenig

- DevIo wird von vielen Modulen (56 an der Zahl) per require reingeholt, bei 20 mit use.
- die erwaehnten Warnungen gibt es, wenn bei use oder require unterschiedliche Pfadangaben gemacht werden.
- die meisten verwenden $attr{global}{modpath}/FHEM/DevIo.pm, es gibt aber auch $main::attr{global}{modpath}/FHEM/DevIo.pm und DevIo.pm.
- um den Aufruhr wg. sinnlosen Fehlermeldungen niedrig zu halten, habe ich "use warnings" aus DevIo.pm entfernt.
- ich meine use DevIo ist die richtige Loesung, ich habe meine Module, die require mit Pfad verwendet haben (CUL, ZWDongle und  autocreate) umgebaut.
- damit das Problem gefixt wird, habe ich das SVN pre-commit Hook erweitert, so dass require.*modpath.*DevIo.pm untersagt, und use empfohlen wird.

noansi

Hallo Rudolf,

in fhem.pl steckt noch ein require "$attr{global}{modpath}/FHEM/DevIo.pm" in der Funktion fhemFork()
sub
fhemFork()
{
  my $pid = fork;
  if(!defined($pid)) {
    Log 1, "Cannot fork: $!";
    stacktrace() if($attr{global}{stacktrace});
    return undef;
  }

  return $pid if($pid);

  # Child here
  # Close FDs as we cannot restart FHEM if child keeps TCP Serverports open
  foreach my $d (sort keys %defs) {
    my $h = $defs{$d};
    $h->{DBH}->{InactiveDestroy} = 1
      if($h->{DBH} && $h->{TYPE} eq 'DbLog'); #Forum #43271
    TcpServer_Close($h) if($h->{SERVERSOCKET});
    if($h->{DeviceName}) {
      require "$attr{global}{modpath}/FHEM/DevIo.pm";
      DevIo_CloseDev($h,1);
    }
  }
  $SIG{CHLD} = 'DEFAULT';  # Forum #50898
  $fhemForked = 1;
  return 0;
}


Gruß, Ansgar.

rudolfkoenig

Danke, habs geaendert.

noansi

#13
Hallo Rudolf,

noch als Rückmeldung, das require "$attr{global}{modpath}/FHEM/DevIo.pm" in fhemFork() in fhem.pl hat die Warnings geworfen.

Ich kann sie durch Wechsel zwischen den Versionen require "$attr{global}{modpath}/FHEM/DevIo.pm" und require "DevIo.pm"; ein- und ausschalten (mit aktivem use warnings; in DevIo.pm).

Gruß, Ansgar.

PS: Die übrigen DevIo.pm Änderungen habe ich zuvor auch nachgezogen.

betateilchen

#14
Zitat von: rudolfkoenig am 13 April 2020, 08:49:47
Danke fuer den Hinweis, habe use strict hizugefuegt und gemeldete Fehler/Warnungen entfernt.


73_PRESENCE.pm            20782 2019-12-19 10:51:06Z markusbloch
DevIo.pm                  21659 2020-04-13 10:08:36Z rudolfkoenig


Hallo Rudi,

das Hinzufügen von "use strict" führt dazu, dass nach einem FHEM-Update PRESENCE nicht mehr funktioniert.

Can't use string ("PRESENCE_DoInit") as a subroutine ref while "strict refs" in use at FHEM/DevIo.pm line 250.

Kommentiert man das "use strict" in DevIo.pm aus, ist (vorläufig) alles wieder gut.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!