Modul für Denon (Marantz) AV Receiver

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

Vorheriges Thema - Nächstes Thema

olwaldi

Gestern habe ich die Kommunikation von RS232 auf IP umgestellt. Und seither sind alle merkwürdigen Fehlermeldungen bzgl. ungesetzter Variablen verschwunden!! Also scheint wohl doch irgendwas schiefzulaufen, wenn die Daten seriell übertragen werden. Womöglich werden die Daten zu schnell übertragen und gehen tw. verloren?

Ein Miniproblem bleibt allerdings. Trotz Umstellung des deviceInfoPort auf 8080 kriege ich im Log
2022.07.24 08:14:29 0: DENON_AVR (Denon) - Error while requesting http://192.168.178.66:80/goform/Deviceinfo.xml - http://192.168.178.66:80/goform/Deviceinfo.xml: empty answer received
Mir ist total unverständlich, wie der (falsche) Port 80 "überleben" kann. Habe extra fhem 2x neu gestartet (shutdown restart) - ohne Besserung. Daß das 8080 zumindest teilweise angekommen ist, sieht man an der jetzt anderen Fehlermeldung. Und mein Denon AVR X6400H liefert mit curl auf der Shell-Kommandoebene via 8080 ein ordentliches Deviceinfo.xml zurück.


Grüßle, Michael

Shadow3561

Zeig doch mal ein list vom Device

Mit freundlichen Grüßen

olwaldi

