Modul für Denon (Marantz) AV Receiver

Begonnen von raman, 03 Oktober 2016, 18:08:58

Vorheriges Thema - Nächstes Thema

tomcat.x

presetMode is an attribute, you have to user "attr" command instead of "define". 

FHEM: 6.1 auf Raspi 3, Raspbian (Buster), Perl v5.28.1
Sender/Empfänger: 2 x CULv3, Duofern Stick, HM-MOD-RPI-PCB
Gateways: FRITZ!Box 6591 (OS: 7.57), Trädfri, ConBee 2,  piVCCU, OpenMQTTGateway
Sensoren/Aktoren: FRITZ!DECT, FS20, FHT, HMS, HomeMatic, Trädfri, DuoFern, NetAtmo

All-Ex

#661
Hallo zusammen,

ich biete hier einen Patch für das DENON_AVR-Modul an, getestet mit dem Denon AVR-X4500H. @delMar, magst du dir den mal anschauen und ggf. einchecken?

Folgendes ist geändert:

  • New: adysseyLFCAmount (1-7) set command and reading
  • New: dynamicEQRefLevelOffset (0dB, 5dB, 10 dB, 15 dB) set command and reading
  • New: audioRestorer (off, low, medium, high) set command and reading
  • New: added channelVolume<speakername> readings
  • New: sound modes of newer receivers are recognized
  • Fix: quickselect set command and reading now working with newer receivers
  • Fix: trigger1/2 readings are updated after power on/off
Angehängt habe ich das komplette Modul und einen Patch gegen die aktuelle Version.

Viele Grüße,
Alex

delMar

Danke Alex,
wird am Wochenende Platz finden :-)

lg
Martin
Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

All-Ex

Super :-)

Hier noch ein kleines Update, jetzt werden auch DTS:X MSTR Formate richtig in den Readings angezeigt. Der Rest wie oben.

delMar

Patch ist eingecheckt, kommt morgen mit dem Update

Danke!

schöne grüße
Martin
Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

All-Ex


olwaldi

Schön zu sehen, daß dieses Modul weiter gepflegt wird.

Allerdings habe ich bei meinem usecase immer noch das Problem (siehe weiter oben im Thread), daß direkt nach dem Start von fhem die ein oder andere Variable nicht initialisiert wird. Insbesondere betrifft das $volume:
2022.02.17 16:14:40 1: PERL WARNING: Use of uninitialized value in subtraction (-) at ./FHEM/70_DENON_AVR.pm line 2981.
Das Modul ist frisch aktualisiert.
# $Id: 70_DENON_AVR.pm 25640 2022-02-06 14:47:39Z delmar $

Da ich von DevIo.pm viele Fehlermeldungen von 70_DENON_AVR bekommen habe (auch weiter oben im Thread), aktualisiere ich dieses Modul aktuell nicht. Paßt nach dem update von 70_DENON_AVR das aktualisierte DevIo.pm wieder?

Warum habe ich überhaupt aktualisiert? Weil ich seit Nutzung von RPI_GPIO im alten 70_DENON_AVR merkwürdige neue Fehlermeldungen gesehen habe:
2022.02.16 20:15:08 1: PERL WARNING: Use of uninitialized value $status in string ne at ./FHEM/70_DENON_AVR.pm line 1764, <GEN54039> line 19.
2022.02.16 20:15:08 1: PERL WARNING: Use of uninitialized value $status in string ne at ./FHEM/70_DENON_AVR.pm line 1765, <GEN54039> line 19.
2022.02.16 20:15:08 1: PERL WARNING: Use of uninitialized value $status in string ne at ./FHEM/70_DENON_AVR.pm line 1766, <GEN54039> line 19.
2022.02.16 20:15:08 1: PERL WARNING: Use of uninitialized value $return in concatenation (.) or string at ./FHEM/70_DENON_AVR.pm line 1531, <GEN54039> line 19.
...
2022.02.17 14:28:17 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/70_DENON_AVR.pm line 1386, <GEN123469> line 2.

Könnten diese Probleme durch den update gefixt worden sein? [Der Fehler trat nur manchmal auf, bislang nach dem update heute noch nicht.]


Grüßle, Michael

delMar

Hallo Michael,

die letzten Updates waren eher kosmetischer Natur und haben neue Soundformate etc hinzugefügt.
An der grundsätzlichen Funktionsweise wurde garnix verändert.

Das Wetter am Wochenende soll schlecht werden, ich werd versuchen, das durchzuschauen, was du erläutert hast.
Danke dass du das so zusammengefasst hast.

schöne Grüße
Martin
Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

olwaldi

