Пример #1
0
    def __init__(self, config, state, eventcallback):
        self.nodes = config['nodes']
        self.byname = dict()
        self.config = config
        self.receiver = eventcallback

        zopts = {'user_path': '.', 'cmd_line': '--logging false'}
        if self.config.has_key('config_path'):
            zopts['config_path'] = self.config['config_path']

        options = PyOptions(**zopts)
        options.lock()
        self.manager = PyManager()
        self.manager.create()
        logger.debug('Startup: Add watcher')
        self.manager.addWatcher(self.callback)
        logger.debug('Startup: Add device')
        self.manager.addDriver(self.config['device'])
        logger.info('Startup Complete')
        # subscribe to shutdown event
        eventcallback(event('shutdown', '', 'subscribe', 'shutdown'))
        eventcallback(event('openzwave', '', 'subscribe', 'ALL'))
        eventcallback(
            event(
                **{
                    'id': 'command-add',
                    'type': 'command',
                    'data': {
                        'operation': 'add',
                        'command': COMMANDS
                    }
                }))
Пример #2
0
 def __init__(self, config, state, eventcallback):
     # create xmpp client
     self.client = xmpp.Client(config['domain'])
     # id, event = '', type = 'message', agent = '', user = ''
     # subscribe to shutdown event
     eventcallback(event('shutdown', '', 'subscribe', 'shutdown'))
     # subscribe to xmpp_message events
     eventcallback(event('xmpp_message', '', 'subscribe', 'ALL'))
     # turn on timestamps in the log
     self.client._DEBUG.time_stamp = 1
     # open logfile
     if config.has_key('logfile') and len(config['logfile']):
         try:
             self.client._DEBUG._fh = open(config['logfile'], 'w')
         except:
             logger.critical('Cannot open {} for writing'.format(
                 config['logfile']))
             sys.exit(0)
     # ...connect it to SSL port directly
     port = 5222
     if config.has_key('port'): port = config['port']
     if not self.client.connect(server=(config['server'], port)):
         raise IOError('Can not connect to server.')
     # ...authorize client
     if not self.client.auth(config['user'], config['password'],
                             config['server']):
         raise IOError('Can not auth with server.')
     self.client.sendInitPresence()
     # ...work some time
     self.client.Process(1)
     # register xmpp messsage handler
     self.daemonize = False
     self.receiver = eventcallback
     self.client.RegisterHandler('message', self.receive)
     self.daemonizeit()
Пример #3
0
    def __init__(self, host, tcp_port, udp_port):
        self.types = {'tcp': self.enable_tcp, 'udp': self.enable_udp}
        self.type_accept = {'tcp': self.accept_tcp, 'udp': self.accept_udp}
        self.type_send = {'tcp': self.send_tcp, 'udp': self.send_udp}

        self.buffer = ""
        #events

        self.started = event()
        self.received_tcp = event()
        self.received_udp = event()
        self.stop = event()
        self.new_udp_client = event()
        self.new_tcp_client = event()
        self.error = event()
        self.socket_closed = event()

        self.ip = socket.gethostbyname(socket.gethostname())
        self.tcp_port = tcp_port
        self.udp_port = udp_port
        self.host = host
        self.type = type
        self.tcp = self.setup_socket('tcp')
        self.udp = self.setup_socket('udp')
        self.inputs = [self.udp, self.tcp]
        self.outputs = []
        self.connections = []
        self.running = False
Пример #4
0
	def __init__(self, host, tcp_port, udp_port):
		self.types = {'tcp':self.enable_tcp, 'udp':self.enable_udp}
		self.type_accept = {'tcp':self.accept_tcp, 'udp':self.accept_udp}
		self.type_send = {'tcp':self.send_tcp, 'udp':self.send_udp}
		
		self.buffer = ""
		#events
		
		self.started = event()
		self.received_tcp = event()
		self.received_udp = event()
		self.stop = event()
		self.new_udp_client = event()
		self.new_tcp_client = event()
		self.error = event()
		self.socket_closed = event()
		
		self.ip = socket.gethostbyname(socket.gethostname())
		self.tcp_port = tcp_port
		self.udp_port = udp_port
		self.host = host
		self.type = type
		self.tcp = self.setup_socket('tcp')
		self.udp = self.setup_socket('udp')
		self.inputs = [self.udp, self.tcp]
		self.outputs = []
		self.connections = []
		self.running = False
