VoxCommando

VoxNastics (User Guides and Mods) => XML Exchange => Topic started by: yokel on June 24, 2015, 05:54:02 AM

Title: Denon Receiver Command Collection
Post by: yokel on June 24, 2015, 05:54:02 AM
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:

Code: [Select]
<?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 &amp; 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}&amp;&amp;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}&amp;&amp;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}&amp;&amp;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}&amp;&amp;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}&amp;&amp;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}&amp;&amp;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)&lt;(B)</ifType>
        <ifParams>80&amp;&amp;{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>

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)