Gerne:
Internals:
   Clients    :DENON_AVR_ZONE:
   DEF        192.168.178.66
   DeviceName 192.168.178.66:23
   FD         13
   FUUID      61aca1cc-f33f-ba1b-f0f0-8249bba368d3bdb5
   IP         192.168.178.66
   NAME       Denon
   NR         44
   NTFY_ORDER 50-Denon
   PARTIAL   
   STATE      off
   TIMEOUT    3
   TYPE       DENON_AVR
   eventCount 84
   model      Denon AVR-X6400H
   OLDREADINGS:
   READINGS:
     2022-07-24 15:42:07   Auto-Lip-Sync   on
     2022-07-24 17:22:43   Muting-Level    mute
     2022-07-21 15:37:16   Network-Name    Denon AVR-X6400H
     2022-07-24 17:22:43   Volume-Display  relativ
     2022-07-24 17:22:43   Volume-Max      80
     2022-07-24 17:22:43   Volume-Startup  40
     2022-07-24 17:22:42   allZoneStereo   off
     2022-07-24 17:22:43   aspectRatio     16:9
     2022-07-01 17:25:31   audioOutHDMI    unknown
     2022-07-24 17:22:44   audioRestorer   off
     2022-07-24 17:22:44   audysseyLFC     off
     2022-07-24 17:22:44   audysseyLFCAmount 4
     2022-07-24 17:22:42   autoStandby     15min
     2022-07-24 17:22:42   bass            0
     2022-06-03 20:14:33   channelVolumeCenter 0
     2022-07-24 17:22:43   channelVolumeFrontLeft 0
     2022-07-24 17:22:43   channelVolumeFrontRight 0
     2022-05-26 11:31:00   channelVolumeRearHeightLeft 0
     2022-05-26 11:31:00   channelVolumeRearHeightRight 0
     2022-05-25 21:01:41   channelVolumeSourroundBack 0
     2022-05-25 21:01:41   channelVolumeSourroundBackLeft 0
     2022-05-25 21:01:41   channelVolumeSourroundBackRight 1
     2022-06-03 20:14:33   channelVolumeSourroundLeft 0
     2022-06-03 20:14:33   channelVolumeSourroundRight 0
     2022-07-24 17:22:43   channelVolumeSubwoofer 0
     2022-05-26 11:31:00   channelVolumeTopFrontLeft 0
     2022-05-26 11:31:00   channelVolumeTopFrontRight 0
     2022-07-24 17:22:43   cinemaEQ        off
     2022-07-24 13:30:47   currentAlbum    -
     2022-07-24 13:30:47   currentArtist   -
     2022-07-24 13:30:47   currentBitrate  -
     2022-07-24 13:30:47   currentCover    http://192.168.178.66/img/album%20art_S.png?1658662247000
     2022-07-24 13:30:47   currentMedia    -
     2022-07-24 13:30:47   currentPlaytime -
     2022-07-24 13:30:47   currentStation  -
     2022-07-24 17:22:41   currentStream   -
     2022-07-24 13:30:47   currentTitle    -
     2022-07-24 17:22:43   digitalInput    auto
     2022-07-24 17:22:42   display         bright
     2022-07-24 17:22:42   dynamicCompression off
     2022-07-24 17:22:43   dynamicEQ       on
     2022-07-24 17:22:43   dynamicEQRefLevelOffset 10
     2022-07-24 17:22:43   dynamicVolume   off
     2022-07-24 17:22:42   eco             on
     2022-07-24 17:22:42   firmware_AVR    6461-0261-0174-7140
     2022-07-24 17:22:42   firmware_DTS    3.90.50.51
     2022-04-03 09:56:01   ignore          -
     2022-07-24 17:22:41   input           Mediaplayer
     2022-07-24 17:22:43   inputSound      hdmi
     2022-07-24 17:22:43   loudness        on
     2022-07-24 17:22:42   lowFrequencyEffects 0
     2022-07-01 17:25:33   monitorOut      1
     2022-07-24 17:22:43   multEQ          flat
     2022-07-24 17:22:41   mute            off
     2022-07-24 15:42:08   pictureMode     Off
     2022-07-24 17:22:41   playStatus      stopped
     2022-07-24 17:40:13   power           off
     2022-07-24 17:22:41   presence        present
     2022-07-24 17:22:42   quickselect     0
     2022-07-24 17:22:43   resolution      auto
     2022-07-24 17:22:43   resolutionHDMI  auto
     2022-07-24 17:39:26   samplingRate    44.1 khz
     2022-07-24 17:22:42   setup           off
     2022-07-24 17:22:42   sleep           off
     2022-07-24 17:22:42   sound_out       Stereo
     2022-07-24 17:24:14   sound_signal_in PCM
     2022-07-24 17:22:36   state           opened
     2022-07-24 17:40:13   stateAV         off
     2022-07-24 15:42:07   surroundMode    Music
     2022-07-24 17:22:42   toneControl     off
     2022-07-24 17:22:42   treble          0
     2022-07-24 17:40:13   trigger1        off
     2022-07-24 17:40:13   trigger2        off
     2022-07-24 17:22:43   tunerBand       FM
     2022-07-24 17:22:43   tunerFrequency  105.7 MHz
     2022-07-24 17:22:43   tunerMode       auto
     2022-07-24 17:22:43   tunerPreset     1
     2022-07-14 07:27:15   tunerStationName SWR2
     2022-05-26 11:22:51   tunerTrafficProgramme off
     2022-07-24 17:22:43   videoProcessingMode auto
     2022-07-24 17:22:43   videoSelect     off
     2022-07-24 17:22:41   volume          40
     2022-07-24 17:22:43   volumeMax        755
     2022-07-24 17:22:41   volumeStraight  -40
     2022-07-24 17:22:42   zone2           off
     2022-07-24 17:22:42   zone3           off
     2022-07-24 17:40:13   zoneMain        off
   helper:
     INPUT      MPLAY
     PARTIAL   
     deviceIP   192.168.178.66
     isPause    0
     isPlaying  0
     nextConnectionCheck 1658677573.76568
     playTimeCheck 0
     volume     40
Attributes:
   cmdIcon    muteT:rc_MUTE
   connectionCheck 60
   devStateIcon on:rc_GREEN:main_off main_off:rc_YELLOW:main_on off:rc_STOP:main_on absent:rc_RED:main_on muted:rc_MUTE@green:muteT playing:rc_PLAY@green:pause paused:rc_PAUSE@green:play disconnected:rc_RED
   deviceInfoPort 8080
   stateFormat stateAV
   suppressReading HASH.*
   webCmd     volume:muteT:input:surroundMode

