@@ -16,6 +16,7 @@ class pyhue_isy_node_handler(hue_upnp_super_handler):
1616
1717 def __init__ (self , parent , name , node , scene ):
1818 self .parent = parent
19+ self .hid = 0
1920 self .name = name
2021 self .node = node
2122 self .scene = scene
@@ -62,7 +63,8 @@ def set_off(self):
6263 def set_bri (self ,value ):
6364 self .parent .parent .logger .info ('pyhue:isy_handler.set_bri: %s on val=%d' % (self .name , value ));
6465 # Only set directly on the node when it's dimmable and value is not 0 or 254
65- if self .node .dimmable and value > 0 and value < 254 :
66+ # TODO: node.dimmable broken in current PyISY?
67+ if value > 0 and value < 254 :
6668 # val=bri does not work?
6769 ret = self .node .on (value )
6870 self .parent .parent .logger .info ('pyhue:isy_handler.set_bri: %s node.on(%d) = %s' % (self .name , value , str (ret )));
@@ -185,15 +187,16 @@ def start(self):
185187 cnode = mnode
186188 if len (mnode .controllers ) > 0 :
187189 mnode = self .parent .isy .nodes [mnode .controllers [0 ]]
188- self .pdevices .append (pyhue_isy_node_handler (self ,spoken ,mnode ,cnode ))
189-
190+ self .insert_device (pyhue_isy_node_handler (self ,spoken ,mnode ,cnode ))
191+
192+
190193 for var in self .parent .isy .variables .children :
191194 # var is a tuple of type, name, number
192195 # TODO: Use ([^\/]+) instead of (.*) ?
193196 match_obj = re .match ( r'.*\.Spoken\.(.*)' , var [1 ], re .I )
194197 if match_obj :
195198 var_obj = self .parent .isy .variables [var [0 ]][var [2 ]]
196- self .pdevices . append (pyhue_isy_var_handler (self ,match_obj .group (1 ),var ))
199+ self .insert_device (pyhue_isy_var_handler (self ,match_obj .group (1 ),var ))
197200 #errors += 1
198201 if errors > 0 :
199202 raise ValueError ("See Log" )
@@ -208,6 +211,12 @@ def start(self):
208211 self .hue_upnp = hue_upnp (hueUpnp_config )
209212 self .parent .sched .add_job (partial (self .hue_upnp .run ,0 ), misfire_grace_time = 360 , id = self .name )
210213
214+ def insert_device (self ,device ):
215+ # TODO: See if we have an id with this name and use it
216+ # TODO: This is so ID's never change.
217+ device .bid = len (self .pdevices )
218+ self .pdevices .insert (device .bid ,device )
219+
211220 def add_device (self ,config ):
212221 self .parent .logger .info (self .lpfx + ' ' + str (config ))
213222 if not 'name' in config :
@@ -226,21 +235,21 @@ def add_device(self,config):
226235 if node is None :
227236 raise ValueError ("Unknown device name or address '" + dname + "'" )
228237 else :
229- self .pdevices . append ([ config ['name' ], device_isy_onoff (self ,node )])
238+ self .insert_device ([ config ['name' ], device_isy_onoff (self ,node )])
230239 elif config ['type' ] == 'Maker' :
231240 #if self.config in 'ifttt':
232241 # if not self.config['ifttt'] in 'maker_secret_key':
233242 # raise ValueError("Missing maker_secret_key in ifttt from config file")
234243 #else:
235244 # raise ValueError("Missing ifttt with maker_secret_key in config file")
236245
237- self .pdevices . append ([ config ['name' ], device_maker_onoff (self ,config ['on_event' ],config ['off_event' ])])
246+ self .insert_device ([ config ['name' ], device_maker_onoff (self ,config ['on_event' ],config ['off_event' ])])
238247
239248 else :
240249 raise ValueError ("Unknown PyHue device type " + config ['type' ])
241250
242251 def rest_get (self ,webapp ,request ,path ):
243- command = path .split ("/" )
252+ command = path .split ("/" )
244253 self .parent .logger .debug ("%s rest_get: command=%s" % (self .lpfx ,str (command )))
245254 if command [0 ] == "listen" :
246255 if command [1 ] == "stop" :
@@ -257,6 +266,16 @@ def get_index(self):
257266 msg += "<li>Listening: %s\n " % (self .listening )
258267 msg += "<li><a href='%s/listen/start'>Start Listening</a>\n " % (self .name )
259268 msg += "<li><a href='%s/listen/stop'>Stop Listening</a>\n " % (self .name )
269+ msg += "<li>ISY Spoken Devices"
270+ msg += "\n <ul><table border=1><tr><th>HueId<th>Spoken<th>Node<th>Scene<th>On<th>Off<th>50%</tr>"
271+ for device in self .pdevices :
272+ msg += "<tr><td>{0}<td>{1}<td>{2}<td>{3}<tr>" .format (device .bid ,device .name ,device .node ,device .scene )
273+ #msg += "<td><A HREF='{0}'>on</a><td><A HREF='{1}'>off</a><td><A HREF='{2}'>50%</a>".format(device.isy_on,device.isy_off,device.isy_bri.format('128'))
274+ #if device.scene is False:
275+ # msg += "<td>{0}<td> ".format(device.scene)
276+ #else:
277+ # msg += "<td>{0}<td>{1}".format(device.scene._id,device.scene.name)
278+ msg += "</table></ul>"
260279 msg += "</ul>\n "
261280 return msg
262281
0 commit comments