Esempio n. 1
0
def _get_historical_data(sensor, start_time, end_time):
    try:
        get_data = util.get_class("DB.api.{}.get_data_by_time".format(sensor))
        dic = get_data(start_time, end_time)
        # print dic
        return [] if len(dic) == 0 else dic
    except ImportError:
        abort(400)
Esempio n. 2
0
def _get_historical_data(sensor, start_time, end_time):
    try:
        get_data = util.get_class("DB.api.{}.get_data_by_time".format(sensor))
        dic = get_data(start_time, end_time)
        # print dic
        return [] if len(dic) == 0 else dic
    except ImportError:
        abort(400)
Esempio n. 3
0
def _get_historical_data(sensor, start_time, end_time, res_list=[]):
    try:
        if not res_list:
            return []
        get_data = util.get_class("DB.api.{}.get_data_by_time".format(sensor))
        dic = get_data(start_time, end_time, res_list)
        # print dic
        return [] if not dic else dic
    except ImportError:
        abort(400)
Esempio n. 4
0
def _get_historical_data(sensor, start_time, end_time, res_list=[]):
    try:
        if not res_list:
            return []
        get_data = util.get_class("DB.api.{}.get_data_by_time".format(sensor))
        dic = get_data(start_time, end_time, res_list)
        # print dic
        return [] if not dic else dic
    except ImportError:
        abort(400)
Esempio n. 5
0
def _get_sensor_data(token_dict):
    res = resource.list_resource(status=1, gateway_id=session['gateway_id'])
    ret = {'alert': {}, 'status': {}, 'data': {}}
    for sensor in res:
        typ = sensor.get('sensor_type').get('type')
        if typ in ALERT_GRP:
            latest_data = util.get_class(
                "DB.api.{}.get_latest_alert_by_gateway_uuid".format(typ))(
                    gateway_id=session['gateway_id'],
                    uuid=sensor.get('uuid'),
                    token=token_dict[typ + '-token'])
        elif typ == 'power':
            latest_data = util.get_class(
                "DB.api.energy.get_latest_by_gateway_uuid")(
                    gateway_id=session['gateway_id'], uuid=sensor.get('uuid'))
        else:
            latest_data = util.get_class(
                "DB.api.{}.get_latest_by_gateway_uuid".format(typ))(
                    gateway_id=session['gateway_id'], uuid=sensor.get('uuid'))
        if latest_data is None:
            continue
        if typ in ALERT_GRP:
            ret['alert'].update({typ: latest_data.get('created_at')})
        elif typ in STATUS_GRP:
            if typ == "rgbled":
                val = True if latest_data.get(
                    'rgbvalue') == "255,0,0" else False
                ret['status'].update({typ: val})
            else:
                ret['status'].update({typ: latest_data.get('status')})
        elif typ in DATA_GRP:
            data = None
            if typ == 'temperature':
                data = str(latest_data.get('temperature'))
            elif typ == 'solar':
                data = str(latest_data.get('tiltpercentage'))
            elif typ == 'illuminance':
                data = str(latest_data.get('illuminance'))
            elif typ == 'power':
                data = str(latest_data.get('value'))
            ret['data'].update({typ: data})
    return ret
Esempio n. 6
0
def _get_sensor_data(token_dict):
    res = resource.list_resource(status=1, gateway_id=session['gateway_id'])
    ret = {
        'alert': {},
        'status': {},
        'data': {}
    }
    for sensor in res:
        typ = sensor.get('sensor_type').get('type')
        if typ in ALERT_GRP:
            latest_data = util.get_class("DB.api.{}.get_latest_alert_by_gateway_uuid".format(typ))(gateway_id=session['gateway_id'],
                                                                                                   uuid=sensor.get('uuid'),
                                                                                                   token=token_dict[typ+'-token'])
        elif typ == 'power':
            latest_data = util.get_class("DB.api.energy.get_latest_by_gateway_uuid")(gateway_id=session['gateway_id'],
                                                                                     uuid=sensor.get('uuid'))
        else:
            latest_data = util.get_class("DB.api.{}.get_latest_by_gateway_uuid".format(typ))(gateway_id=session['gateway_id'],
                                                                                             uuid=sensor.get('uuid'))
        if latest_data is None:
            continue
        if typ in ALERT_GRP:
            ret['alert'].update({typ: latest_data.get('created_at')})
        elif typ in STATUS_GRP:
            if typ == "rgbled":
                val = True if latest_data.get('rgbvalue') == "255,0,0" else False
                ret['status'].update({typ: val})
            else:
                ret['status'].update({typ: latest_data.get('status')})
        elif typ in DATA_GRP:
            data = None
            if typ == 'temperature':
                data = str(latest_data.get('temperature'))
            elif typ == 'solar':
                data = str(latest_data.get('tiltpercentage'))
            elif typ == 'illuminance':
                data = str(latest_data.get('illuminance'))
            elif typ == 'power':
                data = str(latest_data.get('value'))
            ret['data'].update({typ: data})
    return ret
