NEWS
[Aufruf] DENON & Marantz Adapter
-
Bitte das Leerzeichen nach der URL weg machen `
Oh mein Gott, sorry, shame on meDa du ja bereits ein eigenes Skript nutzt, wäre es für mich interessant zu wissen, welche Funktionalitäten du über ioBroker (mit deinem Skript) bereits nutzt/gerne nutzen möchtest.
Da es mir etwas schwer fällt abzuschätzen, in wie weit manche Funktionen Priorität haben. Ich selbst nutze mein AVR nur sehr oberflächlich würde ich sagen. `
Ich nutze auch nur ein paar Sachen: ein, aus, Kanalwechsel, dabei lauter/leiser: z.B. Kanal zum Fernsehen auf 50%, für Hintergrund-Musik 40%.
Unten folgt eine Funktion, der ich den gewünschten Kanal und die Lautstärke übergebe. Sie schaltet den Denon dann auch an, falls dieser noch aus ist.
Wie Du siehst, ist es ein ziemliches "Gebastle" mit Zeitverzögerung usw., aber es läuft.
Ich werde mir morgen mal Deinen Adapter dann näher ansehen, danke auch für Deinen Hinweis wegen dem Port 23.
/** * @desc Denon Receiver: Bestimmten Kanal setzen und die Lautstärke in % * @opt strTargetInputSel: z.B: "MPLAY" oder "TUNER" * @opt intVolumeLevelPercent - Lautstärke in % */ function global_m_Denon_SetInput(strTargetInputSel, intTargetVolumeInPercent) { // Update status first. global_m_Denon_UpdateStatus(); // Then, check status 250ms later. // Führen wir 250ms später aus, einfach um sicherzustellen, dass der aktuelle Status in den Datenpunkten steht. setTimeout(function() { // Get Status var denonStatus = { InpSel: getState('javascript.0.me.denon-status.InputSelection').val, isMute: getState('javascript.0.me.denon-status.isMuteOn').val, isPwrOn: getState('javascript.0.me.denon-status.isPowerOn').val, VolPerc: getState('javascript.0.me.denon-status.VolumeLevel').val + 80 }; // Commands if(denonStatus.isPwrOn === true) { // ==== Denon ist bereits an. ==== /* Falls die aktuelle Lautstärke leiser ist als die gewünschte, so wechseln wir erst den Kanal. Damit vermeiden wir, dass es kurzfristig lauter wird :-) */ if (denonStatus.VolPerc < intTargetVolumeInPercent) { // Weg 1 - aktuelle Lautstärke ist leiser, also erst Kanal wechseln if(strTargetInputSel !== denonStatus.InpSel) global_m_Denon_Command ('PutZone_InputFunction/' + strTargetInputSel, 0); global_m_Denon_Volume (intTargetVolumeInPercent, 2000); // 2000 echt nötig, sonst schaltet er nicht } else if (denonStatus.VolPerc > intTargetVolumeInPercent) { // Weg 2 - aktuelle Lautstärke ist lauter, also erst leiser machen vor Kanalwechsel global_m_Denon_Volume (intTargetVolumeInPercent, 0); if(strTargetInputSel !== denonStatus.InpSel) global_m_Denon_Command ('PutZone_InputFunction/' + strTargetInputSel, 250); } else { // Weg 3 - Lautstärke bleibt unverändert if(strTargetInputSel !== denonStatus.InpSel) global_m_Denon_Command ('PutZone_InputFunction/' + strTargetInputSel, 0); } } else { // ==== Denon ist noch aus. Anderes Timing hier ;-) ==== global_m_Denon_Command ('PutZone_OnOff/ON', 0); if(strTargetInputSel !== denonStatus.InpSel) global_m_Denon_Command ('PutZone_InputFunction/' + strTargetInputSel, 1000); if (denonStatus.VolPerc !== intTargetVolumeInPercent) global_m_Denon_Volume (intTargetVolumeInPercent, 2000); } }, 250); }
Hier nur zum Verständnis noch die anderen beiden Functions, die ich verwende:
/** * @desc Denon Receiver: Kommando übergeben * @opt strCommand - Kommando, z.B. 'PutZone_OnOff/ON' * @opt intDelayInMilliseconds - Verzögerung in Millisekunden, falls gewünscht */ function global_m_Denon_Command (strCommand, intDelayInMilliseconds) { var denon_url = getState('javascript.0.me.preset.denon_URL').val; setTimeout(function() { require("request")(denon_url + strCommand); g_myLog('Denon-Kommando: ' + strCommand); }, intDelayInMilliseconds); }
/** * @desc Denon Receiver: Lautstärke setzen in %. Wird dann automatisch umgewandelt. * @opt intVolumeLevelPercent - Lautstärke in % * @opt intDelayInMilliseconds - Verzögerung in Millisekunden, falls gewünscht */ function global_m_Denon_Volume (intVolumeLevelPercent, intDelayInMilliseconds) { // Volume wird so berechnet: XX-80, d.h. eine Lautstärke von 45: 45-80=-35 var intVolumeCalculated = (intVolumeLevelPercent - 80); // Sicherheit: Lautstärke nicht über 60% (= -20)! if (intVolumeCalculated > -20) intVolumeCalculated = -20; // Set Volume finally: global_m_Denon_Command ("PutMasterVolumeSet/" + intVolumeCalculated, intDelayInMilliseconds); // Falls Receiver auf "Mute": würde man über Kommando "PutVolumeMute/off" aussschalten. Irrelevant, da sowohl bei Kanalwechsel als auch Lautstärkeänderung Mute abgeschalten wird. }
-
Hallo fox,
sehr gut. Ich war ja kurz davor auch einen Denon-Adapter zu schreiben, nach dem es ja einen angefangenen Adapter gibt und ein ein ziemlich umfangreiches https://forum.iobroker.net/viewtopic.php?f=21&t=3032&start=40#p82336 .
Ich habe den Adapter mal kurz angetestet. Bisher sieht es gut aus, aber ein ausführlichen Test werde ich die Tage noch machen.
Was ich vermisse: Zonen-Steuerung. Zone 2 ein/aus (am Besten noch Lautstärke direkt setzen) wäre gut (nutze ich für Alexa-Steuerung, um im Esszimmer die Musik einzuschalten. Das Steuerungsprotokoll gibt ja alles her.
Ich hab dazu auch schon mal ein Issue aufgemacht.
Grüße
Daniel
-
Das setzen der Lautstärke für die MZ geht auch über den State (s. readme).
Danke fürs erste Feedback. Die Zonensteuerung neben der Main werde ich zeitnah implementieren.
beste Grüße
fox
-
So, ich hab den Adapter auch mal angetestet und er macht alles was er soll
Weiß nicht, ob es hier noch Leute gibt, die über FM Radio hören, aber dann wäre wohl gut, wenn man da über einen State die voreingestellten Sender auswählen kann. (ich selbst brauch das aber nicht)
-
Hi,
danke das du hier einen Adapater baust.
Leider schlägt die Installation bei mir fehl:
$ ./iobroker url "https://github.com/foxriver76/ioBroker.denon/tarball/master " --debug install "https://github.com/foxriver76/ioBroker.denon/tarball/master npm install "https://github.com/foxriver76/ioBroker.denon/tarball/master --production --save --prefix "/opt/iobroker" (System call) /bin/sh: 1: Syntax error: Unterminated quoted string ERROR: host.ioBrokerBETRIEB Cannot install "https://github.com/foxriver76/ioBroker.denon/tarball/master: 2 ERROR: process exited with code 25
Woran kann dies liegen ?
Gruß
Michael
Okay mein Fehler habe den Beitrag oben übersehen. Wenn das Leerzeichen rauskommt klappt alles.
-
Selbes Problem wie oben –> Bitte kein Leerzeichen nach der URL machen. Habe ich irgendwo einen blöden Link gepostet, wo ein Leerzeichen am Ende ist? Da es schon zum zweiten mal auftritt.
-
URL https://github.com/foxriver76/ioBroker.denon geht übrigens auch
-
Was ich vermisse: Zonen-Steuerung. Zone 2 ein/aus (am Besten noch Lautstärke direkt setzen) wäre gut (nutze ich für Alexa-Steuerung, um im Esszimmer die Musik einzuschalten. Das Steuerungsprotokoll gibt ja alles her.
Ich hab dazu auch schon mal ein Issue aufgemacht. `
Hi Daniel,
ich habe versucht die Zone2 zu integrieren (3. Zone ist derzeit nicht integriert, falls dein AVR diese unterstützt), wenn der Adapter Zwei-Zonen fähig ist, werden automatisch entsprechende States angelegt. Leider kann ich relativ wenig damit testen. Wäre super, wenn du die aktuelle Version ausprobieren könntest.
beste Grüße
fox
-
Hallo Fox,
habe die Zone 2 angetestet. Du hast es so gebaut, dass der Adapter erst einen Z2-Befehl empfangen muss und die States für ZONE2 dann erst erzeugt.
Ist im Prinzip OK für mich, hat zumindest prima funktioniert.
ZONE2-Power, Volume-Up/Down, Volume (Wert setzen), Input und Mute funktionieren prima (Werte setzen Status abfragen).
Quickselects nutze ich nicht bzw. wüsste ich auch nicht, dass die für die Zone 2 überhaupt funktionieren.
Eine Zone 3 hat mein AVR nicht.
Sonst prima, Danke!
Weitere Tests folgen in den nächsten Tagen.
Grüße
Daniel
-
Hallo Fox,
eine Sache ist mir grad aufgefallen:
bei zone2.powerState = false, kommt kein Acknowledge, d.H. es wird kein entsprechender Wert zurückgelesen.
M.E. liegt das daran, dass bei der Zone 2 die Status-Werte "Z2ON" und "Z2OFF" sind und nicht wie beim globalem Powerstate "PWON" und "PWSTANDBY".
Edit:
Hab grad gesehen, ist ja so drin mit Z2OFF bei handleResponse. Aber es will nicht, wenn ich über ioBroker den State auf false setze. Der Wert bleibt rot.
Edit2:
sehr merkwürdig, manchmal geht es, manchmal nicht. Beim Ausschalten wird jedenfalls über Telnet immer "PWSTANDBY" und "Z2OFF" gesendet, sofern die Zone 2 alleine eingeschaltet war (Main-Zone off).
Ist Main-Zone und Zone 2 on, dann geht es ohne Probleme, da wird dann beim ausschalten von Zone 2 natürlich auch nur Z2OFF gesendet.
Hier mal ein Auszug aus meinem Telnet mitschnitt (das sind nur die gelesenen Werte, gesteuert habe ich über ioBroker, mitgeschnitten über einen anderen PC).
-- nur ZONE 2 eingeschaltet PWON Z2ON -- ZONE 2 wieder aus PWSTANDBY Z2OFF -- alles eingeschaltet PWON ZMON MV29 MVMAX 98 MV11 MVMAX 98 PWON SSINFAISFSV 441 Z2ON -- hier nur Zone 2 abgeschaltet Z2OFF -- Zone 2 wieder dazugeschaltet Z2ON -- Zone 2 wieder aus Z2OFF
-
Edit2:
sehr merkwürdig, manchmal geht es, manchmal nicht. Beim Ausschalten wird jedenfalls über Telnet immer "PWSTANDBY" und "Z2OFF" gesendet, sofern die Zone 2 alleine eingeschaltet war (Main-Zone off).
Ist Main-Zone und Zone 2 on, dann geht es ohne Probleme, da wird dann beim ausschalten von Zone 2 natürlich auch nur Z2OFF gesendet. `
Hi Daniel,Kannst du den Adapter mal auf debug stellen?
Ich denke du weißt wie, ansonsten: Unter dem Tab Instanzen auf das runde Icon mit dem Männchen das beim hovern Expertenmodus anzeigt und dann auf Log Stufe hinter dem Denon Adapter klicken und debug selektieren.
Dann loggt der Adapter z.B. Incoming data: Z2OFF
Hier wäre interessant, was da steht in den Fällen in denen es nicht klappt.
beste Grüße und danke fürs testen
fox
-
Ja, Debug ist klar ;).
Ich wollte es jetzt mitloggen, aber jetzt krieg ichs nicht mehr hin :). Vorführeffekt.
Naja, sollte ich es noch mal beobachten, werde ich es noch mal probieren.
Es funktioniert ja sonst.
-
Danke. Falls es auftritt wäre es super, wenn du Bescheid gibst.
Noch eine kurze Rückfrage: Den Input Channel von Zone2 erkennt er korrekt? Da war am ehsten meine Befürchtung, dass was nicht läuft.
-
Noch eine kurze Rückfrage: Den Input Channel von Zone2 erkennt er korrekt? Da war am ehsten meine Befürchtung, dass was nicht läuft. `
Also steuern geht auf jeden Fall normal.
Hier habe ich mir jetzt auch noch mal das "Lesen" angeschaut, d.h. Steuerung über z.B. Denon-App / HEOS-App bzw. Fernbedienung.
Prinzipiell wird auch selectInput korrekt aktualisiert.
Was auf jeden Fall nicht geht, ist der Input AUX1 (mehrfach hintereinander getestet, geht definitiv nicht). Ich kann ihn setzen (wird auch ausgeführt), aber egal ob ich per FB, App oder ioBroker auf AUX1 schalte, der State wird nicht bestätigt.
Im Log kommt es aber korrekt an:
denon.0 2018-06-03 17:32:07.852 debug Command to handle is SVOFF denon.0 2018-06-03 17:32:07.852 debug Incoming data: SVOFF denon.0 2018-06-03 17:32:07.678 debug Command to handle is Z2AUX denon.0 2018-06-03 17:32:07.677 debug Incoming data: Z2AUX1 denon.0 2018-06-03 17:31:54.946 debug Command to handle is SVOFF denon.0 2018-06-03 17:31:54.943 debug Incoming data: SVOFF denon.0 2018-06-03 17:31:54.907 debug Command to handle is Z2NET denon.0 2018-06-03 17:31:54.906 debug Incoming data: Z2NET
-
Bei der Main-Zone ist das bei mir auch. AUX1 kann ich zwar steuern, aber wird nie angezeigt.
Manchmal zeigt er nur "AUX" (mit Ack) an.
denon.0 2018-06-03 17:38:57.080 debug Command to handle is SI denon.0 2018-06-03 17:38:57.080 debug Incoming data: SIAUX1 denon.0 2018-06-03 17:38:57.053 debug Command to handle is SSSMGMUS denon.0 2018-06-03 17:38:57.052 debug Incoming data: SSSMG MUS denon.0 2018-06-03 17:38:56.002 debug Message sent: SIAUX1 denon.0 2018-06-03 17:38:55.998 debug State Change - ID: selectInput; State: 15
Da wird die Zummer weggeschnitten bei Command to Handle (Z2AUX statt Z2AUX1). Und bei der Main-Zone steht nur "SI" bei Command to handle.
-
Bei der Main-Zone ist das bei mir auch. AUX1 kann ich zwar steuern, aber wird nie angezeigt.
Manchmal zeigt er nur "AUX" (mit Ack) an.
denon.0 2018-06-03 17:38:57.080 debug Command to handle is SI denon.0 2018-06-03 17:38:57.080 debug Incoming data: SIAUX1 denon.0 2018-06-03 17:38:57.053 debug Command to handle is SSSMGMUS denon.0 2018-06-03 17:38:57.052 debug Incoming data: SSSMG MUS denon.0 2018-06-03 17:38:56.002 debug Message sent: SIAUX1 denon.0 2018-06-03 17:38:55.998 debug State Change - ID: selectInput; State: 15
Da wird die Zummer weggeschnitten bei Command to Handle (Z2AUX statt Z2AUX1). Und bei der Main-Zone steht nur "SI" bei Command to handle. `
Also ist bei mir bediengt nachstellbar (Wenn ich AUX1 setze steht nur AUX drin), in dem Fall kenne ich auch das Problem. Werde ich fixen, dass er mit der korrekten Zahl drinnen steht.
Bezüglich steuern: Die Frage ist, hat dein Receiver überhaupt mehr Eingänge als AUX1? Ich habe einen Denon AVR X1200W und der hat nur AUX1.
-
Bezüglich steuern: Die Frage ist, hat dein Receiver überhaupt mehr Eingänge als AUX1? Ich habe einen Denon AVR X1200W und der hat nur AUX1. `
Ja, er hat 2: AUX1 und AUX2.
Der AUX1 ist auch aktiv (also anwählbar und wird nicht versteckt).
Einer ist default-mäßig hinten und der andere für den HDMI-Front-Anschluss.
Ich habe übrigens den AVR-X2400H (2016-Generation).
-
Ja, er hat sogar 2: AUX1 und AUX2.
Der AUX1 ist auch aktiv (also anwählbar und wird nicht versteckt).
Einer ist default-mäßig hinten und der andere für den HDMI-Front-Anschluss.
Ich habe übrigens den AVR-X2400H (2016-Generation). `
Kannst du auf der Main Zone AUX2 setzen?
-
Die Detection sollte jetzt (mit der neusten Version) funktionieren (also richtige AUX Nummern zuordnen).
->Die Display-States sind noch nicht sonderlich funktional (werden derzeit nur beim Startup aktualisiert).
-
Kannst du auf der Main Zone AUX2 setzen? `
AUX2 steuern funktioniert, der Receiver schaltet korrekt um.
Grüße
Daniel