def handler(self): while 1: defer = tasks.get() logging.debug('handler: getting defer from task queue') if defer.message.command == "discovery": logging.debug('handler: processing discovery request') nodes = pyzwave.discover() gateway_id = nodes[0] total_nodes = nodes[1] # remaining are the discovered nodes discovered_nodes = nodes[2:] try: discovered_nodes.remove(gateway_id) except ValueError: pass # sometimes gateway_id is not in the list defer.callback(discovered_nodes) elif defer.message.command == "routing": logging.debug('handler: processing routing request') routing = {} nodes = pyzwave.discover() gateway_id = nodes[0] nodes = nodes[2:] try: nodes.remove(gateway_id) except ValueError: pass # sometimes gateway_id is not in the list for node in nodes: routing[node] = pyzwave.routing(node) try: routing[node].remove(gateway_id) except ValueError: pass defer.callback(routing) else: logging.debug('handler: processing send request') retries = 1 destination = defer.message.destination command = defer.message.command payload = defer.message.payload while retries > 0: try: logging.debug("handler: sending message from defer") pyzwave.send(destination, [0x88, command] + payload) if len(defer.allowed_replies) > 0: BrokerAgent.init().append(defer) break except Exception as e: log = "==IOError== retries remaining: " + str(retries) logging.exception(log) retries -= 1 if retries == 0 or len(defer.allowed_replies) == 0: logging.error("handler: returns immediately to handle failues, or defer has no expected replies") defer.callback(None) gevent.sleep(0)
def _discover(self): ret = [] if not self.stop(): logger.error("cannot discover without STOP mode") return ret with self._global_lock: nodes = pyzwave.discover() zwave_controller = nodes[0] total_nodes = nodes[1] # remaining are the discovered nodes ret = nodes[2:] logger.debug("zwave_controller: %s, total_nodes: %s, ret: %s" % (str(zwave_controller), str(total_nodes), str(ret))) try: ret.remove(zwave_controller) except ValueError: pass # sometimes zwave_controller is not in the list return ret
def discovery(self): nodes = pyzwave.discover() gateway_id = nodes[0] total_nodes = nodes[1] # remaining are the discovered nodes return nodes[2:]
def handler(self): while 1: defer = tasks.get() print 'handler: getting defer from task queue' if defer.message.command == "discovery": print 'handler: processing discovery request' nodes = pyzwave.discover() gateway_id = nodes[0] total_nodes = nodes[1] # remaining are the discovered nodes discovered_nodes = nodes[2:] try: discovered_nodes.remove(gateway_id) except ValueError: pass # sometimes gateway_id is not in the list defer.callback(discovered_nodes) elif defer.message.command == "routing": print 'handler: processing routing request' routing = {} nodes = pyzwave.discover() gateway_id = nodes[0] nodes = nodes[2:] try: nodes.remove(gateway_id) except ValueError: pass # sometimes gateway_id is not in the list for node in nodes: routing[node] = pyzwave.routing(node) try: routing[node].remove(gateway_id) except ValueError: pass defer.callback(routing) else: print 'handler: processing send request' retries = 1 destination = defer.message.destination command = defer.message.command payload = defer.message.payload # prevent pyzwave send got preempted and defer is not in queue if len(defer.allowed_replies) > 0: print "handler: appending defer", defer, "to queue" getAgent().append(defer) while retries > 0: try: print "handler: sending message from defer" pyzwave.send(destination, [0x88, command] + payload) break except Exception as e: log = "==IOError== retries remaining: " + str(retries) print log retries -= 1 if retries == 0 or len(defer.allowed_replies) == 0: print "handler: returns immediately to handle failues, or defer has no expected replies" defer.callback(None) gevent.sleep(0)
def handler(self): while 1: defer = tasks.get() #print 'handler: getting defer from task queue' if defer.message.command == "discovery": #print 'handler: processing discovery request' nodes = pyzwave.discover() gateway_id = nodes[0] total_nodes = nodes[1] # remaining are the discovered nodes discovered_nodes = nodes[2:] try: discovered_nodes.remove(gateway_id) except ValueError: pass # sometimes gateway_id is not in the list defer.callback(discovered_nodes) elif defer.message.command == "routing": #print 'handler: processing routing request' routing = {} nodes = pyzwave.discover() gateway_id = nodes[0] nodes = nodes[2:] try: nodes.remove(gateway_id) except ValueError: pass # sometimes gateway_id is not in the list for node in nodes: routing[node] = pyzwave.routing(node) try: routing[node].remove(gateway_id) except ValueError: pass defer.callback(routing) elif defer.message.command == "device_type": #print 'handler: processing routing request' device_type = pyzwave.getDeviceType(defer.message.destination) defer.callback(device_type) else: #print 'handler: processing send request' retries = 1 destination = defer.message.destination command = defer.message.command payload = defer.message.payload # prevent pyzwave send got preempted and defer is not in queue if len(defer.allowed_replies) > 0: print "[transport] handler: appending defer", defer, "to queue" getAgent().append(defer) while retries > 0: try: #print "handler: sending message from defer" pyzwave.send(destination, [0x88, command] + payload) break except Exception as e: log = "==IOError== retries remaining: " + str(retries) print '[transport] ' + log retries -= 1 if retries == 0 or len(defer.allowed_replies) == 0: print "[transport] handler: returns immediately to handle failues, or defer has no expected replies" defer.callback(None) gevent.sleep(0)
gevent.sleep(1) # print "sending packet" # while True: # pyzwave.send(5, [0x88]+[0, 19, 5, 2, 32, 2, 1, 0x1e]) # gevent.sleep(3) # for i in [1,2,3,4,5]: # print "got device type %s from device radio address %X" % (str(pyzwave.getDeviceType(i)), i) if sys.argv[2] == "reset": print "-" * 10 + "pyzwave.hardReset" print str(pyzwave.hardReset()) elif sys.argv[2] == "discover": print "-" * 10 + "pyzwave.discover" print str(pyzwave.discover()) elif sys.argv[2] == "getaddr": print "-" * 10 + "pyzwave.getAddr" print str(pyzwave.getAddr()) elif sys.argv[2] == "basicset": print "-" * 10 + "pyzwave.basicSet" i = int(sys.argv[3]) v = int(sys.argv[4]) print str(pyzwave.basicSet(i, v)) elif sys.argv[2] == "isnodefail": print "-" * 10 + "pyzwave.isNodeFail" i = int(sys.argv[3]) print str(pyzwave.isNodeFail(i))