Esempio n. 7
0
    def __init__(self, args):
        tf.logging.set_verbosity(tf.logging.INFO)
        self.layers = None
        self.ave_vars = None

        if args is not None:
            self.batch_size = args.batch_size
            self.checkpoint_dir = args.ckpt_dir
            self.save_inter = args.save_inter
            self.test_inter = args.test_inter
            self.disp_inter = args.disp_inter
            self.show_detail = args.show_detail
            self.lr_type = args.lr_type
            if self.lr_type == 'naive':
                self.pre_loss = []
                self.cur_loss = []
                self.curr_lr_num = 0
                self.average_loss = 0.0
            if self.lr_type == 'sgdr':
                self.start_T = 0  # 每个周期的起点
                self.curr_T = train_config.T0  # 每个周期的终点

            if args.train_list_path is not None:
                self.train_list_path = args.train_list_path.split(',')
            else:
                self.train_list_path = None
            if args.test_list_path is not None:
                self.test_list_path = args.test_list_path.split(',')
            else:
                self.test_list_path = None

            self.need_padded_batch = args.need_padded_batch
            self.opt_type = args.opt_type
            self.show_detail_summary = args.show_detail_summary
            self.total_epochs = int(args.total_epochs)
            if self.total_epochs == 0:
                self.total_epochs = 1000000

            self.class_type = args.class_type
            try:
                self.char_to_label, self.label_to_char, self.class_num = util.get_class(
                    self.class_type)
            except KeyError as e:
                tf.logging.info(
                    'class_type %s not found! you should register it in util/util.py-class_file_dict'
                    % self.class_type)
                raise e

            self.infer_model_path = args.infer_model_path
            self.gpu_id = args.gpu_id.split(',')
            self.model_type = args.model_type
            self.model = name_map_models.name2models_dict[args.model_type]
            self.print_config(args)
Esempio n. 8
0
def freeze_crnn_graph(args):
    with tf.Session() as sess:
        if args.input_graph is not None:
            # 不建议使用这个方法,因为ckpt保存下来图模型,所有带有is_training选项的都是True
            saver = tf.train.import_meta_graph(args.input_graph,
                                               clear_devices=True)
        else:
            model = model_dict[args.model_type]
            model.print_config()
            char_to_label, label_to_char_maps, class_num = util.get_class(
                args.seq_type)
            model.build_model(class_num, for_training=False)
            # var_list = util.get_trainable_vars(None)
            # saver = tf.train.Saver(var_list=var_list)
            variable_averages = tf.train.ExponentialMovingAverage(0.999)
            variables_to_restore = variable_averages.variables_to_restore()
            saver = tf.train.Saver(variables_to_restore)

        saver.restore(sess, args.input_checkpoint)
        graph = tf.get_default_graph()
        graph_def = graph.as_graph_def()
        compressed_graph_def = remove_training_nodes(graph_def)
        const_graph_def = graph_util.convert_variables_to_constants(
            sess, compressed_graph_def, ['ctc/prediction'])

        output_graph_def = graph_pb2.GraphDef()
        for input_node in const_graph_def.node:
            output_node = node_def_pb2.NodeDef()
            if input_node.name == 'input/is_training':
                output_node.op = "Const"
                output_node.name = input_node.name
                dtype = input_node.attr["dtype"]
                data = np.array(False, dtype=np.bool)
                output_node.attr["dtype"].CopyFrom(dtype)
                output_node.attr["value"].CopyFrom(
                    attr_value_pb2.AttrValue(
                        tensor=tensor_util.make_tensor_proto(
                            data, dtype=dtype.type, shape=data.shape)))
            else:
                output_node.CopyFrom(input_node)
            output_node.device = ""
            output_graph_def.node.extend([output_node])
        output_graph_def.library.CopyFrom(const_graph_def.library)

        with gfile.GFile(args.output_graph, "wb") as f:
            f.write(output_graph_def.SerializeToString())
        print "%d ops in the final graph." % len(output_graph_def.node)
