Another Sorta Plugin. This should control any lan/wifi Denon(maybe even marantz) receiver. I've only tested on a Denon AVRS700W's though. Most of these receivers have multiple inputs, so the voice commands are kinda geared with that in mind. Another note, when selecting inputs in Zone 2+ Some inputs won't register. This is because Zone 2 is allowed a smaller pool of inputs to choose from by design. The raise volume command is currently only setup for zone 1, i'm working on figuring out the best practice for the logic on that.
Install:
- Copy/paste the code here into VC:
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.1.4.8-->
<groupCollection open="False" name="Denon Receiver">
<commandGroup open="False" name="Denon Setup" enabled="True" prefix="" priority="0" requiredProcess="" description="">
<command id="679" name="Denon Setup (input your ip:port & run once)" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>File.MakeDir</cmdType>
<params>
<param>{Path.VC}\Denon payloads</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Map.Set</cmdType>
<params>
<param>DenonSetup</param>
<param>Denon</param>
<param>http://yourIP:YourPort(typically port 80)</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Map.ExportPayloadXML</cmdType>
<params>
<param>{Path.VC}\Denon payloads\Denon.xml</param>
<param>Denon_Receiver</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Map.ExportPayloadXML</cmdType>
<params>
<param>{Path.VC}\Denon payloads\Denon_Inputs.xml</param>
<param>Denon_Receiver_Inputs</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</command>
<command id="502" name="Get Zone 2" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>Scrape.XML</cmdType>
<params>
<param>{M:DenonSetup.Denon Scrape}{M:Denon_Receiver.Scrape Zone 2}</param>
<param>ZonePower</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>power</param>
<param>{Match.1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Scrape.XML</cmdType>
<params>
<param>{M:DenonSetup.Denon Scrape}{M:Denon_Receiver.Scrape Zone 2}</param>
<param>MasterVolume</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>mastervolume</param>
<param>{Match.1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Scrape.XML</cmdType>
<params>
<param>{M:DenonSetup.Denon Scrape}{M:Denon_Receiver.Scrape Zone 2}</param>
<param>InputFuncSelect</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>input</param>
<param>{Match.1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Scrape.XML</cmdType>
<params>
<param>{M:DenonSetup.Denon Scrape}{M:Denon_Receiver.Scrape Zone 2}</param>
<param>FriendlyName</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>DenonName</param>
<param>{Match.1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>{var.DenonName} is Currently {var.power} the volume level is {var.mastervolume} the input is set to {var.input}. </param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>OSD.ShowText</cmdType>
<params>
<param>{var.DenonName} Zone 2{CR} Power: {var.power}{CR}Volume: {var.mastervolume}{CR}Input: {var.input}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<event>GetZone2</event>
</command>
</commandGroup>
<commandGroup open="False" name="Denon" enabled="True" prefix="" priority="0" requiredProcess="" description="">
<command id="454" name="Get Zone 1 or 2 States" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<if ifBlockDisabled="False" ifNot="False">
<ifType>(A)Contains(B)</ifType>
<ifParams>{1}&&1</ifParams>
<then>
<action>
<cmdType>Scrape.XML</cmdType>
<params>
<param>{M:DenonSetup.Denon Scrape}{M:Denon_Receiver.Scrape Main Zone}</param>
<param>ZonePower</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>power</param>
<param>{Match.1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Scrape.XML</cmdType>
<params>
<param>{M:DenonSetup.Denon Scrape}{M:Denon_Receiver.Scrape Main Zone}</param>
<param>MasterVolume</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>mastervolume</param>
<param>{Match.1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Scrape.XML</cmdType>
<params>
<param>{M:DenonSetup.Denon Scrape}{M:Denon_Receiver.Scrape Main Zone}</param>
<param>InputFuncSelect</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>input</param>
<param>{Match.1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Scrape.XML</cmdType>
<params>
<param>{M:DenonSetup.Denon Scrape}{M:Denon_Receiver.Scrape Main Zone}</param>
<param>FriendlyName</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>DenonName</param>
<param>{Match.1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>{var.DenonName} Zone 1 is Currently {var.power} the volume level is {var.mastervolume} the input is set to {var.input}.</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>OSD.ShowText</cmdType>
<params>
<param>{var.DenonName} Zone 1{CR} Power: {var.power}{CR}Volume: {var.mastervolume}{CR}Input: {var.input}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else>
<action>
<cmdType>VC.TriggerEvent</cmdType>
<params>
<param>GetZone2</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</else>
</if>
<phrase>What is</phrase>
<phrase optional="true">the</phrase>
<phrase>Receiver's,Denon's</phrase>
<payloadList>Zone 1,Zone 2</payloadList>
<phrase optional="true">Current</phrase>
<phrase>state,settings</phrase>
</command>
<command id="494" name="Power {1} to {2}" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<if ifBlockDisabled="False" ifNot="False">
<ifType>(A)Contains(B)</ifType>
<ifParams>{1}&&2</ifParams>
<then>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>currentZone</param>
<param>{M:Denon_Receiver.Zone 2}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>currentZone</param>
<param>{M:Denon_Receiver.???}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</else>
</if>
<if ifBlockDisabled="False" ifNot="False">
<ifType>(A)==(B)</ifType>
<ifParams>{2}&&On</ifParams>
<then>
<action>
<cmdType>Scrape</cmdType>
<params>
<param>{M:DenonSetup.Denon}{M:Denon_Receiver.On}{var.currentZone}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else>
<action>
<cmdType>Scrape</cmdType>
<params>
<param>{M:DenonSetup.Denon}{M:Denon_Receiver.Off}{var.currentZone}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</else>
</if>
<phrase>Turn</phrase>
<phrase>Receiver,Denon,Amp</phrase>
<payloadList>Zone 1,Zone 2</payloadList>
<payloadList>On,Off</payloadList>
</command>
<command id="508" name="Set {1} Input to {2}" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<if ifBlockDisabled="False" ifNot="False">
<ifType>(A)Contains(B)</ifType>
<ifParams>{1}&&2</ifParams>
<then>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>currentZone</param>
<param>{M:Denon_Receiver.Zone 2}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>currentZone</param>
<param>{M:Denon_Receiver.???}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</else>
</if>
<action>
<cmdType>Scrape</cmdType>
<params>
<param>{M:DenonSetup.Denon}{2}{var.currentZone}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>Set,Change</phrase>
<phrase>Receiver,Denon,Amp</phrase>
<payloadList>Zone 1,Zone 2</payloadList>
<phrase>Input,source</phrase>
<phrase optional="true">to</phrase>
<payloadFromXML phraseOnly="False" use2partPhrase="False" phraseConnector="by" Phrase2wildcard="anyone" optional="False">Denon payloads\Denon_Inputs.xml</payloadFromXML>
</command>
<command id="92" name="raise/lower Volume % from current level" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>Scrape.XML</cmdType>
<params>
<param>{M:DenonSetup.Denon Scrape}{M:Denon_Receiver.Scrape Main Zone}</param>
<param>MasterVolume</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>DenonCurrentVol1</param>
<param>{Match.1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>PY.ExecString</cmdType>
<params>
<param>result=80{Var.DenonCurrentVol1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>DenonCurrentVol1</param>
<param>{LastResult}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>PY.ExecString</cmdType>
<params>
<param>result={Var.DenonCurrentVol1}*{1}/100</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<if ifBlockDisabled="False" ifNot="False">
<ifType>(A)==(B)</ifType>
<ifParams>{LastResult}&&1</ifParams>
<then>
<action>
<cmdType>Results.SetLastResult</cmdType>
<params>
<param>1</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else>
<action>
<cmdType />
<params />
<cmdRepeat>1</cmdRepeat>
</action>
</else>
</if>
<if ifBlockDisabled="False" ifNot="False">
<ifType>(A)Contains(B)</ifType>
<ifParams>{LastSpoken}&&lower</ifParams>
<then>
<action>
<cmdType>PY.ExecString</cmdType>
<params>
<param>result={Var.DenonCurrentVol1}-{1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else>
<action>
<cmdType>PY.ExecString</cmdType>
<params>
<param>result={Var.DenonCurrentVol1}+{1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</else>
</if>
<if ifBlockDisabled="False" ifNot="False">
<ifType>(A)<(B)</ifType>
<ifParams>80&&{LastResult}</ifParams>
<then>
<action>
<cmdType>Results.SetLastResult</cmdType>
<params>
<param>80</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>OSD.ShowText</cmdType>
<params>
<param>Volume has reached the highest level.</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else />
</if>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>DenonCurrentVol1</param>
<param>{LastResult}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>PY.ExecString</cmdType>
<params>
<param>result={Var.DenonCurrentVol1}-80</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>DenonCurrentVol1</param>
<param>{LastResult}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Scrape</cmdType>
<params>
<param>{M:DenonSetup.Denon}{M:Denon_Receiver.Set Volume}{var.DenonCurrentVol1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>raise, lower</phrase>
<phrase>Receiver,Denon,Amp</phrase>
<phrase>volume</phrase>
<payloadList>0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100</payloadList>
<phrase optional="true">percent</phrase>
</command>
</commandGroup>
</groupCollection>
- Convert the two attached xml databases to Maps(open the map editor, then import the xml's)
- Open the Denon Setup Command. Replace this string "http://yourIP:YourPort(typically port 80) with your Receiver's ip:port. Run the command once
Commands should then work.
Currently commands:
Get Zone States
Set Zone {1} to {2}
Set Zone {1} Input to {2}
Raise/lower volume {1} percent(Zone1 only right now)