Ejemplo n.º 1
0
def action_handler(message):
    manuf = ''
    if manuf in message['command']:
        manuf = message['command']['manuf']
    name = message['command']['name']
    if 'localname' in globals.KNOWN_DEVICES[message['device']['id']]:
        message['device']['localname'] = globals.KNOWN_DEVICES[
            message['device']['id']]['localname']
    result = {}
    if message['cmd'] == 'helper' or message['cmd'] == 'helperrandom':
        type = 'public'
        if message['cmd'] == 'helperrandom':
            type = 'random'
        try:
            globals.PENDING_ACTION = True
            mac = message['device']['id']
            if mac in globals.KEEPED_CONNECTION:
                logging.debug('ACTION------Already a connection for ' + mac +
                              ' use it')
                conn = globals.KEEPED_CONNECTION[mac]
            else:
                logging.debug('ACTION------Creating a new connection for ' +
                              mac)
                conn = Connector(mac)
                globals.KEEPED_CONNECTION[mac] = conn
                conn.connect(type=type)
            if not conn.isconnected:
                conn.connect(type=type)
                if not conn.isconnected:
                    globals.PENDING_ACTION = False
                    return
            try:
                conn.helper()
            except Exception, e:
                logging.debug("ACTION------Helper failed : %s" % str(e))
                globals.PENDING_ACTION = False
            conn.disconnect()
            globals.PENDING_ACTION = False
            return
        except Exception, e:
            logging.debug("ACTION------Helper failed : %s" % str(e))
            globals.PENDING_ACTION = False
Ejemplo n.º 2
0
def action_handler(message):
    manuf = ''
    if manuf in message['command']:
        manuf = message['command']['manuf']
    name = message['command']['name']
    if 'localname' in globals.KNOWN_DEVICES[message['device']['id']]:
        message['device']['localname'] = globals.KNOWN_DEVICES[
            message['device']['id']]['localname']
    result = {}
    if message['cmd'] == 'helper' or message['cmd'] == 'helperrandom':
        type = 'public'
        if message['cmd'] == 'helperrandom':
            type = 'random'
        try:
            mac = message['device']['id']
            if mac in globals.KEEPED_CONNECTION:
                logging.debug('ACTION------Already a connection for ' + mac +
                              ' use it')
                conn = globals.KEEPED_CONNECTION[mac]
            else:
                logging.debug('ACTION------Creating a new connection for ' +
                              mac)
                conn = Connector(mac)
                globals.KEEPED_CONNECTION[mac] = conn
                conn.connect(type=type)
            if not conn.isconnected:
                conn.connect(type=type)
                if not conn.isconnected:
                    return
            try:
                conn.helper()
            except Exception as e:
                logging.debug("ACTION------Helper failed : %s" % str(e))
            conn.disconnect()
            return
        except Exception as e:
            logging.debug("ACTION------Helper failed : %s" % str(e))
    elif message['cmd'] == 'refresh':
        for compatible in globals.COMPATIBILITY:
            classname = message['command']['device']['name']
            if compatible().name.lower() == classname.lower():
                logging.debug('ACTION------Attempt to refresh values')
                try:
                    result = compatible().read(message['device']['id'])
                except Exception as e:
                    logging.debug("ACTION------Refresh failed : %s" % str(e))
                break
        if result and len(result) >= 2:
            if message['device'][
                    'id'] in globals.LAST_STATE and result == globals.LAST_STATE[
                        message['device']['id']]:
                return
            else:
                globals.LAST_STATE[message['device']['id']] = result
                result['source'] = globals.daemonname
                globals.JEEDOM_COM.add_changes(
                    'devices::' + message['device']['id'], result)
                return
    else:
        for device in globals.COMPATIBILITY:
            if device().isvalid(name, manuf):
                try:
                    result = device().action(message)
                except Exception as e:
                    logging.debug("ACTION------Action failed :" + str(e))
                if result:
                    if message['device'][
                            'id'] in globals.LAST_STATE and result == globals.LAST_STATE[
                                message['device']['id']]:
                        return
                    else:
                        globals.LAST_STATE[message['device']['id']] = result
                        result['source'] = globals.daemonname
                        globals.JEEDOM_COM.add_changes(
                            'devices::' + message['device']['id'], result)
                        return
                return
    return