Shadow3561

Ich konnte den Fehler nachstellen. Passiert bei mir genau so wie bei dir.

In der 70_DENON_AVR.pm die Zeile 1044 durch

    my $port = AttrVal($name, "deviceInfoPort", "80");

ersetzen. Dies sollte Abhilfe schaffen.
Mit freundlichen Grüßen

olwaldi

#724
Danke für den Tip. Die wesentliche Änderung ist wohl das Ersetzen von $hash durch $name. Ich hab aber auch die doublequotes eingefügt. Leider bleibt's bei meiner Fehlermeldung mit Bezug auf port 80, obwohl 8080 eingestellt ist.

Aber wie schon in meinem vorigen Post geschrieben, die Fehlermeldung nach der Änderung auf 8080 ist nicht mehr das "forbidden" sondern "empty answer". D. h. das 8080 wird tw. benutzt.

Grüßle, Michael

Nachtrag: Ich habe im Code mal hart den Port 8080 eingetragen. Dann ändert sich die Fehlermeldung in
2022.07.25 08:38:59 0: DENON_AVR (Denon) - Error while requesting http://192.168.178.66:8080/goform/Deviceinfo.xml - http://192.168.178.66:8080/goform/Deviceinfo.xml: empty answer received
Aber ein
curl http://192.168.178.66:8080/goform/Deviceinfo.xml --output denon.xml
liefert die gewünschte Datei sofort.


Shadow3561

#725
ZitatD. h. das 8080 wird tw. benutzt.
mn.                         
Teilweise wird nichts benutzt. Entweder 80 oder 8080.

Evtl. dauert einfach zu lange bis das xml geliefert wird. Entweder braucht der AVR zu lange oder die Netzwerkverbindung ist nicht i.O.

Wo im Code hast du denn die 8080 "hart" eingetragen?

Meine Fehlermeldung ist nach der o.a. Änderung verschwunden.

Noch einmal eine Schritt für Schritt Anleitung.

1. Änderung im Modul vornehmen
2. reload 70_DENON_AVR.pm in der Kommandozeile eingeben und bestätigen.
3. set AVR disconnect
4. set AVR reconnect.
5.  ins log schauen

Wenn die Fehlermeldung immer noch da ist

verbose im AVR-Device hochdrehen und bitte die log-Ausgabe posten.

Mit freundlichen Grüßen

Edit:
Funktioniertdieser Aufruf im Browser?
http://{IP_vom_AVR}/ajax/get_config?type=25

olwaldi

Ich habe den String $port in Zeile 1045 durch 8080 ersetzt. Zum Aktivieren solcher Änderungen habe ich immer ein "shutdown restart" ausgeführt.

Für mich sieht es so aus, als ob die perl-Variablen nicht "richtig" gesetzt würden - m.M.n. absurd. Aber mir ist es komischerrweise nicht gelungen, durch Ändern der Priorität in Zeile 1046 die $url ins Log zu bekommen. D.h. irgendwas muß ich falsch machen.

Ein Aufruf von
http://192.168.178.66/ajax/get_config?type=25
liefert
<productTypeName>Denon AVR-X6400H</productTypeName>

Ich habe auch mal versucht, ob es ein Zugriffproblem in fhem gibt, indem ich meinen curl-Aufruf via qx aus der fhem-Kommandozeie gemacht habe - liefert sofort das erwartete XML zurück.

Ich habe jetzt mal in Zeile 1046 den Loglevel auf 0 gesetzt:
    Log3 $name, 0, "DENON_AVR ($name) - requesting $url";