Esempio n. 9
0
def _get_sensor_data(token_dict):
    res = resource.list_resource(status=1, gateway_id=session['gateway_id'])
    default_token = util.format_datetime(util.get_utc_now() -
                                         datetime.timedelta(minutes=1))
    ret = {'alert': {}, 'status': {}, 'data': {}, 'brillo': {}, 'generic': {}}
    for sensor in res:
        typ = sensor.get('sensor_type').get('mapping_class')
        href = sensor.get('path')
        resource_id = sensor.get("id")
        if href.startswith("/a/"):
            if typ in ALERT_GRP:
                token = token_dict.get(str(resource_id)) if str(resource_id) in token_dict.keys() \
                                                            and token_dict.get(str(resource_id)) else default_token
                latest_data = util.get_class(
                    "DB.api.{}.get_latest_alert_by_gateway_uuid".format(typ))(
                        resource_id=resource_id, token=token)
                latest_data = latest_data if latest_data else {
                    "resource_id": resource_id
                }
            elif typ == 'power':
                latest_data = util.get_class(
                    "DB.api.energy.get_latest_by_gateway_uuid".format(typ))(
                        resource_id=resource_id)
            else:
                latest_data = util.get_class(
                    "DB.api.{}.get_latest_by_gateway_uuid".format(typ))(
                        resource_id=resource_id)
            if typ == 'buzzer':
                status_data = util.get_class(
                    "DB.api.{}.get_latest_by_gateway_uuid".format(typ))(
                        resource_id=resource_id)
            if latest_data is None:
                continue
            # print latest_data
            if typ in ALERT_GRP:
                _compose_sensor_data(typ, latest_data, 'created_at', 'alert',
                                     ret)

            if typ in STATUS_GRP:
                if typ == "rgbled":
                    val = True if latest_data.get(
                        'rgbvalue') == "[255, 0, 0]" else False
                    _compose_sensor_data(typ, latest_data, {'value': val},
                                         'status', ret)
                elif typ == 'buzzer':
                    _compose_sensor_data(typ, status_data, 'status', 'status',
                                         ret)
                else:
                    _compose_sensor_data(typ, latest_data, 'status', 'status',
                                         ret)
            elif typ in DATA_GRP:
                # extract values from the db query result
                if typ in ['temperature', 'illuminance']:
                    key_words = [typ]
                elif typ == 'solar':
                    key_words = ['tiltpercentage']
                elif typ == 'power':
                    key_words = ['value']
                elif typ == 'environment':
                    key_words = [
                        'temperature', 'humidity', 'pressure', 'uv_index'
                    ]

                for key in key_words:
                    sensor_type = typ if typ != "environment" else key
                    _compose_sensor_data(sensor_type, latest_data, key, 'data',
                                         ret)
            elif typ == "generic":
                _compose_sensor_data(typ, latest_data, 'json_data', 'generic',
                                     ret)
        elif href.startswith("/brillo/"):
            latest_data = util.get_class(
                "DB.api.{}.get_latest_by_gateway_uuid".format(typ))(
                    resource_id=resource_id)
            # print latest_data
            if latest_data is None:
                uuid = sensor.get('uuid')
                if ret['brillo'].get(uuid) is None:
                    ret['brillo'].update(
                        {uuid: {
                            typ: {
                                'resource_id': resource_id
                            }
                        }})
                else:
                    ret['brillo'][uuid].update(
                        {typ: {
                            'resource_id': resource_id
                        }})
                continue
            if typ in BRILLO_GRP:
                if typ in ['brightness']:
                    keys = [typ]
                elif typ == 'rgbled':
                    keys = ['rgbvalue']
                elif typ == 'audio':
                    keys = ['volume', 'mute']
                elif typ == 'mp3player':
                    keys = ['media_states', 'playlist', 'state', 'title']

                _compose_sensor_data(typ, latest_data, keys, 'brillo', ret)
    return ret
