Modul für Denon (Marantz) AV Receiver

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

Vorheriges Thema - Nächstes Thema

olwaldi

Hab' mal wieder was geändert ...

  • Ich habe im on/off gestern einen Bug eingebaut, wodurch das Ausschalten nicht mehr funktioniert hat. Gefixt.
  • Ich habe das Power-Management jetzt wieder zurückgebaut, wie es sich @vneise gewünscht hat und es ursprünglich auch war. Grund: Der Receiver hat tatsächlich zwei verschiedene(!) Kommandos zum ein/ausschalten: PWON/OFF und ZMON/OFF. Im ersten Fall werden alle Zonen geschaltet, im zweiten nur die mainZone. Und genau so hat es der Modul-Autor (richtigerweise) auch implementiert. Somit funktioniert das EinAusschalten jetzt wie folgt:
    set Denon on|off|toggle   -> alle Zonen werden gemeinsam geschaltet
    set Denon zoneMain on|off -> nur main-Zone wird geschaltet
    Um Zugriff auf die anderen Zonen zu bekommen, muß man ein entsprechendes DENON_AVR_ZONE Device anlegen.
  • Ich habe die Funktionen DENON_AVR_Connectioncheck, _Ready, _Connect und _OnConnect "unkommentiert" von @vbs übernommen, aber leicht modifiziert. Insbesonder vermute ich, daß @vbs in der _Connect das $reopen an DevIo_Open übergeben wollte. Unklar ist mir, ob man für USBDev "was anderes" zurückgeben sollte.
  • In DENON_AVR_Define habe ich versucht, Rechnernamen beim Aufruf zu unterstützen. Um serielle von IP-Devices unterscheiden zu können, muß für serielle Devices zwingend die Baudrate an den Devicenamen angehängt werden (COM1 wäre ja auch ein gültiger Rechnername).

Ich habe in ein paar subs als Return-Wert undef zurückgegeben, da mir nicht klar ist, welche Instanz den return verarbeiten mag. Freue mich, wenn's jemand besser wüßte.

Bitte testen. Insbesondere würde ich mich freuen, wenn @vbs checkt, ob ich seine Änderungen "richtig" übernommen habe. Zum Testen habe ich bei mir jetzt wieder connectionCheck ohne Probleme eingeschaltet ...

Die Skripte habe ich wie üblich weiter oben aktualisiert.


Grüßle, Michael

olwaldi

Wenn man ein Modul überschläft ... versteht man ggf. wieder was:

Eigentlich war ich der Meinung, daß das Reading state nur von DevIo verändert werden sollte. So ist es aber m.M.n. gar nicht gedacht - state soll vom Modul selber gepflegt werden. DevIo speichert lediglich Fehler beim Zugreifen in state, oder aber "opened", wenn das Gerät erfolgreich geöffnet werden konnte. Auf das muß dann das Modul reagieren.

Allerdings erwartet DevIo_Expect den Wert "opened", aber Dank @vbs gibts dafür ja besseren Ersatz.

STATE hingegen wird "automatisch" von fhem gepflegt und automatisch auf den Wert des Readings state gesetzt.

Also habe ich nochmal 70_DENON_AVR verändert, so daß state wieder on/off annehmen darf. Gleichzeitig habe ich auch wieder mainOff aus devStateIcon 'rausgenommen.


Grüßle, Michael

olwaldi

#917
Hoffentlich jetzt meine letzte Änderung:-)
  • Beim StatusRequest wird der aktuelle DAB-Zustand jetzt explizit abgefragt.
  • Es wird eine Fehlermeldung ausgegeben, wenn der DNS-Name im define unbekannt ist.
  • Im Reading multiEQ steht jetzt der Wert aus Anwendersicht (also z.B. reference statt AUDYSSEY). Sollte schon länger "falsch" gewesen sein.
  • DENON_AVR_Parse direkt aufrufbar (zum einfacheren Debugggen des Moduls). Jetzt kann man z.B. Readings direkt setzen durch
    { my ($hash) = $defs{<devicename>};; DENON_AVR_Parse($hash, "DASTNDasIstMeinDABSender")}
  • Das userreading brand wird -wenn möglich- automatisch gesetzt.
  • Input Sat/Cbl umbenannt in Cbl/Sat wie bei den Zonen. Außerdem benennt Denon diesen Input Cbl/Sat.
  • WebGUI & online-Doku verbessert (get zone entfernt, Attribut do_not_notify hinzugefügt)
  • volumeMax durch 10 dividiert.
Würde mich über Rückmeldungen von euch freuen.

Gerne auch Hinweise, ob der Kopf bzgl. Autor in den perl-Skripten so stimmt

Grüßle, Michael

Bartimaus

Danke, ich hoffe ich komme heute Abend endlich mal wieder dazu die Änderungen (insb. DAB) zu testen....
LG
B.


FHEM@AMD-Ryzen7-5825U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Bartimaus

#919
Moin,

sodele, es (DAB) funktioniert.... zwar anders als bisher, aber das ist ja egal....

Die bisherigen Readings "DAB_*" werden nicht aktualisiert, dafür aber die Readings: "dab*".
DAB-Sender kann ich problemlos wechseln
LG
B.


FHEM@AMD-Ryzen7-5825U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

olwaldi

#920
Prima!

Ich war so frei und habe die DAB-readings alle umbenannt, da die readings in CamelCase geschrieben werden "sollten". Mir selber waren immer die Level-Readings aufgefallen - in level... umbenannt.

Die alten readings kannst Du löschen durch
deletereading <device-name> DAB.*Oder einfach das device neu anlegen.

Gerade beim Hören einen neuen Bug entdeckt und gefixt - im reading multiEQ steht der Wert aus "Denon-Sicht" statt "Anwendersicht - also z.B. AUDYSSEY anstelle von reference.