Und ich habe die Änderung wie von Dir detailliert beschrieben reloaded:
1. reload 70_DENON_AVR.pm
2. get Denon disconnect
3. get Denon reconnect
Und jetzt ist die Fehlermeldung weg!! Aber die Log3-Meldung sehe ich trotzdem nicht. Im Log gibt es bzgl. Denon
...
2022.07.26 07:26:16 1: PERL WARNING: Subroutine DENON_AVR_RClayout redefined at ./FHEM/70_DENON_AVR.pm line 3938.
2022.07.26 07:30:37 3: Opening Denon device 192.168.178.66:23
2022.07.26 07:30:37 3: Denon device opened

Klar, alle Routinen werden ja "reloaded". Beim reconnect kommen die beiden open-Meldungen. Und keine Fehlerrmeldung mehr!

Nicht verstanden daran habe ich
1. Warum reicht shutdown restart nicht, um geänderte perl-Skripte zu aktivieren?
2. Warum kann ich nicht erzwingen, daß Log3 in Zeile 1046 bei Level 0 im Logfile ankommt?

Aber man muß ja auch nicht Alles verstehen ...

Auf jeden Fall vielen Dank, Michael

Shadow3561

Bei Loglevel 0 kommt fast nichts im log an.
Hier mal für dich die verschieden Loglevel.

https://wiki.fhem.de/wiki/Verbose

olwaldi

#728
Ich habe aber den Loglevel einer Log3-Zeile im Source auf 0 gesetzt, um diese eine Meldung immer zu sehen (genau wie bei der Fehlermeldung ein paar Codezeilen später, die kommt ja auch immer, wenn der Fehler auftritt). Und ich verstehe nicht, warum die eine nicht kommt. Das hieße doch eigentlich, daß der Code dort gar nicht abgearbeitet wird.

Das bringt mich darauf, nochmal ein shutdown/restart auszuführen. Und prompt sehe ich wieder
2022.07.27 07:28:54 0: DENON_AVR (Denon) - Error while requesting http://192.168.178.66:80/goform/Deviceinfo.xml - http://192.168.178.66:80/goform/Deviceinfo.xml: empty answer received

Mein fhem isr recht aktuell (vor ein paar Wochen zuletzt aktualisiert, und natürlich 70_DENON_AVR.pm editiert). Hat sich HttpUtil geändert (laut update check eigentlich nicht)?

Kannst Du mal checken, ob bei Dir shutdown/restart fehlerlos bzgl DENON_AVR durchläuft?

Immerhin ist der nachfolgende Aufruf von DENON_AVR_RequestProductTypeName erfolgreich, da in den Internals vom Denon Device das model richtig gesetzt ist (und auch keine Fehlermeldung kommt). Aber was ich vom Source-Code einfach nicht verstehe, ist, wieso in der Fehlermeldung die 80 drinsteht, obwohl der Port via Attribut auf 8080 steht.

Nach meinem Verständnis sind beide Aufrufe von HttpUtils_NonblockingGet vollkommen korrekt (der zweite ist ja auch erfolgreich).

Ich komm' langsam dem Problem auf die Spur: Mein Denon antwortet offenbar auf den ersten Aufruf scheinbar wirklich "leer". Wenn nämlich der erste HttpUtil-Aufruf syntaktisch falsch ist (durch meine Sourcecodeänderung) und scheitern muß, gibt es die Fehlermeldung beim zweiten Aufruf
2022.07.27 14:42:48 0: DENON_AVR (Denon) - Error while requesting http://192.168.178.66/ajax/get_config?type=25 - http://192.168.178.66/ajax/get_config?type=25: empty answer received

Verdopplung des timeout auf 10 hat keine Verbesserung gebracht.

Ich habe auch mal versucht, in den perl-Aufrufen die Argumente via sub .. ($$$) zu übergeben (wie in allen anderen subs) - wie zu erwarten ohne Effekt.

Zusammengefaßt: Bei meinem Denon scheitert der erste Aufruf von HttpUtils_NonblockingGet. Aber mit dem zweiten wird das model richtig erkannt.

Letztendlich ist das kein wirkliches Problem - ich will's aber trotzdem verrstehen:-)

Grüßle, Michael

Shadow3561

Moin,