Esempio n. 10
0
    def parse_data(data, **kargs):
        """parse the json data and save them in db."""
        if data:
            sensor = kargs.get('sensor')
            uuid = kargs.get('uuid')
            gateway_id = kargs.get('gateway_id')
            resource_id = kargs.get('resource_id')
            if sensor == 'power':
                power_add = get_class("DB.api.power.new")
                energy_add = get_class("DB.api.energy.new")

                new_energy = data.get('power1')
                new_power = data.get('power2')

                if new_power != 0:
                    content = {
                        'resource_id': resource_id,
                        'value': int(new_power),
                    }
                    # power_add(content)
                    print('update power: {}'.format(str(power_add(content))))

                if new_energy != 0:
                    content = {
                        'resource_id': resource_id,
                        'value': int(new_energy),
                    }
                    # energy_add(content)
                    print('update energy: {}'.format(str(energy_add(content))))
            else:
                add_method = get_class("DB.api.{}.new".format(sensor))
                status_method = get_class(
                    "DB.api.{}.get_latest_by_gateway_uuid".format(sensor))

                content = {
                    'resource_id': resource_id,
                }

                if sensor == 'solar':
                    new_tilt = data.get('tiltPercentage')
                    if new_tilt is not None:
                        content.update({
                            'tiltpercentage': new_tilt,
                            'lcd_first': data.get('lcd1'),
                            'lcd_second': data.get('lcd2'),
                        })

                        # add_method(content)
                        print('update tilt percentage: {}'.format(
                            str(add_method(content))))
                    else:
                        print("Unable to get tilt percentage.")
                elif sensor == 'illuminance':
                    new_ill = data.get('illuminance')
                    if new_ill is not None:
                        content.update({
                            'illuminance': new_ill,
                        })
                        # add_method(content)
                        print('update illuminance: {}'.format(
                            str(add_method(content))))
                    else:
                        print("Unable to get Illuminance status.")
                elif sensor == 'temperature':
                    new_temp = data.get('temperature')
                    if new_temp is not None:
                        content.update({
                            'temperature': new_temp,
                            'units': data.get('units'),
                            'range': data.get('range'),
                        })

                        # add_method(content)
                        print('update temperature: {}'.format(
                            str(add_method(content))))
                    else:
                        print("Unable to get Temperature status.")
                elif sensor == 'audio':
                    if data is not None:
                        content.update({
                            'mute': data.get('mute'),
                            'volume': data.get('volume'),
                        })
                        # add_method(content)
                        print('update audio: {}'.format(
                            str(add_method(content))))
                    else:
                        print("Unable to get Audio sensor status .")
                elif sensor == 'brightness':
                    if data is not None:
                        content.update({
                            'brightness': data.get('brightness'),
                        })
                        # add_method(content)
                        print('update brightness: {}'.format(
                            str(add_method(content))))
                    else:
                        print("Unable to get Brightness sensor status .")
                elif sensor == 'mp3player':
                    if data is not None:
                        content.update({
                            'media_states':
                            json.dumps(data.get('mediaStates')),
                            'playlist':
                            json.dumps(data.get('playList')),
                            'state':
                            data.get('state'),
                            'title':
                            data.get('title'),
                        })
                        # add_method(content)
                        print('update mp3player: {}'.format(
                            str(add_method(content))))
                    else:
                        print("Unable to get Mp3player sensor status .")
                elif sensor == 'rgbled':
                    new_rgb = data.get('rgbValue')
                    if new_rgb is not None:
                        content.update({
                            'rgbvalue': str(new_rgb),
                            'range': str(data.get('range')),
                        })
                        # add_method(content)
                        print('update rdbled: {}'.format(
                            str(add_method(content))))
                    else:
                        print("Unable to get Rgbled status .")
                elif sensor == 'environment':
                    if data is not None:
                        content.update({
                            'temperature': data.get('temperature'),
                            'pressure': data.get('pressure'),
                            'humidity': data.get('humidity'),
                            'uv_index': data.get('uvIndex'),
                        })
                        # add_method(content)
                        print('update environment: {}'.format(
                            str(add_method(content))))
                    else:
                        print("Unable to get Environment sensor status .")
                elif sensor == 'generic':
                    if data is not None:
                        content.update({
                            'json_data': json.dumps(data),
                        })
                        # add_method(content)
                        print('update generic {}: {}'.format(
                            data.get('id'), str(add_method(content))))
                    else:
                        print(
                            "Unable to get Generic sensor {} status .".format(
                                data.get('id')))
                else:
                    obj = status_method(resource_id)
                    status = bool(obj.get('status')) if obj else None
                    new_sts = bool(data.get('value'))
                    if status != new_sts:
                        content.update({
                            'status': new_sts,
                        })
                        print('update {} data: {}'.format(
                            sensor, str(add_method(content))))
                        if new_sts and NexmoClient.send_message(
                                gateway_id, uuid, sensor):
                            print(
                                'Sent text alert to users for {} status is True.'
                                .format(sensor))
                    else:
                        print("{} status {} has not been changed.".format(
                            sensor, new_sts))
