From 0b66c22807f0f7cb54195261777ab83f64d25b6e Mon Sep 17 00:00:00 2001 From: DingZQ Date: Fri, 7 Mar 2025 21:19:10 +0800 Subject: [PATCH 1/3] Update the api token --- influxdb_info.py | 2 +- setup_server.md | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/influxdb_info.py b/influxdb_info.py index 186a11b..410695d 100644 --- a/influxdb_info.py +++ b/influxdb_info.py @@ -1,7 +1,7 @@ # influxdb数据库连接信息 url = "http://localhost:8086" # 替换为你的InfluxDB实例地址 -token = "Vq8F5tzxqmjH6JYPBP5xqwo6nJbzRqCnahlcoMVyZGMPm3H92swD08VX-5lTH1laN_JG1x7EZ80WOQoycanmBw==" # 替换为你的InfluxDB Token +token = "ly6krGp2ePQe391HafjyrFFJV9GdwUe0z5NK1Jq69vQitItBuvu3_5VdWM3EG5cUryV3A1Pwg8vCdl3KXp25tA==" # 替换为你的InfluxDB Token # _ENCODED_TOKEN = "eEdETTVSWnFSSkF1ekFHUy1vdFhVZEMyTkZkWTc1cUpBalJMcUFCNHA1V2NJSUFsSVVwT3BUOF95QTE2QU9IbUpXZXJ3UV8wOGd3Yjg0c3k0MmpuWlE9PQ==" # token = base64.b64decode(_ENCODED_TOKEN).decode("utf-8") org = "TJWATERORG" # 替换为你的Organization名称 diff --git a/setup_server.md b/setup_server.md index da22d41..048b70f 100644 --- a/setup_server.md +++ b/setup_server.md @@ -50,3 +50,20 @@ influx config create --config-name onboarding ` --org "TJWATERORG" ` --token "cpuAmRnJqSMd7F34q1VjG6JgwZfO0S0w0vK2ZmAvA6zvf6m-6UAobUKSW3xhGr_nxZI5HsFlpfZHT1i8sI3LyQ==" ` --active + + +Setup instructions for WMH's work + +1. import scada_info.csv + run python online_Analysis.py + +2. import history_pattern_flow.csv + run python online_Analysis.py + Should manually change code + +3. run create_template.py + +4. run influxdb_api.py + 在InfluxDB数据库中创建好我们需要的bucket + create buckets + From f728ace4a792b244c2d4c8aceda14aeb53a74ec2 Mon Sep 17 00:00:00 2001 From: DingZQ Date: Fri, 7 Mar 2025 22:08:47 +0800 Subject: [PATCH 2/3] Fixed time issue --- .gitignore | 3 ++- influxdb_api.py | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index f74ed1d..7ed0f87 100644 --- a/.gitignore +++ b/.gitignore @@ -25,4 +25,5 @@ TODO.md # build pyd build *.c -*.pyd \ No newline at end of file +*.pyd +temp/ diff --git a/influxdb_api.py b/influxdb_api.py index 83736c7..c676690 100644 --- a/influxdb_api.py +++ b/influxdb_api.py @@ -1354,8 +1354,10 @@ def query_SCADA_data_by_device_ID_and_time_range(query_ids_list: List[str], star query_api = client.query_api() # 将北京时间转换为 UTC 时间 - utc_start_time = time_api.parse_utc_time(start_time) - utc_end_time = time_api.parse_utc_time(end_time) + bg_start_time = time_api.parse_beijing_time(start_time) + utc_start_time = bg_start_time.astimezone(timezone.utc) + bg_end_time = time_api.parse_beijing_time(end_time) + utc_end_time = bg_end_time.astimezone(timezone.utc) # 构建查询字典 SCADA_results = [] From c1ba35e1b20bc1018ee9367298101d95d403eb0f Mon Sep 17 00:00:00 2001 From: DingZQ Date: Sat, 8 Mar 2025 11:51:03 +0800 Subject: [PATCH 3/3] Add API getallscadarecordsbydate --- influxdb_api.py | 60 +++++++++++++++++++++++++++++++++++++++++++++++++ main.py | 5 +++++ 2 files changed, 65 insertions(+) diff --git a/influxdb_api.py b/influxdb_api.py index c676690..1a97047 100644 --- a/influxdb_api.py +++ b/influxdb_api.py @@ -1395,6 +1395,66 @@ def query_SCADA_data_by_device_ID_and_time_range(query_ids_list: List[str], star return SCADA_results +# DingZQ, 2025-03-08 +def query_all_SCADA_records_by_date(query_date: str, bucket: str="SCADA_data", client: InfluxDBClient=client) -> list[dict[str, float]]: + """ + 根据日期查询所有SCADA数据 + + :param query_date: 输入的日期,格式为 '2024-11-24', 日期是北京时间的日期 + :param bucket: InfluxDB 的 bucket 名称,默认值为 "SCADA_data"。 + :param client: 已初始化的 InfluxDBClient 实例。 + + :return: + """ + if client.ping(): print("{} -- Successfully connected to InfluxDB.".format( datetime.now().strftime('%Y-%m-%d %H:%M:%S'))) + else: print("{} -- Failed to connect to InfluxDB.".format( datetime.now().strftime('%Y-%m-%d %H:%M:%S'))) + + query_api = client.query_api() + # 将北京时间转换为 UTC 时间 + + bg_start_time, bg_end_time = time_api.parse_beijing_date_range(query_date) + utc_start_time = bg_start_time.astimezone(timezone.utc) + utc_end_time = bg_end_time.astimezone(timezone.utc) + + print(f"utc_start_time: {utc_start_time}, utc_end_time: {utc_end_time}") + + # 构建查询字典 + SCADA_results = [] + + # 构建 Flux 查询语句 + flux_query = f''' + from(bucket: "{bucket}") + |> range(start: {utc_start_time.isoformat()}, stop: {utc_end_time.isoformat()}) + |> filter(fn: (r) => r["_field"] == "monitored_value") + |> sort(columns: ["_time"], desc: false) + ''' + + # 执行查询 + try: + result = query_api.query(flux_query) + + # 从查询结果中提取 monitored_value + if result: + # 假设返回的结果为一行数据 + for table in result: + for record in table.records: + # 获取字段 "_value" 即为 monitored_value + monitored_value = record.get_value() + rec = { + "ID": record['device_ID'], + "time": record.get_time(), + "value": monitored_value + } + SCADA_results.append(rec) + + except Exception as e: + print(f"Error querying InfluxDB for date {query_date}: {e}") + + return SCADA_results + + + + # DingZQ, 2025-02-15 def query_SCADA_data_by_device_ID_and_date(query_ids_list: List[str], query_date: str, bucket: str="SCADA_data", client: InfluxDBClient=client) -> list[dict[str, float]]: """ diff --git a/main.py b/main.py index 3d06897..2fe6ff0 100644 --- a/main.py +++ b/main.py @@ -2181,6 +2181,11 @@ async def fastapi_query_scada_data_by_device_id_and_date(ids: str, querydate: st query_ids = ids.split(',') return influxdb_api.query_SCADA_data_by_device_ID_and_date(query_ids_list=query_ids, query_date=querydate, client=influx_client) +# DingZQ, 2025-03-08 +@app.get("/queryallscadarecordsbydate/") +async def fastapi_query_all_scada_records_by_date(querydate: str): + return influxdb_api.query_all_SCADA_records_by_date(query_date=querydate, client=influx_client) + @app.get("/queryinfluxdbbuckets/")