Пример #5
0
 def event(self, cmdevent):
     data = cmdevent.eventdata()
     body = cmdevent.eventbody()
     if 'operation' in data:
         if data['operation'] == 'add':
             self.add(data['command'])
         elif data['operation'] == 'remove':
             self.add(data['command'])
         elif data['operation'] == 'list':
             clist = self.list()
             if 'returnevent' in data:
                 data['returnevent'].data['return'] = clist
                 self.eventhcallback(data['returnevent'])
     elif len(body) > 0:
         ret = self.handle(cmdevent.eventuser(), body)
         # send response
         if 'returnid' in data:
             re = event(
                 **{
                     'id': data['returnid'],
                     'event': ret,
                     'user': cmdevent.eventuser()
                 })
             self.eventcallback(re)
     else:
         logger.critical("Cannot process event: {}".format(cmdevent.dump()))
Пример #6
0
 def shutdown(self):
     logging.info("Shutdown started - Queue size: %i",
                  self.eventqueue.qsize())
     #res = self.storage.store()
     self.scheduler.removeall()
     # send shutdown event to all agents
     self.eventqueue.put(event('shutdown'))
     self.eventqueue.join()
     logging.info("Shutdown complete")
Пример #7
0
def on_motion():
    # Creating a new event automatically logs it
    e = event()
    logger.info("on_motion")
    c.click(cfg.camera.photo_count, cfg.camera.photo_delay_sec, f'Event:{e.id}')

    init_sleep = e.get_seconds_until_stop()
    sleep(init_sleep if init_sleep > 0 else 1)

    return e
Пример #8
0
    def run(self, cmdinfo, args, user):
        logger.debug("Got command args: {}".format(args))
        #logger.debug("globals: {}".format(globals()))
        #logger.debug("locals: {}".format(locals()))
        #reply = globals()['self.'+ commandInfo['handler']](args)
        reply = str()
        # execute a callable object
        if 'handler' in cmdinfo:
            logger.debug("Found command handler: {}".format(
                cmdinfo['handler']))
            logger.debug("Command function type: {}".format(
                type(cmdinfo['handler'])))
            logger.debug("Command function callable? {}".format(
                callable(cmdinfo['handler'])))
            if callable(cmdinfo['handler']):
                reply = cmdinfo['handler'](args)
            else:
                logger.critical(
                    "Command defined is not callable, skipping: {}".format(
                        cmdinfo['handler']))
                reply = 'An error occurred'
        # create an event
        elif 'handlerevent' in cmdinfo:
            handevent = dict(cmdinfo['handlerevent'])
            logger.debug("Found command handler event: {}".format(handevent))
            if not 'data' in handevent: handevent['data'] = dict()
            handevent['data']['args'] = args
            handevent['user'] = user
            he = event(**handevent)
            self.eventcallback(he)
        # run a function by name
        else:
            logger.debug("Found command handler name: {}".format(
                cmdinfo['handlername']))
            func = getattr(self, cmdinfo['handlername'], None)
            logger.debug("Command function type: {}".format(type(func)))
            if func is None: return "Could not locate function"

            logger.debug("Got function: {}".format(func))
            reply = func(args)

        #reply = eval(('self.'+ commandInfo['handler'])(args))
        #reply = globals()[commandInfo['handler']](args)
        logger.debug("Got reply:\n{}".format(reply))
        if reply is None:
            return ('no response')
        else:
            return (reply)
