今天主要是在搭建环境上耗费了一天的时间, 还没搭建完, 任然报错, o(╥﹏╥)o,
访问通过链接访问数据库的数据
1 设置配置文件
from dynaconf import Dynaconf
settings = Dynaconf(
envvar_prefix="WID",
settings_files=['settings.yaml'])
1.1 Dynaconf
pip install dynaconf
Dynaconf 是一个Python的第三方模块,旨在成为在 Python 中管理配置的最佳选择。
- 它可以从各种来源读取设置,包括环境变量、文件、服务器配置等。
- 它适用于任何类型的 Python 程序,包括 Flask 和 Django 扩展。
- 定义setting 的配置文件
1.2 YAML详解 (配置文件)
-
以.yml格式为后缀
-
键值对使用冒号结构表示 key: value,冒号后面要加一个空格kubernetes
- 大小写敏感
- 使用缩进表示层级关系
- 缩进不允许使用tab,只允许空格
- 缩进的空格数不重要,只要相同层级的元素左对齐即可
- '#'表示注释
2 定义函数
client = WidClient(grpc_target=settings.grpc_target, wid_org_id=settings.org_id)
3 定义 widclient 类
class WidClient:
def __init__(self, grpc_target: str, wid_org_id: str):
self.grpc_target = grpc_target # 网址
self._org_id = wid_org_id # 编号
self._channel = grpc.insecure_channel(grpc_target) # grpc.insecure_channel # 监听频道
self._RpcMetricApiStub = RpcMetricApiStub(self._channel) # 频次记录
self._RpcTimeseriesApiStub = RpcTimeseriesApiStub(self._channel) # 时间记录
self._RpcFileApiStub = RpcFileApiStub(self._channel) # 文件记录
self._rpc_ts_api = TsQueryApi(wid_org_id, self._RpcMetricApiStub, self._RpcTimeseriesApiStub) # Rpc获取所有监听的数值
self._rpc_swmm_api = SwmmApi(wid_org_id, RpcWmSwmmApiStub(self._channel)) # 数据库文件的读取和保存
self._file_api = FileApi(org_id=wid_org_id, file_stub=self._RpcFileApiStub) # 中台文件大的读取和存储
self._rpc_advmodel_api = AdvModelApi(wid_org_id, # 返回高级 算法/模型 相关操作的api
adv_model_stub=RpcAdvModelApiStub(self._channel),
input_stub=RpcAdvModelInputApiStub(self._channel),
output_stub=RpcAdvModelOutputApiStub(self._channel),
file_api=self._file_api,
rpc_ts_query_api=self._rpc_ts_api)
def swmm_api(self) -> SwmmApi:
"""
返回swmm相关操作的api
:return:
"""
return self._rpc_swmm_api
def advmodel_api(self) -> AdvModelApi:
"""
返回高级 算法/模型 相关操作的api
:return:
"""
return self._rpc_advmodel_api
def ts_api(self) -> TsQueryApi:
"""
返回高级 算法/模型 相关操作的api
:return:
"""
return self._rpc_ts_api
def metric_query(self,
metric_name: str = None,
gateway_tag_name: str = None,
business_types: list[str] = [],
metric_table_ids: list[str] = [],
metric_source_types: list[str] = [],
metric_types: list[str] = [],
metric_table_types: list[str] = [],
gateway_tag_names: list[str] = [],
metric_ids: list[str] = []) -> list[dict]:
"""
查询指标信息,如果所有参数都留空,那么回返回系统中的所有的指标信息
:param metric_name: 指标名称,支持模糊查询
:param gateway_tag_name: 模糊查询,网关上传的点位tagId,用于是网关出,指标的唯一标识
:param business_types: 指标的业务类型
:param metric_table_ids: 指标所属的站点
:param metric_source_types: 指标的数据源类型,raw为原始数据,processed为虚拟指标
:param metric_types: 信号类型, DI(数字输入)、DO(数字输出)、AI(模拟输入)、AO(模拟输出)、DA(报警)、T(阈值)
:param metric_table_types: 通过指标所属站点的类型,来查询所属指标类型
:param gateway_tag_names: 指标在网关上指定的tagId
:param metric_ids: 指标id
:return: 指标信息的dict
"""
return self._rpc_ts_api.metric_query(metric_name, gateway_tag_name, business_types, metric_table_ids,
metric_source_types, metric_types, metric_table_types, gateway_tag_names,
metric_ids)
def query_ts_data(self,
from_time: datetime,
to_time: datetime = datetime.now(),
timeseries_name: list[str] = [],
down_sampling: RpcDownSampling = None,
result_tz: Union[str, pytz.timezone, dateutil.tz.tzfile] = None,
tags: dict[str, str] = None) -> Iterable[TsResp]:
"""
:param from_time: 开始时间
:param to_time: 结束时间
:param timeseries_name: 时间序列名,注意这里不是tag_id
:param down_sampling: 降采样参数
:param result_tz: 结果的时区信息,不设置默认为utc时间
:param tags:
:return: 返回查询的数据,会yield返回
"""
return self._rpc_ts_api.query_ts_data(from_time, to_time, timeseries_name, down_sampling, result_tz, tags)
def query_scada_bind_file(self, scada_json_file: str,
from_time: datetime,
to_time: datetime = datetime.now(),
down_sampling: RpcDownSampling = None,
result_tz: Union[str, pytz.timezone, dateutil.tz.tzfile] = None) -> dict:
return self._rpc_ts_api.query_scada_bind_file(scada_json_file, from_time, to_time, down_sampling, result_tz)