Пример #1
0
        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)
Пример #2
0
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)
Пример #3
0
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)