Wenn ich das "deviceInfoPort" Attribut auf 8080 setze und ein FHEM restart ausführe bekomme ich keine Fehlermeldung.
Ist das Attribut auf 80 bekomme ich eine beim restart.

Modulseitig funktioniert es also zumindest bei mir.

Mit freundlichen Grüßen


olwaldi

Danke für's Checken. Dann wird es eine Besonderheit bei meinem Denon x6400h sein, daß der erste Http-Aufruf immer scheitert. Mit dem zweiten wird ja die benötigte Info erfolgreich abgerufen. Und ansonsten tut das Denon-Modul zuverlässig, seit ich auf IP umgestiegen bin (das konnte ich bei meinem alten 3808 mit 70W Netwerk-standby wahrlich nicht tun).

Grüßle, Michael

olwaldi

#731
Noch eine Kleinigkeit. Hin und wieder bekomme ich beim Wechseln des Input diese Fehlermeldung
2022.07.29 20:15:43 1: PERL WARNING: Argument "M" isn't numeric in division (/) at ./FHEM/70_DENON_AVR.pm line 1805.
Hier meine ich, die Ursache entdeckt zu haben. Es gibt wohl im Denon den Parameter Raumgröße (PSRSZ), und der kann medium (M) sein. Das wird aktuell im Sourcecode nicht gesondert behandelt, wodurch das M fälschlich als $volume verarbeitet wird, was zu der Fehlermeldung führt. Als Lösung böte sich an, das RSZ im PS-Array zu ergänzen:
'PS' => {#Sound-Parameter
  'TONE CTRL' => 'toneControl',
  'RSZ' => {
    'RSZ' => 'roomSize',
    'S'  => 'small',
    'MS' => 'mediumSmall',
    'M'  => 'medium',
    'ML' => 'mediumLarge',
    'L'  => 'large'
  },
  ...

und ab Zeile 1768 etwa
elsif($1 eq "RSZ")
{
my $status = DENON_GetValue('PS', $1, $1);
my $value = DENON_GetValue('PS', $1, $2);
readingsBulkUpdate($hash, $status, $value) if($status ne "unknown" || $value ne "unknown");
$return = $status." ".$value;
}

einzufügen (nur ein Vorschlag, nicht selber getestet).

Bei der Gelegenheit wäre es schön, wenn der Tippfehler Sourround in Surround im Array 'CV' korrigiert würde. Sollte m.M.n. nur den Namen des Readings fixen.


Danke, Michael

olwaldi

Ich habe jetzt zum Testen in 70_DENON_AVR.pm meinen Änderungsvorschlag aktiviert und gleichzeitig den Tipfehler Sourround korrigiert (das o gestrichen). Und zu meiner Überraschung heißen die betroffenen Readings immer noch falsch.

Wie kann das möglich sein? Das File /opt/fhem/FHEM/70_DENON_AVR.pm enthält nirgends mehr den String Sourround!

Und ja, ich habe fhem durch shutdown/restart neu gestartet. Werden irgendwo in fhem präkompilierte Skripte gepuffert und überleben so?!


Verwirrtes Grüßle, Michael

MadMax-FHEM

Die Readings stehen im state-File/fhem.save und verschwinden nicht einfach so, werden halt nur nicht aktualisiert...

Du musst die falschen Readings mit deletereading Device Readingname löschen...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

olwaldi

#734
Das würde ich ja verstehen. Aber komischerweise "überleben" die falsch geschriebenen Readings, obwohl ich die im Source-Code 70_DENON_AVR.pm geändert habe. Und der Wert 1 in channelVolumeSourroundBackRight ist falsch - alle channelVolumes sind 0.

Ich habe immerhin eine Idee - mein Denon meldet die Volumes nur "manchmal". Folglich gibt es keine zu aktualisierenden Readings. D.h. durch das deletereading kann ich problemlos die falsch benannten Readings löschen. Jetzt muß mir mein Denon nur irgendwann mal neue Werte schicken:-) Übrigens, auch mein neues Reading roomSize funktioniert.


Danke, Michael