Problem mit DevIo im Modul DENON

Begonnen von olwaldi, 22 November 2021, 08:53:56

Vorheriges Thema - Nächstes Thema

olwaldi

Ich hoffe, hier mit meinem Problem richtig zu sein - ggf. gern verschieben!

Im April wurde DevIo.pm angepaßt, so daß seitherr das DENON Modul sehr viele Fehlermeldungen ausgibt und im worst case fhem crasht. Als workaround bin ich auf die vorige Version von DevIo.pm zurückgegangen, und DENON funktioniert wieder problemlos.

Das Ganze habe ich unter https://forum.fhem.de/index.php/topic,58452.msg1184642.html#msg1184642 beschrieben. Ich selber kann leider nur den Fehler inkl. Workaround melden. Für's Beheben fehlt mir das knowhow. Wäre schön, wenn sich jemand dieses Problems annähme.


Grüßle, Michael

olwaldi

Zusatzfrage: Wie kann ich verhindern, daß DevIo. pm beim update aktualisiert wird?
attr global exclude_from_update DevIo.pl
funktioniert leider nicht. Und kaum ist's aktualisiert, kommen Fehlermeldungen vom device DENON_AVR...


Grüßle, Michael

yersinia

Zitat von: olwaldi am 11 Dezember 2021, 16:44:59attr global exclude_from_update DevIo.pl
Ist der typo beabsichtigt? Die Datei heisst DevIo.pm:
attr global exclude_from_update DevIo.pm
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

olwaldi

Vielen Dank für den Hinweis - war tatsächlich von mir fehlerhaft eingetragen.

Grüßle, Michael


olwaldi

Ich komme nochmal auf das ursprüngliche Problem zwischen DevIo.pm und 70_DENON_AVR.pm zurück. Ich glaube, daß die Ursache mit der Schreibweise von STATE bzw. state zu tun hat. Hier hat sich was in DevIo.pm geändert. Daher habe ich versuchsweise in 70_DENON_AVR die Schreibweise von STATE in state geändert. Trotzdem gibt es hie und da Fehlermeldungen aus DevIo.pm (DevIo_getState liest explizit state in Kleinbuchstaben):
sub
DevIo_Expect($$$)
{
  my ($hash, $msg, $timeout) = @_;
  my $name= $hash->{NAME};
 
  my $state= DevIo_getState($hash);
  if($state ne "opened") {
    Log3 $name, 2, "Attempt to write to $state device.";
    return undef;
  }

im Denon Modul setzt ich state vor dem (einzigen) expliziten Aufruf von DevIo_Expect:
[ if ($connectionCheck ne "off") {

$hash->{state} = "opened";

RemoveInternalTimer($hash, "DENON_AVR_ConnectionCheck");

my $connState = DevIo_Expect( $hash, "PW?\r", $hash->{TIMEOUT} );


Andererseits gibt es die interne Funktion
sub
DevIo_setStates($$)
{
  my ($hash, $val) = @_;
  setReadingsVal($hash, "state", $val, TimeNow());
  if($hash->{devioNoSTATE}) {
    evalStateFormat($hash);
  } else {
    $hash->{STATE} = $val;
  }
}

wo wiederum STATE gesetzt wird.

Was ist die "richtige" Weise, um STATE/state für DevIo zu setzen?

Grüßle, Michael