Dann freue ich mich mal über schlechtes Wetter:-)

Schön wäre auch, wenn die RS232-Verrbindung stabil täte. Aktuell funktioniert sie manchmal mehrere Wochen problemlos, um plötzlich nicht mehr zu funktionieren. Zum Reaktivieren reicht dann ein Neustart von fhem.

Ich hätte dafür eine workaround-Idee (siehe Post #581). Da habe ich auch schon selber etwas mit experimentiert - aber ohne Erfolg. Meine Idee war, daß bei Verbindungsverlust zum Denon AVR automatisch von 70_DENON_AVR testweise der String POWEROFF gesendet wird, am Besten mit Eintrag im Logfile, damit man weiß, ob's geholfen hat. Danach muß natürlich 70_DENON_AVR den Status des Denon frisch auslesen. Natürlich würde ich diese Anpassung testen, wenn Du das umsetzen solltest. Hier die Stelle, wo ich das bei Denon entdeckt hatte https://support.denon.com/app/answers/detail/a_id/4/~/avr-not-responsive-to-rs-232-commands

Und irgendwie scheint DevIo.pm hier eine zentrale Rolle zu spielen, vgl. Post #625 und folgende. Nur das Downgrade von DevIo.pm hat geholfen, sollte aber irgendwie in 70_DENON_AVR gefixt werden können.

Danke schonmal, Michael



delMar

Hallo Michael,

ich hab mir die Uninitialized values mal angesehen.

Es ist so, dass das Modul schon versucht, normal zu arbeiten, obwohl manche Werte (zB Volume) noch nicht gesetzt sind.
Das hast du auch schon richtig erkannt.

So einfach lässt sich das aber nicht lösen, weil man dann sehr schnell einen Murks reinbekommt.
Ich müsste mir da den kompletten Lebenszyklus des Moduls mal genau durchschauen und evtl eine saubere Initialisierungsphase einbauen.
Das wird aber dauern.

Zu RS-232 tu ich mir sehr schwer, etwas zu sagen, da ich nur einen alten Marantz mit Ethernet habe.
Die Lösung muss aber definitiv im Modul selber liegen, wenn ein FHEM Neustart hilft.
Vielleicht löst auch hier eine saubere Initialisierungsphase das Problem.

Ich habe mal eine der von dir genannten Stellen leicht verändert, um einen Uninitialized Value wegzukriegen, es wird aber bestimmt noch mehrere davon geben.

Kurzfristig hab ich nun keine Lösung, wie das Modul sauberer laufen kann.
Knapp 4000 Zeilen Code können halt auch so ihre Tücken bergen, selbst wenn man ihn selber geschrieben hätte  ;D.

Ich kann da jetzt leider nichts versprechen, ob und wann ich das lösen können werde.
Sollte jemand motiviert sein, das Problem anzugehen, unterstütze ich gern.

schöne Grüße
Martin

Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

olwaldi

Hallo Martin!

Du hast vollkommen Recht - das Problem mit RS232 kann man nur lösen, wenn man als Entwickler einen AVR mit RS232 hat und den Fehler reproduzieren bzw. beobachten kann. Bin ja selber Software-Entwickler (gewesen) und habe schonmal intensiver in 70_DENON_AVR reingeguckt. Wie Du schon schreibst, da müßte man viel Aufwand reinstecken, um die Initialisierung "sauber" zu implementieren.

Ich habe mir gerade die neuesten Fehlermeldungen von gestern Abend mit dem Modul von 2022-02-06 genauer angeguckt. Vorab noch eine Zusatzinfo: Diese Fehlerrmeldungen treten erst auf, nachdem ich 2 GPIO-Inputs und passende notifys angelegt habe, d.h. da muß es einen Zusammenhang geben, den ich aktuell nicht sehe.

Die Fehler treten ungefähr dann auf, wenn ich meinen Beamer einschalte und dessen 12V-Trigger via Optokoppler als GPIO_Interrupt genau richtig erkannt wird. Allerdings treten die Fehler im DENON_AVR 35s VOR dem Beamer-Event auf. Das paßt, da ich zuerst von SAT- auf FireTV-Aktivität gewechselt habe, was ein notify auslöst (s.u.). Dann zum Beamer gelaufen und dort eingeschaltet. Somit glaube ich nicht, daß der Fehler durch das Beamer-Einschalten ausgelöst wird.

2022.02.20 20:15:16 1: PERL WARNING: Use of uninitialized value $status in string ne at ./FHEM/70_DENON_AVR.pm line 1862.
2022.02.20 20:15:16 1: PERL WARNING: Use of uninitialized value $status in string ne at ./FHEM/70_DENON_AVR.pm line 1863.
2022.02.20 20:15:16 1: PERL WARNING: Use of uninitialized value $status in string ne at ./FHEM/70_DENON_AVR.pm line 1864.
elsif ($msg =~ /^SI(.+)/)
{
my $status = DENON_GetKey('SI', $1);
1862:             readingsBulkUpdate($hash, "input", $status) if($status ne "unknown");
1863:             readingsBulkUpdate($hash, "currentStream", "-") if($status ne "Server");
1864:             readingsBulkUpdate($hash, "sound_signal_in", "-") if($status ne "CD|DOCK|DVR|DVD|BD|TV|SAT\/CBL|SAT|GAME|MPLAY|SAT|AUX1|AUX2|AUX3|AUX4|AUX5|AUX6|AUX7"); # sets sound_signal_out to "-" if Input <-
$hash->{helper}{INPUT} = $1;
$return = $status;

2022.02.20 20:15:16 1: PERL WARNING: Use of uninitialized value $return in concatenation (.) or string at ./FHEM/70_DENON_AVR.pm line 1589.
$return = DENON_AVR_Parse($hash, $rmsg) if($rmsg);
1589: Log3 $name, 4, "DENON_AVR $name: parsing <$rmsg> to <$return>." if($rmsg);

2022.02.20 20:16:25 1: PERL WARNING: Use of uninitialized value $sound in string ne at ./FHEM/70_DENON_AVR.pm line 1941, <GEN11> line 33.
elsif ($msg =~ /^MS(.+)/)
{
my $sound = DENON_GetValue('SOUND', $1);
# get Surround-Mode from MS
if($sound eq "unknown")
{
$sound = DENON_GetKey('MS', $1);
}
1941:         if ($sound ne "unknown")

2022.02.20 20:16:25 1: PERL WARNING: Use of uninitialized value $sound in concatenation (.) or string at ./FHEM/70_DENON_AVR.pm line 1944, <GEN11> line 33.
1944:        $return = "sound_out ".$sound;



Ich wundere mich insbesondere über die letzte Fehlermeldung mit dem <GEN11>, wohin verweist die zweite Zeilennummer?

Das notify mit Bezug auf GPIO und 70_DENON_AVR muß triggern, richtigerweise gut 30s VOR dem Beamer-Event. Hier mein vermutlich problematisches notify:
Internals:
   DEF        HarmonyHub:activity:.(Fire.TV|Kodi|SAT|SmartTV) {
  if (ReadingsVal("StateBeamer", "Longpress", "unknown") eq "off") {
    fhem("set HarmonyHub command Hisense.TV PowerOn");
  } else {
    fhem("set HarmonyHub command Hisense.TV PowerOff");
  }
}

   FUUID      62021649-f33f-ba1b-6dec-afbd2be1d76d4887
   NAME       HisenseOn
   NR         46
   NTFY_ORDER 50-HisenseOn
   REGEXP     HarmonyHub:activity:.(Fire.TV|Kodi|SAT|SmartTV)
   STATE      2022-02-20 20:58:12
   TRIGGERTIME 1645387092.24661
   TYPE       notify
   READINGS:
     2022-02-18 15:32:22   state           active
     2022-02-20 20:58:12   triggeredByDev  HarmonyHub
     2022-02-20 20:58:12   triggeredByEvent activity: SAT
Attributes:


Ich habe gerade erfolglos versucht, den Fehler von gestern Abend nachzustellen. Ich habe meine SAT-Aktivität mit meiner Harmony-Fernbedienung gestartet. Dann habe ich auf die FireTV-Aktivität gewechselt. In beiden Fällen erkennt das Harmony-Device die Änderung. ABER das Wechseln zur FireTV-Aktivität dauert wesentlich länger als andere Aktivitäsänderungen (liegt technisch bedingt an Harmony, da für FireTV auf Bluetooth gewechselt wird).
Aber Fehlermeldungen in FHEM gab's bei diesem Versuch keine.

Aber beim zweiten Versuch, diesmal ein Wechsel von Aktivität SAT hin zu Disc. Auch hier muß mein notify richtigerweise triggern:

2022.02.21 08:57:18 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/70_DENON_AVR.pm line 1444, <GEN11> line 39.

Diesen Fehler kann ich reproduzieren. Nichtsdestotrotz werden alle erwarteten FHEM-Events/Kommandos richtig abgearbeitet.

Könnte es eine Rolle spielen, daß ich im Denon 3808 AVR die Inputs umbenannt habe auf "Fire TV" bzw. "Disc"?

Sorry für die ultralange Antwort, aber vielleicht hat jemand dadurch ja eine Idee bzgl. meines Problems.


Grüßle, Michael

olwaldi

@Martin: Hab' gerade Deinen update für 70_DENON_AVR eingespielt. Danke!

Dann habe ich noch etwas nach perl-Fehlermeldungen mit <GEN11> o.ä. gegoogelt. Das ist "nur" eine Art Zusatzinfo zur Fehlermeldung direkt von perl. Man kann mehr erfahren, wenn man den stacktrace hochsetzt vgl. hier https://forum.fhem.de/index.php?topic=114497.0
Aber meist war die Ursache der Versuch eines readingsBulkUpdate auf ein ungesetztes reading. Und genau so sieht es ja auch bei mir aus.

Ich vermute mittlerweile, daß alle diese Probleme letztendlich daher rühren, daß irgendwieso die RS232-Verbindung zwischen FHEM und Raspi abreißt und FHEM den STATE vom Denon-Device verliert. Daher ja meine Idee, die Verbindung neu zu initialisieren, was ich ja schon vor einem Jahr erfolglos aufgegeben habe:
defmod DenonRS232 notify Denon:state:.absent get Denon reconnect
Aber irgendwie müßte dann der String STANDBYOFF via RS232 geschickt werden. Auch das hatte ich erfolglos probiert - meldet nur Can't write to off device:
define c_DenonReset cmdalias DenonReset AS {my ($hash) = $defs{"Denon"};; DevIo_Expect($hash, "STANDBYOFF\r", 5)}


Da die RS232-Verbindung oft wochenlang funktioniert (bei 24/7-Betrieb), habe ich nicht weiter geforscht. Wäre aber trotzdem super, wenn die Denon-Steurung via RS232 zuverlässig täte, gern auch als automatischer Workaround wie eben das Senden von STANDBYOFF bei Verbindungsverlust. Eigentlich sollte DevIo.pm das intern lösen, was aber offenbar bei menem alten Denon AVR 3808 nicht tut.

Grüßle, Michael


Shadow3561

Darf ich mal fragen warum du die RS232-Verbindung nutzt?
Der 3808 hat doch einen LAN-Anschluss.

Mit freundlichen Grüßen

delMar

Zitat von: olwaldi am 21 Februar 2022, 14:11:12
Aber meist war die Ursache der Versuch eines readingsBulkUpdate auf ein ungesetztes reading. Und genau so sieht es ja auch bei mir aus.
Aha... warum liefert das Schreiben auf ein ungesetztes Reading ein Problem?
Readings werden ja erst angelegt, wenn sie geschrieben werden - da liegt es doch in der Natur der Sache, dass sie gelegentlich ungesetzt sind...

Zitat von: olwaldi am 21 Februar 2022, 14:11:12
Daher ja meine Idee, die Verbindung neu zu initialisieren, was ich ja schon vor einem Jahr erfolglos aufgegeben habe:
defmod DenonRS232 notify Denon:state:.absent get Denon reconnect

Hast du schon mal disconnect und dann reconnect versucht?
defmod DenonRS232 notify Denon:state:.absent get Denon disconnect;;get Denon reconnect
Je nachdem, wo du das ausführst, darf uU nur ein Semikolon ; verwendet werden.

Evtl mit ein paar Sekunden Verzögerung dazwischen (temporären Timer anlegen)


Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

olwaldi

Zitat von: Shadow3561 am 21 Februar 2022, 19:36:11
Darf ich mal fragen warum du die RS232-Verbindung nutzt?
Der 3808 hat doch einen LAN-Anschluss.

Mit freundlichen Grüßen
Der AVR 3808 ist so alt, daß er im Netzwerk-Standby 70W verbrät. Ursprünglich hatte ich die LAN-Verbindung zum Denon genutzt ohne Netzwerk-Standby. Dann dauerte es immer einige Minuten, bis die Verbindung nach dem Einschalten des Denon funktionierte.

RS232 ist sogar im Standby aktiv, d. h. man könnte den Denon via RS232-Kommando einschalten. Das funktioniert sogar out-of-the-box mit 70_DENON_AVR aus dem Standard-FHEM-Webinterface.

Ich hatte gar nicht erwartet, daß die RS232-Verbindung aus FHEM überhaupt so gut funktionieren würde. Zuvor hatte ich die vom Linux-Laptop via Terminalprogramm getestet, und dabei konnte ich höchstens 2..3 Kommandos erfolgreich senden, ehe ich mittels STANDBYRESET neu initialisieren mußte. Hier hat ein anderer USB/RS232-Dongle Verbesserung bewirkt.

Grüßle, Michael