self.network.stop() logger.info('Stopped network') self.network.destroy() logger.info('Destroyed network') self.isac_node.shutdown() logger.info('Stopped ISAC node') def sigterm_handler(alidron_ozw): logger.info('Received SIGTERM signal, exiting') alidron_ozw.shutdown() logger.info('Exiting') sys.exit(0) if __name__ == '__main__': DEVICE = sys.argv[1] isac_node = IsacNode('alidron-openzwave-controller') alidron_ozw = AlidronOZW(DEVICE, isac_node) green.signal(signal.SIGTERM, partial(sigterm_handler, alidron_ozw)) try: isac_node.serve_forever() except KeyboardInterrupt: alidron_ozw.shutdown() green.sleep(1)
pub = ctx.socket(zmq.PUB) pub.setsockopt(zmq.IPV6, 1) pub.connect('tcp://aaaa::600:fbff:a2df:5d20:8888') time.sleep(1) sub = ctx.socket(zmq.SUB) sub.setsockopt(zmq.IPV6, 1) sub.setsockopt(zmq.SUBSCRIBE, '') sub.connect('tcp://aaaa::600:fbff:a2df:5d20:9999') def read_sub(): while True: data = sub.recv().split('\0') print '< ', data if data[0] not in values: make_value(data[0]) if len(data) > 1: values[data[0]].value = data[1:] else: values[data[0]].value = 1 green.spawn(read_sub) try: n.serve_forever() except KeyboardInterrupt: n.shutdown() green.sleep(1)
class AlidronHue(object): def __init__(self, bridges): self.isac_node = IsacNode('alidron-hue') green.signal(signal.SIGTERM, partial(self._sigterm_handler)) green.signal(signal.SIGINT, partial(self._sigterm_handler)) self.bridges = bridges self.signals = {} self.sync_signals() def sync_signals(self): for bridge in self.bridges.values(): for light in bridge.get_light().values(): light_obj = bridge[str(light['name'])] for prop in light['state']: if prop == 'bri': prop = 'brightness' elif prop == 'sat': prop = 'saturation' uri = self.make_uri(light_obj, prop) if uri not in self.signals: self.make_value(uri, light_obj, prop) def make_uri(self, light_obj, prop): return 'hue://%s/%s' % (light_obj.name, str(prop)) def make_value(self, uri, light_obj, prop): iv = IsacValue( self.isac_node, uri, initial_value=getattr(light_obj, prop), survey_last_value=False, survey_static_tags=False ) iv.observers += self.value_update self.signals[uri] = { 'isac_value': iv, 'light_object': light_obj, 'property': prop, } print '>>> Registered', uri def value_update(self, iv, value, timestamp, tags): print 'Receveid update for', iv.uri, ':', value, tags if 'transitiontime' in tags: old_trt = self.signals[iv.uri]['light_object'].transitiontime self.signals[iv.uri]['light_object'].transitiontime = tags['transitiontime'] setattr( self.signals[iv.uri]['light_object'], self.signals[iv.uri]['property'], value ) if 'transitiontime' in tags: self.signals[iv.uri]['light_object'].transitiontime = old_trt def serve_forever(self): try: self.isac_node.serve_forever() except (KeyboardInterrupt, SystemExit): logger.info('Stopping') return def stop(self): self.isac_node.shutdown() green.sleep(2) def _sigterm_handler(self): logger.info('Received SIGTERM signal, exiting') self.stop() logger.info('Exiting') sys.exit(0)