Пример #9
0
 def receive(self, con, xmppevent):
     type = xmppevent.getType()
     from_id = xmppevent.getFrom().getStripped()
     if type in ['message', 'chat', None]:
         if xmppevent.getBody():
             #print from_id+':', event.getBody()
             ce = event(
                 **{
                     'id': 'command-{}'.format(from_id),
                     'event': xmppevent.getBody(),
                     'type': 'command',
                     'user': from_id,
                     'data': {
                         'returnid': 'xmpp_message'
                     }
                 })
             #self.receiver(event(from_id, event.getBody()))
             self.receiver(ce)
Пример #10
0
        self.add(id, when, event)

# MAIN #
if __name__ == '__main__':
    logging.basicConfig(format='%(asctime)s %(levelname)s %(name)s: %(message)s',
	                datefmt='%Y/%m/%d-%H:%M:%S', level=logging.DEBUG)

    def dummycallback(event):
            logger.debug('Callback received event: %s', event.eventbody())

    s = schedule(dummycallback, {})
    logger.debug('Scheduling events')

    # An example of scheduling Zwave events
    s.add('Nightly zwave healNetwork', {'hourlist': [3], 'recurring': True},
	                      event('openzwave', 'healNetwork', 'message'))

    s.add('Porchlight One-Time 20:28 OFF Schedule', {'hourlist': [20], 'minutelist': [28]},
	                      event('openzwave', 'setValue', 'message', '', '', { 'node': 'RGB Light - Porch', 'name': 'Level', 'value': 0 }))

    s.add('Porchlight Spring ON Schedule', {'monthnames': ['march', 'april', 'may'], 'hourlist': [20], 'minutelist': [30], 'recurring': True},
	                      event('openzwave', 'setValue', 'message', '', '', { 'node': 'RGB Light - Porch', 'name': 'Level', 'value': 50 }))
    s.add('Porchlight Spring OFF Schedule', {'monthnames': ['march', 'april', 'may'], 'hourlist': [6], 'recurring': True},
	                      event('openzwave', 'setValue', 'message', '', '', { 'node': 'RGB Light - Porch', 'name': 'Level', 'value': 0 }))
    s.add('Porchlight Summer ON Schedule', {'monthnames': ['june', 'july', 'august'], 'hourlist': [21], 'recurring': True},
	                      event('openzwave', 'setValue', 'message', '', '', { 'node': 'RGB Light - Porch', 'name': 'Level', 'value': 50 }))
    s.add('Porchlight Summer OFF Schedule', {'monthnames': ['march', 'april', 'may'], 'hourlist': [5], 'recurring': True},
	                      event('openzwave', 'setValue', 'message', '', '', { 'node': 'RGB Light - Porch', 'name': 'Level', 'value': 0 }))

    s.add('Livingroom Dimmer OFF Schedule', {'hourlist': [22], 'recurring': True},
	                      event('openzwave', 'setValue', 'message', '', '', { 'node': 'Dimmer - Livingroom', 'name': 'Level', 'value': 0 }))
