Пример #1
0
 def to_dict(self):
     keys = self.__mapper__.columns.keys()
     dict_info = {}
     for key in keys:
         if key.startswith('_'):
             continue
         value = getattr(self, key)
         if value is not None:
             if isinstance(value, datetime.datetime):
                 value = util.format_datetime(value)
             dict_info[key] = value
     return dict_info
Пример #2
0
 def to_dict(self):
     keys = self.__mapper__.columns.keys()
     dict_info = {}
     for key in keys:
         if key.startswith('_'):
             continue
         value = getattr(self, key)
         if value is not None:
             if isinstance(value, datetime.datetime):
                 value = util.format_datetime(value)
             dict_info[key] = value
     return dict_info
Пример #3
0
def get_sensor():
    """
    Get sensor data by token
    """
    token_dict = {}
    default_token = util.format_datetime(util.get_utc_now() - datetime.timedelta(minutes=1))
    # print default_token
    tlist = [name+'-token' for name in ALERT_GRP]
    for t in tlist:
        token_dict.update({t: request.headers.get(t) if request.headers.get(t) else default_token})
    # print str(token_dict)
    ret = _get_sensor_data(token_dict)
    return jsonify({'data': ret}), 201
Пример #4
0
    def join_to_dict(self):
        joined = dict([(k, v) for k, v in self.__dict__.iteritems()
                       if not k[0] == '_'])
        dict_info = {}
        for key in joined.keys():
            if key.startswith('_'):
                continue
            value = getattr(self, key)
            if value is not None:
                if isinstance(value, datetime.datetime):
                    value = util.format_datetime(value)
                if isinstance(value, HelperMixin):
                    value = value.to_dict()
                dict_info[key] = value

        return dict_info
Пример #5
0
    def join_to_dict(self):
        joined = dict([(k, v) for k, v in self.__dict__.iteritems()
                       if not k[0] == '_'])
        dict_info = {}
        for key in joined.keys():
            if key.startswith('_'):
                continue
            value = getattr(self, key)
            if value is not None:
                if isinstance(value, datetime.datetime):
                    value = util.format_datetime(value)
                if isinstance(value, HelperMixin):
                    value = value.to_dict()
                dict_info[key] = value

        return dict_info
Пример #6
0
def get_sensor():
    """
    Get sensor data by token
    """
    token_dict = {}
    default_token = util.format_datetime(util.get_utc_now() -
                                         datetime.timedelta(minutes=1))
    # print default_token
    tlist = [name + '-token' for name in ALERT_GRP]
    for t in tlist:
        token_dict.update({
            t:
            request.headers.get(t) if request.headers.get(t) else default_token
        })
    # print str(token_dict)
    ret = _get_sensor_data(token_dict)
    return jsonify({'data': ret}), 201
Пример #7
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
Пример #8
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