Esempio n. 11
0
    def parse_data(data, **kargs):
        """parse the json data and save them in db."""
        if data:
            sensor = kargs.get('sensor')
            uuid = kargs.get('uuid')
            gateway_id = kargs.get('gateway_id')
            if sensor == 'power':
                power_add = get_class("DB.api.power.new")
                energy_add = get_class("DB.api.energy.new")

                new_energy = data.get('properties').get('power1')
                new_power = data.get('properties').get('power2')

                if new_power != 0:
                    content = {
                        'uuid': uuid,
                        'gateway_id': gateway_id,
                        'value': new_power,
                    }
                    # power_add(content)
                    print 'update power: {}'.format(str(power_add(content)))

                if new_energy != 0:
                    content = {
                        'uuid': uuid,
                        'gateway_id': gateway_id,
                        'value': new_energy,
                    }
                    # energy_add(content)
                    print 'update energy: {}'.format(str(energy_add(content)))
            else:
                # sensor = data.get('properties').get('id')
                add_method = get_class("DB.api.{}.new".format(sensor))
                status_method = get_class(
                    "DB.api.{}.get_latest_by_gateway_uuid".format(sensor))

                content = {
                    'uuid': uuid,
                    'gateway_id': gateway_id,
                }
                # obj = status_method(gateway_id, uuid)
                if sensor == 'solar':
                    new_tilt = data.get('properties').get('tiltPercentage')
                    if new_tilt:
                        content.update({
                            'tiltpercentage':
                            new_tilt,
                            'lcd_first':
                            data.get('properties').get('lcd1'),
                            'lcd_second':
                            data.get('properties').get('lcd2'),
                        })
                        # add_method(content)
                        print 'update tilt percentage: {}'.format(
                            str(add_method(content)))
                    else:
                        print "Unable to get tilt percentage."
                elif sensor == 'illuminance':
                    new_ill = data.get('properties').get('illuminance')
                    if new_ill:
                        content.update({
                            'illuminance': new_ill,
                        })
                        # add_method(content)
                        print 'update illuminance: {}'.format(
                            str(add_method(content)))
                    else:
                        print "Unable to get Illuminance status."
                elif sensor == 'temperature':
                    new_temp = data.get('properties').get('temperature')
                    if new_temp:
                        content.update({
                            'temperature':
                            new_temp,
                            'units':
                            data.get('properties').get('units'),
                            'range':
                            data.get('properties').get('range'),
                        })
                        # add_method(content)
                        print 'update temperature: {}'.format(
                            str(add_method(content)))
                    else:
                        print "Unable to get Temperature status."
                elif sensor == 'rgbled':
                    new_rgb = data.get('properties').get('rgbValue')
                    if new_rgb:
                        content.update({
                            'rgbvalue':
                            new_rgb,
                            'range':
                            data.get('properties').get('range'),
                        })
                        # add_method(content)
                        print 'update rdbled: {}'.format(
                            str(add_method(content)))
                    else:
                        print "Unable to get Rgbled status ."
                else:
                    obj = status_method(gateway_id, uuid)
                    status = bool(obj.get('status')) if obj else None
                    new_sts = bool(data.get('properties').get('value'))
                    if status != new_sts:
                        content.update({
                            'status': new_sts,
                        })
                        print 'update {} data: {}'.format(
                            sensor, str(add_method(content)))
                        if new_sts and NexmoClient.send_message(
                                gateway_id, uuid, sensor):
                            print 'Sent text alert to users for {} status is True.'.format(
                                sensor)
                    else:
                        print "{} status {} has not been changed.".format(
                            sensor, new_sts)