Frisch gefixt...

Grüßle, Michael

Nachtrag: Wenn man einmal angefangen hat ... Habe doch noch ein paar Kleinigkeiten korrigiert s.o.

olwaldi

Mir ist aufgefallen, daß in der WebGUI von DENON_AVR die set-Zeile immer bei volumeStraight startet. Warum nicht beim ersten Eintrag?

Wenn man dann dort volumeUp oder volumeDown auswählt und auf set drückt, wird die Lautstärke wie gewünscht angepaßt. Aber die set-Zeile springt sofort wieder auf volumeStraight (mit der neuen Lautstärke). "Schlimmer", in der webCmd-Zeile darüber wird der angezeigte Lautstärkewert nicht aktualisiert. Das passiert erst nach einem refresh im Browser.

Ist wirklich eine Kleinigkeit und stört nicht wirklich. Aber es könnte ja auch sein, daß irgendwas im Code nicht stimmt. Andererseits tritt dasselbe Problem auch in einer alten Version von 2018 auf, hat dann wohl nix mit meinen Änderugen zu tun.

Grüßle, Michael

Shadow3561

Bei mir funktioniert es tadellos. OSX mit Safari.

olwaldi

Dann ist's wohl ein Problem je nach Browser. Andererseits verhält sich chrome@Android gleich. Zumal ja ein reload der fhem-Seite im Browser das Anzeigeproblem löst.

@Shadow3561: Hast Du auch mal meine Version von 70_DENON_AVR ausprobiert?

Grüßle, Michael

Shadow3561

ZitatHast Du auch mal meine Version von 70_DENON_AVR ausprobiert?
Nein.

olwaldi

Habe immerhin jetzt einen Workaround für mein GUI-update-Problem gefunden. In der Routine DENON_AVR_CommandSetVolume wird ja eigentlich ein Lautstärke-Kommando an den Receiverr gesendet, die zugehörigen Readings volume/volumeStraight werden (richtigerweise) NICHT aktualisiert. Das passiert erst, sobald der Receiver in DENON_AVR_Read antwortet - zeitlich vermutlich ein paar zehntel Sekunden "später". Offenbar wird dann der slider nicht aktualisiert?!

Ich habe (testweise) beide Readings in DENON_AVR_CommandSetVolume mit readingsBulkUpdate aktualisiert - schon funktionieren volumeUp/volumeDown wie erwartet und der slider aktualisiert. Ich verstehe allerdings nicht, warum das notwendig sein sollte.

Ich diskutiere dasselbe Thema übrigens auch im Bereich FHEMWEB unter https://forum.fhem.de/index.php?topic=143797.msg1357083#msg1357083

Grüßle, Michael

Shadow3561

Es ist zwar schon ein wenig her als ich das letzte Mal am Modul arbeitete,
Aber,
Ich bin der festen Überzeugung, dass der AVR das Ändern der Lautstärke über Telnet bestätigt ohne das man es extra abfragen müsste. Die Frage ist, warum funktioniert es bei mir und bei dir nicht? Nutzt du eine andere Verbindung zum AVR?

olwaldi

#927
Ich nutze auch telnet.

Und ja, die Bestätigung vom Receiver kommt ja auch an, was ein ReadingsVal(..., "volumeStraight", "?") bestätigt. Auch ein F5 aka Refresh aktualisiert den slider im webCmd.

Ich habe ja auch tatsächlich an ..._Read() und ..._Parse() "gebastelt", da m.M.n. im alten Code Readings(Begin|End)Update nicht immer symmetrisch aufgerufen worden sind. Und ich Code lesbarer finde, wenn Begin|End nicht über sub-Aufrufe hinweg verändert werden.

Letztendlich sollte ich vielleicht nicht so genau in das Modul gucken - tut ja. Habe ja auch nur damit angefangen, als es nach einem fhem-Update Fehlermeldungen im Logfile gab - Ursage lag ja nichtmal in DENON_AVR.

Gerade eben habe ich noch entdeckt, daß die IP des Receivers an zwei Stellen ermittelt/abgespeichert wird (zusätzlich als $hash->{helper}{deviceIP}). Habe mal $hash->{IP} überleben lassen.

maxVolume muß durch 10 dividiert werden. Auch noch korrigiert.

Beide Korrekturen ein paar Posts weiter oben eingepflegt.

Sollte man eigentlich im Kopf von Modulen die sub mit einem prototype auflisten? Wird scheinbar recht unterschiedlich gehandhabt. In DENON_AVR z.B. sind ein paar aufgeführt, aber nicht alle.

Ich sollte aufhören, nach der Ursache für mein Refresh-Problem zu suchen - ist sonst ein Faß ohne Boden:-)


Grüßle, Michael



Shadow3561

Manchmal ist es besser ganz von vorne zu beginnen. Ich kann dir dabei leider nicht helfen. Mein Modul macht was es soll und ,,Never change a Running System" ist bei mir die Devise. Mein FHEM läuft nur um einige Dinge im KNX zu automatisieren weil ein Homeserver einfach zu teuer ist und ich somit flexibler bei der Geräteauswahl, was nicht KNX betrifft, bin.
Probiere es mal mit Chat GPT. Habe kürzlich damit ein Modul gebastelt um meine LG Klima und den LG Kühlschrank zu überwachen und zu steuern. Hat mich 1 WE Zeit gekostet. Ein KNX Ankoppler für die Klima kostet schon fast so viel wie die Klima selbst. Das selbe gilt für meine Viessmann Therme.
Ich drücke die Daumen. Vielleicht finde ich ja mal die Zeit ein Testsystem auf zu setzen und dein Modul mal zu testen.

Mit freundlichen Grüßen