Пример #11
0
    def callback(self, args):
        msg = ''
        if not args:
            logger.warning('Callback args are undefined')
            return

        nodeid = args['nodeId']
        try:  #if self.nodes.has_key(nodeid):
            nodename = self.nodes[nodeid]['name']
            self.nodes[nodeid]['lastseen'] = time()
        except KeyError:
            nodename = 'Node ' + str(nodeid)
            self.nodes[nodeid] = {'name': nodename, 'lastseen': time()}
        try:
            self.nodes[nodeid]['values']
        except KeyError:
            self.nodes[nodeid]['values'] = dict()
        try:
            self.nodes[nodeid]['bylabel']
        except KeyError:
            self.nodes[nodeid]['bylabel'] = dict()

        if nodename not in self.byname:
            self.byname[nodename] = self.nodes[nodeid]

        msg = nodename + ': ' + str(args['notificationType'])
        if 'valueId' in args:
            v = args['valueId']
            #print('valueID: {}'.format(v['id']))
            if not self.nodes[nodeid]['values'].has_key(v['id']):
                self.nodes[nodeid]['values'][v['id']] = {'id': v['id']}
            if v.has_key('label'):
                self.nodes[nodeid]['values'][v['id']]['label'] = v['label']
                msg += ' ' + v['label'] + ' ='
                if not self.nodes[nodeid]['bylabel'].has_key(v['label']):
                    self.nodes[nodeid]['bylabel'][
                        v['label']] = self.nodes[nodeid]['values'][v['id']]
            if v.has_key('value'):
                self.nodes[nodeid]['values'][v['id']]['value'] = v['value']
                if self.config['convertctof'] == True and v['units'].lower(
                ) == 'c':
                    v['value'] = self.convertCtoF(v['value'])
                    self.nodes[nodeid]['values'][v['id']]['value'] = v['value']
                    v['units'] = 'F'
                msg += ' ' + str(v['value'])
            else:
                self.nodes[nodeid]['values'][v['id']]['value'] = ''
            try:
                self.nodes[nodeid]['values'][v['id']]['units'] = v['units']
                msg += ' ' + str(v['units'])
            except KeyError:
                self.nodes[nodeid]['values'][v['id']]['units'] = ''
            if v.get('readOnly'):
                self.nodes[nodeid]['values'][v['id']]['readonly'] = True
                msg += ' (ReadOnly)'
            else:
                self.nodes[nodeid]['values'][v['id']]['readonly'] = False
            self.nodes[nodeid]['values'][v['id']]['updated'] = time()

        if args['notificationType'] == 'Notification':
            msg += ' notificationCode = ' + str(args['notificationCode'])
        if args['notificationType'] == 'NodeEvent':
            msg += ' event = ' + str(args['event'])
        if args['notificationType'] == 'Group':
            msg += ' groupIdx = ' + str(args['groupIdx'])

        # {'homeId': 25480663, 'notificationType': 'DriverReady', 'nodeId': 1}
        if args['notificationType'] == 'DriverReady' and args['nodeId'] == 1:
            self.homeid = args['homeId']
            logger.debug("DriverReady - homeId: %i", args['homeId'])
        self.receiver(event('openzwave', msg))
Пример #12
0
if __name__ == "__main__":
    from sys import argv
    from logging import basicConfig
    from logging import DEBUG as logging_DEBUG
    basicConfig(format='%(asctime)s %(levelname)s %(name)s: %(message)s',
                datefmt='%Y/%m/%d-%H:%M:%S',
                level=logging_DEBUG)
    argv.pop(0)  # remove program name from arg list

    def dummycallback(event):
        logger.debug("Dummycallback got event: {}".format(event.dump()))

    c = command(dummycallback)

    # direct
    logger.debug('Command list: {}'.format(c.list()))
    response = c.handle('*****@*****.**', ' '.join(argv))
    logger.debug('Got command response: {}'.format(response))
    # using event
    e1 = event(
        **{
            'id': 'eventid1',
            'event': 'help',
            'type': 'command',
            'user': '******',
            'data': {
                'returnid': 'someid'
            }
        })
    c.event(e1)
Пример #13
0
        Given any number of dicts, shallow copy and merge into a new dict,
        precedence goes to key value pairs in latter dicts.
    """

    def merge_dicts(firstdict, *dict_args):
        for dictionary in dict_args:
            firstdict.update(dictionary)


# MAIN #
if __name__ == '__main__':
    mcc = mcp()

    # Most code here needs to be moved to core-logic or user-logic files
    # id, event = '', type = 'message', agent = '', user = '', data = dict()
    tm = event('xmpp_message', 'starting up', 'message', 'xmpp_message',
               'USER@DOMAIN')
    mcc.queueevent(tm)

    mcc.scheduler.add('Nightly zwave healNetwork', {
        'hourlist': [3],
        'recurring': True
    }, event('openzwave', 'healNetwork', 'message'))

    mcc.scheduler.add(
        'Porchlight Spring ON Schedule', {
            'monthnames': ['march', 'april', 'may'],
            'hourlist': [20],
            'minutelist': [30],
            'recurring': True
        },
        event('openzwave', 'setValue', 'message', '', '', {