Esempio n. 12
0
    def parse_data(data, **kargs):
        """parse the json data and save them in db."""
        if data:
            sensor = kargs.get('sensor')
            uuid = kargs.get('uuid')
            gateway_id = kargs.get('gateway_id')
            resource_id = kargs.get('resource_id')
            if sensor == 'power':
                power_add = get_class("DB.api.power.new")
                energy_add = get_class("DB.api.energy.new")

                new_energy = data.get('power1')
                new_power = data.get('power2')

                if new_power != 0:
                    content = {
                            'resource_id': resource_id,
                            'value': int(new_power),
                    }
                    # power_add(content)
                    print('update power: {}'.format(str(power_add(content))))

                if new_energy != 0:
                    content = {
                            'resource_id': resource_id,
                            'value': int(new_energy),
                    }
                    # energy_add(content)
                    print('update energy: {}'.format(str(energy_add(content))))
            else:
                add_method = get_class("DB.api.{}.new".format(sensor))
                status_method = get_class("DB.api.{}.get_latest_by_gateway_uuid".format(sensor))

                content = {
                    'resource_id': resource_id,
                }

                if sensor == 'solar':
                    new_tilt = data.get('tiltPercentage')
                    if new_tilt is not None:
                        content.update({
                            'tiltpercentage': new_tilt,
                            'lcd_first': data.get('lcd1'),
                            'lcd_second': data.get('lcd2'),
                        })

                        # add_method(content)
                        print('update tilt percentage: {}'.format(str(add_method(content))))
                    else:
                        print("Unable to get tilt percentage.")
                elif sensor == 'illuminance':
                    new_ill = data.get('illuminance')
                    if new_ill is not None:
                        content.update({
                            'illuminance': new_ill,
                        })
                        # add_method(content)
                        print('update illuminance: {}'.format(str(add_method(content))))
                    else:
                        print("Unable to get Illuminance status.")
                elif sensor == 'temperature':
                    new_temp = data.get('temperature')
                    if new_temp is not None:
                        content.update({
                            'temperature': new_temp,
                            'units': data.get('units'),
                            'range': data.get('range'),
                        })

                        # add_method(content)
                        print('update temperature: {}'.format(str(add_method(content))))
                    else:
                        print("Unable to get Temperature status.")
                elif sensor == 'audio':
                    if data is not None:
                        content.update({
                            'mute': data.get('mute'),
                            'volume': data.get('volume'),
                        })
                        # add_method(content)
                        print('update audio: {}'.format(str(add_method(content))))
                    else:
                        print("Unable to get Audio sensor status .")
                elif sensor == 'brightness':
                    if data is not None:
                        content.update({
                            'brightness': data.get('brightness'),
                        })
                        # add_method(content)
                        print('update brightness: {}'.format(str(add_method(content))))
                    else:
                        print("Unable to get Brightness sensor status .")
                elif sensor == 'mp3player':
                    if data is not None:
                        content.update({
                            'media_states': json.dumps(data.get('mediaStates')),
                            'playlist': json.dumps(data.get('playList')),
                            'state': data.get('state'),
                            'title': data.get('title'),
                        })
                        # add_method(content)
                        print('update mp3player: {}'.format(str(add_method(content))))
                    else:
                        print("Unable to get Mp3player sensor status .")
                elif sensor == 'rgbled':
                    new_rgb = data.get('rgbValue')
                    if new_rgb is not None:
                        content.update({
                            'rgbvalue': str(new_rgb),
                            'range': str(data.get('range')),
                        })
                        # add_method(content)
                        print('update rdbled: {}'.format(str(add_method(content))))
                    else:
                        print("Unable to get Rgbled status .")
                elif sensor == 'environment':
                    if data is not None:
                        content.update({
                            'temperature': data.get('temperature'),
                            'pressure': data.get('pressure'),
                            'humidity': data.get('humidity'),
                            'uv_index': data.get('uvIndex'),
                        })
                        # add_method(content)
                        print('update environment: {}'.format(str(add_method(content))))
                    else:
                        print("Unable to get Environment sensor status .")
                elif sensor == 'generic':
                    if data is not None:
                        content.update({
                            'json_data': json.dumps(data),
                        })
                        # add_method(content)
                        print('update generic {}: {}'.format(data.get('id'), str(add_method(content))))
                    else:
                        print("Unable to get Generic sensor {} status .".format(data.get('id')))
                else:
                    obj = status_method(resource_id)
                    status = bool(obj.get('status')) if obj else None
                    new_sts = bool(data.get('value'))
                    if status != new_sts:
                        content.update({
                            'status': new_sts,
                        })
                        print('update {} data: {}'.format(sensor, str(add_method(content))))
                        if new_sts and NexmoClient.send_message(gateway_id, uuid, sensor):
                            print('Sent text alert to users for {} status is True.'.format(sensor))
                    else:
                        print("{} status {} has not been changed.".format(sensor, new_sts))
