- Posted on
Thu Oct 08, 2015 5:15 pm
-
Betacruxis
offline
-
- Posts: 60
- Joined: Apr 03, 2010
Hi Joe,
Thanks for your help.
Depending if you count the first line of code as "0", 104 will be "root = xmitToReceiver(dev, xml_string)"
But if the first line is "1", 104 is the one with the "+val+".
Looks to me that "val" is an integer, but when I tried to use the expression " + vas as string + ", it gave me another error regarding "pluginproperties".
Here are the 4 files composing the plug in:
plugin.py
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import httplib, urllib2, sys, os
try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET
def str2bool(v):
return v.lower() in ("yes", "true", "t", "1")
def xmitToReceiver(dev, xml_string):
url = 'http://'+dev.pluginProps['txtip']+'/YamahaRemoteControl/ctrl'
req = urllib2.Request(
url=url,
data=xml_string,
headers={'Content-Type': 'application/xml'})
resp = urllib2.urlopen(req)
status_xml = resp.read()
root = ET.fromstring(status_xml)
return root
class Plugin(indigo.PluginBase):
def __init__(self, pluginId, pluginDisplayName, pluginVersion, pluginPrefs):
indigo.PluginBase.__init__(self, pluginId, pluginDisplayName, pluginVersion, pluginPrefs)
self.debug = True
def __del__(self):
indigo.PluginBase.__del__(self)
def startup(self):
self.debugLog(u"startup called")
def shutdown(self):
self.debugLog(u"shutdown called")
def deviceStartComm(self, dev):
self.updateStatus(dev)
# helper methods, these mostly serve to facilitate calls to the device
def updateStatus(self, dev):
# get status from receiver, update locals
self.debugLog(u"updating status...")
if dev is None:
self.debugLog(u"no device defined")
return
xml_string = '<YAMAHA_AV cmd="GET"><Main_Zone><Basic_Status>GetParam</Basic_Status></Main_Zone></YAMAHA_AV>'
root = xmitToReceiver(dev, xml_string)
#power = root.find("./Main_Zone/Basic_Status/Power_Control/Power").text
#sleep = root.find("./Main_Zone/Basic_Status/Power_Control/Sleep").text
#if(sleep!='Off'): sleep = "n"+sleep
#volume = root.find("./Main_Zone/Basic_Status/Vol/Lvl/Val").text
#mute = root.find("./Main_Zone/Basic_Status/Vol/Mute").text
#inputmode = root.find("./Main_Zone/Basic_Status/Input/Input_Sel").text
#dev.updateStateOnServer("power", power)
#dev.updateStateOnServer("sleep", sleep)
#dev.updateStateOnServer("volume", volume)
#dev.updateStateOnServer("mute", mute)
#dev.updateStateOnServer("input", inputmode)
def putMute(self, dev, val):
if dev is None:
self.debugLog(u"no device defined")
return
if val is None:
self.debugLog(u"value not defined")
return
xml_string = '<YAMAHA_AV cmd="PUT"><Main_Zone><Vol><Mute>'+val+'</Mute></Vol></Main_Zone></YAMAHA_AV>'
root = xmitToReceiver(dev, xml_string)
self.updateStatus(dev)
def putVolume(self, dev, val):
if dev is None:
self.debugLog(u"no device defined")
return
if val is None:
self.debugLog(u"value not defined")
return
xml_string = '<YAMAHA_AV cmd="PUT"><Main_Zone><Vol><Lvl><Val>'+val+'</Val><Exp>1</Exp><Unit>dB</Unit></Lvl></Vol></Main_Zone></YAMAHA_AV>'
root = xmitToReceiver(dev, xml_string)
self.updateStatus(dev)
def putPower(self, dev, val):
if dev is None:
self.debugLog(u"no device defined")
return
if val is None:
self.debugLog(u"value not defined")
return
xml_string = '<YAMAHA_AV cmd="PUT"><Main_Zone><Power_Control><Power>'+val+'</Power></Power_Control></Main_Zone></YAMAHA_AV>'
root = xmitToReceiver(dev, xml_string)
self.updateStatus(dev)
def putSleep(self, dev, val):
if dev is None:
self.debugLog(u"no device defined")
return
if val is None:
self.debugLog(u"value not defined")
return
xml_string = '<YAMAHA_AV cmd="PUT"><Main_Zone><Power_Control><Sleep>'+val+'</Sleep></Power_Control></Main_Zone></YAMAHA_AV>'
root = xmitToReceiver(dev, xml_string)
self.updateStatus(dev)
def putInput(self, dev, val):
if dev is None:
self.debugLog(u"no device defined")
return
if val is None:
self.debugLog(u"value not defined")
return
xml_string = '<YAMAHA_AV cmd="PUT"><Main_Zone><Input><Input_Sel>'+val+'</Input_Sel></Input></Main_Zone></YAMAHA_AV>'
root = xmitToReceiver(dev, xml_string)
self.updateStatus(dev)
def setInput(self, pluginAction, dev):
self.debugLog(u"setInput called")
val = pluginAction.props['ddlinput'].upper().replace(".","/").replace("_"," ")
self.putInput(dev, val)
Actions.xml
<?xml version="1.0"?>
<Actions>
<Action id="setVolume" deviceFilter="self">
<Name>Set Volume</Name>
<CallbackMethod>putVolume</CallbackMethod>
<ConfigUI>
<Field id="txtvolume" type="textfield" default="-30">
<Label>Level</Label>
<Description>in dB</Description>
</Field>
</ConfigUI>
</Action>
<Action id="increaseVolume" deviceFilter="self">
<Name>Increase Volume</Name>
<CallbackMethod>increaseVolume</CallbackMethod>
<ConfigUI>
<Field id="txtincrement" type="textfield" default="5">
<Label>Increment</Label>
<Description>in dB</Description>
</Field>
</ConfigUI>
</Action>
<Action id="decreaseVolume" deviceFilter="self">
<Name>Decrease Volume</Name>
<CallbackMethod>decreaseVolume</CallbackMethod>
<ConfigUI>
<Field id="txtincrement" type="textfield" default="5">
<Label>Increment</Label>
<Description>in dB</Description>
</Field>
</ConfigUI>
</Action>
<Action id="setMute" deviceFilter="self">
<Name>Set Mute</Name>
<CallbackMethod>putMute</CallbackMethod>
<ConfigUI>
<Field id="ddlmute" type="menu">
<Label>Set Mute</Label>
<List>
<Option value="On">On</Option>
<Option value="Off">Off</Option>
</List>
</Field>
</ConfigUI>
</Action>
<Action id="toggleMute" deviceFilter="self">
<Name>Toggle Mute</Name>
<CallbackMethod>toggleMute</CallbackMethod>
</Action>
<Action id="setPower" deviceFilter="self">
<Name>Set Power</Name>
<CallbackMethod>putPower</CallbackMethod>
<ConfigUI>
<Field id="ddlpower" type="menu">
<Label>Set Power</Label>
<List>
<Option value="On">On</Option>
<Option value="Standby">Standby</Option>
</List>
</Field>
</ConfigUI>
</Action>
<Action id="togglePower" deviceFilter="self">
<Name>Toggle Power</Name>
<CallbackMethod>togglePower</CallbackMethod>
</Action>
<Action id="setSleep" deviceFilter="self">
<Name>Set Sleep</Name>
<CallbackMethod>putSleep</CallbackMethod>
<ConfigUI>
<Field id="ddlsleep" type="menu">
<Label>Set Sleep</Label>
<List>
<Option value="Off">Off</Option>
<Option value="n30">30</Option>
<Option value="n60">60</Option>
<Option value="n90">90</Option>
<Option value="n120">120</Option>
</List>
</Field>
</ConfigUI>
</Action>
<Action id="setInput" deviceFilter="self">
<Name>Set Input</Name>
<CallbackMethod>setInput</CallbackMethod>
<ConfigUI>
<Field id="ddlinput" type="menu">
<Label>Set Input</Label>
<List>
<Option value="tuner">TUNER</Option>
<Option value="multi_ch">MULTI CH</Option>
<Option value="phono">PHONO</Option>
<Option value="cd">CD</Option>
<Option value="tv">TV</Option>
<Option value="md.cd-r">MD/CD-R</Option>
<Option value="bd.hd_dvd">BD/HD DVD</Option>
<Option value="dvd">DVD</Option>
<Option value="cbl.sat">CBL/SAT</Option>
<Option value="dvr">DVR</Option>
<Option value="vcr">VCR</Option>
<Option value="v-aux">V-AUX</Option>
<Option value="dock">DOCK</Option>
<Option value="pc.mcx">PC/MCX</Option>
<Option value="net_radio">NET RADIO</Option>
<Option value="usb">USB</Option>
</List>
</Field>
</ConfigUI>
</Action>
<Action id="getStatus" deviceFilter="self">
<Name>Get Status</Name>
<CallbackMethod>getStatus</CallbackMethod>
</Action>
</Actions>
Devices.xml
<?xml version="1.0"?>
<Devices>
<Device type="custom" id="receiver">
<Name>Yamaha RX Series Receiver</Name>
<ConfigUI>
<Field id="txtip" type="textfield" default="192.168.1.4">
<Label>Receiver IP Address</Label>
<Description>enter the ip address of your reciever</Description>
</Field>
</ConfigUI>
<States>
<State id="power">
<ValueType>
<List>
<Option value="On">On</Option>
<Option value="Standby">Standby</Option>
</List>
</ValueType>
<TriggerLabel>Power</TriggerLabel>
<ControlPageLabel>Power</ControlPageLabel>
</State>
<State id="sleep">
<ValueType>
<List>
<Option value="Off">Off</Option>
<Option value="n30">30</Option>
<Option value="n60">60</Option>
<Option value="n90">90</Option>
<Option value="n120">120</Option>
</List>
</ValueType>
<TriggerLabel>Sleep</TriggerLabel>
<ControlPageLabel>Sleep</ControlPageLabel>
</State>
<State id="volume">
<ValueType>Integer</ValueType>
<TriggerLabel>Volume</TriggerLabel>
<ControlPageLabel>Volume</ControlPageLabel>
</State>
<State id="mute">
<ValueType boolType="OnOff">Boolean</ValueType>
<TriggerLabel>Mute</TriggerLabel>
<ControlPageLabel>Mute</ControlPageLabel>
</State>
<State id="input">
<ValueType>
<List>
<Option value="sirius">SIRIUS</Option>
<Option value="xm">XM</Option>
<Option value="tuner">TUNER</Option>
<Option value="multi_ch">MULTI CH</Option>
<Option value="phono">PHONO</Option>
<Option value="cd">CD</Option>
<Option value="tv">TV</Option>
<Option value="md.cd-r">MD/CD-R</Option>
<Option value="bd.hd_dvd">BD/HD DVD</Option>
<Option value="dvd">DVD</Option>
<Option value="cbl.sat">CBL/SAT</Option>
<Option value="dvr">DVR</Option>
<Option value="vcr">VCR</Option>
<Option value="v-aux">V-AUX</Option>
<Option value="dock">DOCK</Option>
<Option value="pc.mcx">PC/MCX</Option>
<Option value="net_radio">NET RADIO</Option>
<Option value="rhapsody">RHAPSODY</Option>
<Option value="usb">USB</Option>
</List>
</ValueType>
<TriggerLabel>Input</TriggerLabel>
<ControlPageLabel>Input</ControlPageLabel>
</State>
</States>
</Device>
</Devices>
PluginConfig.xml
<?xml version="1.0"?>
<PluginConfig>
<Field id="lblFoo" type="label">
<Label>No items to config.</Label>
</Field>
</PluginConfig>