Esempio n. 13
0
def _get_sensor_data(token_dict):
    res = resource.list_resource(status=1, gateway_id=session['gateway_id'])
    default_token = util.format_datetime(util.get_utc_now() - datetime.timedelta(minutes=1))
    ret = {
        'alert': {},
        'status': {},
        'data': {},
        'brillo': {},
        'generic': {}
    }
    for sensor in res:
        typ = sensor.get('sensor_type').get('mapping_class')
        href = sensor.get('path')
        resource_id = sensor.get("id")
        if href.startswith("/a/"):
            if typ in ALERT_GRP:
                token = token_dict.get(str(resource_id)) if str(resource_id) in token_dict.keys() \
                                                            and token_dict.get(str(resource_id)) else default_token
                latest_data = util.get_class("DB.api.{}.get_latest_alert_by_gateway_uuid"
                                             .format(typ))(resource_id=resource_id,
                                                           token=token)
                latest_data = latest_data if latest_data else {"resource_id": resource_id}
            elif typ == 'power':
                latest_data = util.get_class("DB.api.energy.get_latest_by_gateway_uuid".format(typ))(resource_id=resource_id)
            else:
                latest_data = util.get_class("DB.api.{}.get_latest_by_gateway_uuid".format(typ))(resource_id=resource_id)
            if latest_data is None:
                continue
            # print latest_data
            if typ in ALERT_GRP:
                _compose_sensor_data(typ, latest_data, 'created_at', 'alert', ret)
            elif typ in STATUS_GRP:
                if typ == "rgbled":
                    val = True if latest_data.get('rgbvalue') == "[255, 0, 0]" else False
                    _compose_sensor_data(typ, latest_data, {'value': val}, 'status', ret)
                else:
                    _compose_sensor_data(typ, latest_data, 'status', 'status', ret)
            elif typ in DATA_GRP:
                # extract values from the db query result
                if typ in ['temperature', 'illuminance']:
                    key_words = [typ]
                elif typ == 'solar':
                    key_words = ['tiltpercentage']
                elif typ == 'power':
                    key_words = ['value']
                elif typ == 'environment':
                    key_words = ['temperature', 'humidity', 'pressure', 'uv_index']

                for key in key_words:
                    sensor_type = typ if typ != "environment" else key
                    _compose_sensor_data(sensor_type, latest_data, key, 'data', ret)
            elif typ == "generic":
                _compose_sensor_data(typ, latest_data, 'json_data', 'generic', ret)
        elif href.startswith("/brillo/"):
            latest_data = util.get_class("DB.api.{}.get_latest_by_gateway_uuid".format(typ))(
                resource_id=resource_id)
            # print latest_data
            if latest_data is None:
                continue
            if typ in BRILLO_GRP:
                if typ in ['brightness']:
                    keys = [typ]
                elif typ == 'rgbled':
                    keys = ['rgbvalue']
                elif typ == 'audio':
                    keys = ['volume', 'mute']
                elif typ == 'mp3player':
                    keys = ['media_states', 'playlist', 'state', 'title']

                _compose_sensor_data(typ, latest_data, keys, 'brillo', ret)
    return ret
Esempio n. 14
0
    def parse_data(data, **kargs):
        """parse the json data and save them in db."""
        if data:
            sensor = kargs.get('sensor')
            uuid = kargs.get('uuid')
            gateway_id = kargs.get('gateway_id')
            if sensor == 'power':
                power_add = get_class("DB.api.power.new")
                energy_add = get_class("DB.api.energy.new")

                new_energy = data.get('properties').get('power1')
                new_power = data.get('properties').get('power2')

                if new_power != 0:
                    content = {
                            'uuid': uuid,
                            'gateway_id': gateway_id,
                            'value': new_power,

                    }
                    # power_add(content)
                    print 'update power: {}'.format(str(power_add(content)))

                if new_energy != 0:
                    content = {
                            'uuid': uuid,
                            'gateway_id': gateway_id,
                            'value': new_energy,

                    }
                    # energy_add(content)
                    print 'update energy: {}'.format(str(energy_add(content)))
            else:
                # sensor = data.get('properties').get('id')
                add_method = get_class("DB.api.{}.new".format(sensor))
                status_method = get_class("DB.api.{}.get_latest_by_gateway_uuid".format(sensor))

                content = {
                    'uuid': uuid,
                    'gateway_id': gateway_id,
                }
                # obj = status_method(gateway_id, uuid)
                if sensor == 'solar':
                    new_tilt = data.get('properties').get('tiltPercentage')
                    if new_tilt:
                        content.update({
                            'tiltpercentage': new_tilt,
                            'lcd_first': data.get('properties').get('lcd1'),
                            'lcd_second': data.get('properties').get('lcd2'),
                        })
                        # add_method(content)
                        print 'update tilt percentage: {}'.format(str(add_method(content)))
                    else:
                        print "Unable to get tilt percentage."
                elif sensor == 'illuminance':
                    new_ill = data.get('properties').get('illuminance')
                    if new_ill:
                        content.update({
                            'illuminance': new_ill,
                        })
                        # add_method(content)
                        print 'update illuminance: {}'.format(str(add_method(content)))
                    else:
                        print "Unable to get Illuminance status."
                elif sensor == 'temperature':
                    new_temp = data.get('properties').get('temperature')
                    if new_temp:
                        content.update({
                            'temperature': new_temp,
                            'units': data.get('properties').get('units'),
                            'range': data.get('properties').get('range'),
                        })
                        # add_method(content)
                        print 'update temperature: {}'.format(str(add_method(content)))
                    else:
                        print "Unable to get Temperature status."
                elif sensor == 'rgbled':
                    new_rgb = data.get('properties').get('rgbValue')
                    if new_rgb:
                        content.update({
                            'rgbvalue': new_rgb,
                            'range': data.get('properties').get('range'),
                        })
                        # add_method(content)
                        print 'update rdbled: {}'.format(str(add_method(content)))
                    else:
                        print "Unable to get Rgbled status ."
                else:
                    obj = status_method(gateway_id, uuid)
                    status = bool(obj.get('status')) if obj else None
                    new_sts = bool(data.get('properties').get('value'))
                    if status != new_sts:
                        content.update({
                            'status': new_sts,
                        })
                        print 'update {} data: {}'.format(sensor, str(add_method(content)))
                        if new_sts and NexmoClient.send_message(gateway_id, uuid, sensor):
                            print 'Sent text alert to users for {} status is True.'.format(sensor)
                    else:
                        print "{} status {} has not been changed.".format(sensor, new_sts)