Commit b93d4e1b authored by ZZH's avatar ZZH

opt meter 3rd 2026-4-24 14:23

parent 7e30f302
# -*- coding:utf-8 -*-
"""
DATE:2026/4/22 16:41
"""
WATER_CMP_MAP = {
907: 1, # 中心城水厂
905: 2, # 獭湖水厂
910: 4, # 南坑水厂
909: 5, # 塘坑水厂
911: 6, # 荷坳水厂
1501: 7, # 苗坑水厂
908: 8, # 鹅公岭水厂
903: 9, # 沙湖水厂
901: 10, # 塘岭水厂
902: 11, # 田心水厂
904: 12, # 坑梓水厂
912: 13, # 南岭水厂
}
SCADA_FIELDS_MAP = {
910: {
# 南坑水厂
# 原水泵站总电表
"SSBF_ZYGDN_10": {"cid": 4, "sid": "NK_SSBF_ZYGDN",
"field": "kwhttl_p"},
# 1#变压器电表
"NK_DB07_EP": {"cid": 4, "sid": "NK_DB07", "field": "kwhttl_p"},
"NK_DB07_PF": {"cid": 4, "sid": "NK_DB07", "field": "costtl"},
"NK_DB07_PZ": {"cid": 4, "sid": "NK_DB07", "field": "pttl"},
# 2#变压器电表
"NK_DB08_EP": {"cid": 4, "sid": "NK_DB08", "field": "kwhttl_p"},
"NK_DB08_PF": {"cid": 4, "sid": "NK_DB08", "field": "costtl"},
"NK_DB08_PZ": {"cid": 4, "sid": "NK_DB08", "field": "pttl"},
# 尾水泵房1#总电表
"NK_DB25_EP": {"cid": 4, "sid": "NK_DB25", "field": "kwhttl_p"},
"NK_DB25_PF": {"cid": 4, "sid": "NK_DB25", "field": "costtl"},
"NK_DB25_PZ": {"cid": 4, "sid": "NK_DB25", "field": "pttl"},
# 尾水泵房2#总电表
"NK_DB65_EP": {"cid": 4, "sid": "NK_DB65", "field": "kwhttl_p"},
"NK_DB65_PF": {"cid": 4, "sid": "NK_DB65", "field": "costtl"},
"NK_DB65_PZ": {"cid": 4, "sid": "NK_DB65", "field": "pttl"},
# 回收水池总电表
"NK_DB66_EP": {"cid": 4, "sid": "NK_DB66", "field": "kwhttl_p"},
"NK_DB66_PF": {"cid": 4, "sid": "NK_DB66", "field": "costtl"},
"NK_DB66_PZ": {"cid": 4, "sid": "NK_DB66", "field": "pttl"},
# 1#送水泵电表
"NK_DB01_EP": {"cid": 4, "sid": "NK_DB01", "field": "kwhttl_p"},
"NK_DB01_PF": {"cid": 4, "sid": "NK_DB01", "field": "costtl"},
"NK_DB01_PZ": {"cid": 4, "sid": "NK_DB01", "field": "pttl"},
# 2#送水泵电表
"NK_DB02_EP": {"cid": 4, "sid": "NK_DB02", "field": "kwhttl_p"},
"NK_DB02_PF": {"cid": 4, "sid": "NK_DB02", "field": "costtl"},
"NK_DB02_PZ": {"cid": 4, "sid": "NK_DB02", "field": "pttl"},
# 3#送水泵电表
"NK_DB03_EP": {"cid": 4, "sid": "NK_DB03", "field": "kwhttl_p"},
"NK_DB03_PF": {"cid": 4, "sid": "NK_DB03", "field": "costtl"},
"NK_DB03_PZ": {"cid": 4, "sid": "NK_DB03", "field": "pttl"},
# 4#送水泵电表
"NK_DB04_EP": {"cid": 4, "sid": "NK_DB04", "field": "kwhttl_p"},
"NK_DB04_PF": {"cid": 4, "sid": "NK_DB04", "field": "costtl"},
"NK_DB04_PZ": {"cid": 4, "sid": "NK_DB04", "field": "pttl"},
# 5#送水泵电表
"NK_DB05_EP": {"cid": 4, "sid": "NK_DB05", "field": "kwhttl_p"},
"NK_DB05_PF": {"cid": 4, "sid": "NK_DB05", "field": "costtl"},
"NK_DB05_PZ": {"cid": 4, "sid": "NK_DB05", "field": "pttl"},
# 办公楼1#总电表
"NK_DB24_EP": {"cid": 4, "sid": "NK_DB24", "field": "kwhttl_p"},
"NK_DB24_PF": {"cid": 4, "sid": "NK_DB24", "field": "costtl"},
"NK_DB24_PZ": {"cid": 4, "sid": "NK_DB24", "field": "pttl"},
# 办公楼2#总电表
"NK_DB52_EP": {"cid": 4, "sid": "NK_DB52", "field": "kwhttl_p"},
"NK_DB52_PF": {"cid": 4, "sid": "NK_DB52", "field": "costtl"},
"NK_DB52_PZ": {"cid": 4, "sid": "NK_DB52", "field": "pttl"},
},
1501: {
# 苗坑水厂
# 1#总进线总电表
"DB_P9_ZXYGDD": {"cid": 7, "sid": "MK_DB_P9", "field": "kwhttl_p"},
"DB_P9_GLYS": {"cid": 7, "sid": "MK_DB_P9", "field": "costtl"},
# 2#低压变压器柜电表
"DB_P3_ZWGDN": {"cid": 7, "sid": "MK_DB_P3", "field": "kwhttl_p"},
"DB_P3_GLYS": {"cid": 7, "sid": "MK_DB_P3", "field": "costtl"},
# 综合楼
"d0519172316__EPf": {"cid": 7, "sid": "MK_d0519172316",
"field": "kwhttl_p"},
"d0519172316__PF": {"cid": 7, "sid": "MK_d0519172316",
"field": "costtl"},
"d0519172316__P": {"cid": 7, "sid": "MK_d0519172316",
"field": "pttl"},
# # 旧一级取水泵房
# "d0519172937__EPf": {"cid": 7, "sid": "MK_d0519172937",
# "field": "kwhttl_p"},
# "d0519172937__PF": {"cid": 7, "sid": "MK_d0519172937",
# "field": "costtl"},
# "d0519172937__P": {"cid": 7, "sid": "MK_d0519172937",
# "field": "pttl"},
# 1#反冲泵
"d0519172527__EPf": {"cid": 7, "sid": "MK_d0519172527",
"field": "kwhttl_p"},
"d0519172527__PF": {"cid": 7, "sid": "MK_d0519172527",
"field": "costtl"},
"d0519172527__P": {"cid": 7, "sid": "MK_d0519172527",
"field": "pttl"},
# 2#反冲泵
"d0519172543__EPf": {"cid": 7, "sid": "MK_d0519172543",
"field": "kwhttl_p"},
"d0519172543__PF": {"cid": 7, "sid": "MK_d0519172543",
"field": "costtl"},
"d0519172543__P": {"cid": 7, "sid": "MK_d0519172543",
"field": "pttl"},
# 3#反冲泵
"d0519172852__EPf": {"cid": 7, "sid": "MK_d0519172852",
"field": "kwhttl_p"},
"d0519172852__PF": {"cid": 7, "sid": "MK_d0519172852",
"field": "costtl"},
"d0519172852__P": {"cid": 7, "sid": "MK_d0519172852",
"field": "pttl"},
# 1#空压机
"d0519172720__EPf": {"cid": 7, "sid": "MK_d0519172720",
"field": "kwhttl_p"},
"d0519172720__PF": {"cid": 7, "sid": "MK_d0519172720",
"field": "costtl"},
"d0519172720__P": {"cid": 7, "sid": "MK_d0519172720",
"field": "pttl"},
# 2#空压机
"d0519172737__EPf": {"cid": 7, "sid": "MK_d0519172737",
"field": "kwhttl_p"},
"d0519172737__PF": {"cid": 7, "sid": "MK_d0519172737",
"field": "costtl"},
"d0519172737__P": {"cid": 7, "sid": "MK_d0519172737",
"field": "pttl"},
# 3#空压机
"d0519172648__EPf": {"cid": 7, "sid": "MK_d0519172648",
"field": "kwhttl_p"},
"d0519172648__PF": {"cid": 7, "sid": "MK_d0519172648",
"field": "costtl"},
"d0519172648__P": {"cid": 7, "sid": "MK_d0519172648",
"field": "pttl"},
# 1#鼓风机
"d0519172621__EPf": {"cid": 7, "sid": "MK_d0519172621",
"field": "kwhttl_p"},
"d0519172621__PF": {"cid": 7, "sid": "MK_d0519172621",
"field": "costtl"},
"d0519172621__P": {"cid": 7, "sid": "MK_d0519172621",
"field": "pttl"},
# 2#鼓风机
"d0519172925__EPf": {"cid": 7, "sid": "MK_d0519172925",
"field": "kwhttl_p"},
"d0519172925__PF": {"cid": 7, "sid": "MK_d0519172925",
"field": "costtl"},
"d0519172925__P": {"cid": 7, "sid": "MK_d0519172925",
"field": "pttl"},
# 3#鼓风机
"d0519172937__EPf": {"cid": 7, "sid": "MK_d0519172937",
"field": "kwhttl_p"},
"d0519172937__P": {"cid": 7, "sid": "MK_d0519172937",
"field": "costtl"},
"d0519172937__PF": {"cid": 7, "sid": "MK_d0519172937",
"field": "pttl"},
# 深度组团总用电
"DB_P18_ZXYGDD": {"cid": 7, "sid": "MK_DB_P18", "field": "kwhttl_p"},
"DB_P18_GLYS": {"cid": 7, "sid": "MK_DB_P18", "field": "costtl"},
# 维修车间用电
"SDCL_P14_GYDD": {"cid": 7, "sid": "MK_SDCL_P14", "field": "kwhttl_p"},
"SDCL_P14_GLYS": {"cid": 7, "sid": "MK_SDCL_P14", "field": "costtl"},
"SDCL_P14_YGGL": {"cid": 7, "sid": "MK_SDCL_P14", "field": "pttl"},
# 照明电箱
"SDCL_P15_GYDD": {"cid": 7, "sid": "MK_SDCL_P15", "field": "kwhttl_p"},
"SDCL_P15_GLYS": {"cid": 7, "sid": "MK_SDCL_P15", "field": "costtl"},
"SDCL_P15_YGGL": {"cid": 7, "sid": "MK_SDCL_P15", "field": "pttl"},
# 格栅前臭氧接触池(备用电源)
"SDCL_P6_GYDD": {"cid": 7, "sid": "MK_SDCL_P6", "field": "kwhttl_p"},
"SDCL_P6_GLYS": {"cid": 7, "sid": "MK_SDCL_P6", "field": "costtl"},
"SDCL_P6_YGGL": {"cid": 7, "sid": "MK_SDCL_P6", "field": "pttl"},
# 絮凝沉淀池(备用电源)
"SDCL_P7_GYDD": {"cid": 7, "sid": "MK_SDCL_P7", "field": "kwhttl_p"},
"SDCL_P7_GLYS": {"cid": 7, "sid": "MK_SDCL_P7", "field": "costtl"},
"SDCL_P7_YGGL": {"cid": 7, "sid": "MK_SDCL_P7", "field": "pttl"},
# V型滤池(备用电源)
"SDCL_P8_GYDD": {"cid": 7, "sid": "MK_SDCL_P8", "field": "kwhttl_p"},
"SDCL_P8_GLYS": {"cid": 7, "sid": "MK_SDCL_P8", "field": "costtl"},
"SDCL_P8_YGGL": {"cid": 7, "sid": "MK_SDCL_P8", "field": "pttl"},
# 活性炭滤池(工作电源)
"SDCL_P9_GYDD": {"cid": 7, "sid": "MK_SDCL_P9", "field": "kwhttl_p"},
"SDCL_P9_GLYS": {"cid": 7, "sid": "MK_SDCL_P9", "field": "costtl"},
"SDCL_P9_YGGL": {"cid": 7, "sid": "MK_SDCL_P9", "field": "pttl"},
# 1#臭氧发生器
"SDCL_P5_GYDD": {"cid": 7, "sid": "MK_SDCL_P5", "field": "kwhttl_p"},
"SDCL_P5_GLYS": {"cid": 7, "sid": "MK_SDCL_P5", "field": "costtl"},
"SDCL_P5_YGGL": {"cid": 7, "sid": "MK_SDCL_P5", "field": "pttl"},
# 2#臭氧发生器
"SDCL_P13_GYDD": {"cid": 7, "sid": "MK_SDCL_P13", "field": "kwhttl_p"},
"SDCL_P13_GLYS": {"cid": 7, "sid": "MK_SDCL_P13", "field": "costtl"},
"SDCL_P13_YGGL": {"cid": 7, "sid": "MK_SDCL_P13", "field": "pttl"},
# 3#提升泵
"SDCL_P3_GYDD": {"cid": 7, "sid": "MK_SDCL_P3", "field": "kwhttl_p"},
"SDCL_P3_GLYS": {"cid": 7, "sid": "MK_SDCL_P3", "field": "costtl"},
"SDCL_P3_YGGL": {"cid": 7, "sid": "MK_SDCL_P3", "field": "pttl"},
# 4#提升泵
"SDCL_P4_GYDD": {"cid": 7, "sid": "MK_SDCL_P4", "field": "kwhttl_p"},
"SDCL_P4_GLYS": {"cid": 7, "sid": "MK_SDCL_P4", "field": "costtl"},
"SDCL_P4_YGGL": {"cid": 7, "sid": "MK_SDCL_P4", "field": "pttl"},
# 1#组团反冲泵
"SDCL_P18_GYDD": {"cid": 7, "sid": "MK_SDCL_P18", "field": "kwhttl_p"},
"SDCL_P18_GLYS": {"cid": 7, "sid": "MK_SDCL_P18", "field": "costtl"},
"SDCL_P18_YGGL": {"cid": 7, "sid": "MK_SDCL_P18", "field": "pttl"},
# 2#组团反冲泵
"SDCL_P19_GYDD": {"cid": 7, "sid": "MK_SDCL_P19", "field": "kwhttl_p"},
"SDCL_P19_GLYS": {"cid": 7, "sid": "MK_SDCL_P19", "field": "costtl"},
"SDCL_P19_YGGL": {"cid": 7, "sid": "MK_SDCL_P19", "field": "pttl"},
# 1#组团鼓风机
"SDCL_P20_GYDD": {"cid": 7, "sid": "MK_SDCL_P20", "field": "kwhttl_p"},
"SDCL_P20_GLYS": {"cid": 7, "sid": "MK_SDCL_P20", "field": "costtl"},
"SDCL_P20_YGGL": {"cid": 7, "sid": "MK_SDCL_P20", "field": "pttl"},
# 污泥干化车间总电表
"DB_P16_ZXYGDD": {"cid": 7, "sid": "MK_DB_P16", "field": "kwhttl_p"},
"DB_P16_GLYS": {"cid": 7, "sid": "MK_DB_P16", "field": "costtl"},
# 干料仓
"WNTS_AA3_3_GYDD": {"cid": 7, "sid": "MK_WNTS_AA3_3",
"field": "kwhttl_p"},
"WNTS_AA3_3_GLYS": {"cid": 7, "sid": "MK_WNTS_AA3_3",
"field": "costtl"},
"WNTS_AA3_3_YGGL": {"cid": 7, "sid": "MK_WNTS_AA3_3",
"field": "pttl"},
# 湿料仓
"WNTS_AA3_6_GYDD": {"cid": 7, "sid": "MK_WNTS_AA3_6",
"field": "kwhttl_p"},
"WNTS_AA3_6_GLYS": {"cid": 7, "sid": "MK_WNTS_AA3_6",
"field": "costtl"},
"WNTS_AA3_6_YGGL": {"cid": 7, "sid": "MK_WNTS_AA3_6",
"field": "pttl"},
# 1#污泥干化机
"WNTS_AA3_1_GYDD": {"cid": 7, "sid": "MK_WNTS_AA3_1",
"field": "kwhttl_p"},
"WNTS_AA3_1_GLYS": {"cid": 7, "sid": "MK_WNTS_AA3_1",
"field": "costtl"},
"WNTS_AA3_1_YGGL": {"cid": 7, "sid": "MK_WNTS_AA3_1",
"field": "pttl"},
# 调节池
"WNTS_AA3_5_GYDD": {"cid": 7, "sid": "MK_WNTS_AA3_5",
"field": "kwhttl_p"},
"WNTS_AA3_5_GLYS": {"cid": 7, "sid": "MK_WNTS_AA3_5",
"field": "costtl"},
"WNTS_AA3_5_YGGL": {"cid": 7, "sid": "MK_WNTS_AA3_5",
"field": "pttl"},
# 污泥车间系统用电
"WNTS_AA3_2_GYDD": {"cid": 7, "sid": "MK_WNTS_AA3_2",
"field": "kwhttl_p"},
"WNTS_AA3_2_GLYS": {"cid": 7, "sid": "MK_WNTS_AA3_2",
"field": "costtl"},
"WNTS_AA3_2_YGGL": {"cid": 7, "sid": "MK_WNTS_AA3_2",
"field": "pttl"},
# 2#送水泵
"DB_P12_ZXYGDD": {"cid": 7, "sid": "MK_DB_P12", "field": "kwhttl_p"},
"DB_P12_GLYS": {"cid": 7, "sid": "MK_DB_P12", "field": "costtl"},
# 4#送水泵
"DB_P11_ZXYGDD": {"cid": 7, "sid": "MK_DB_P11", "field": "kwhttl_p"},
"DB_P11_GLYS": {"cid": 7, "sid": "MK_DB_P11", "field": "costtl"},
# 5#送水泵
"DB_P14_ZXYGDD": {"cid": 7, "sid": "MK_DB_P14", "field": "kwhttl_p"},
"DB_P14_GLYS": {"cid": 7, "sid": "MK_DB_P14", "field": "costtl"},
# 2#总进线总电表
"DB_P25_ZXYGDD": {"cid": 7, "sid": "MK_DB_P25", "field": "kwhttl_p"},
"DB_P25_GLYS": {"cid": 7, "sid": "MK_DB_P25", "field": "costtl"},
# 1#低压变压器柜电表
"DB_1#SDHLG_ygzdl": {"cid": 7, "sid": "MK_DB_P2",
"field": "kwhttl_p"},
"DB_P2_GLYS": {"cid": 7, "sid": "MK_DB_P2", "field": "costtl"},
"DB_P2_ZYGGL": {"cid": 7, "sid": "MK_DB_P2", "field": "pttl"},
# 深度组团t2变压器柜
"DB_P13_ZXYGDD": {"cid": 7, "sid": "MK_DB_P13", "field": "kwhttl_p"},
"DB_P13_GLYS": {"cid": 7, "sid": "MK_DB_P13", "field": "costtl"},
# 臭氧发生间电源电表
"SDCL_P33_GYDD": {"cid": 7, "sid": "MK_SDCL_P33", "field": "kwhttl_p"},
"SDCL_P33_GLYS": {"cid": 7, "sid": "MK_SDCL_P33", "field": "costtl"},
"SDCL_P33_YGGL": {"cid": 7, "sid": "MK_SDCL_P33", "field": "pttl"},
# 3#臭氧发生器电表
"SDCL_P26_GYDD": {"cid": 7, "sid": "MK_SDCL_P26", "field": "kwhttl_p"},
"SDCL_P26_GLYS": {"cid": 7, "sid": "MK_SDCL_P26", "field": "costtl"},
"SDCL_P26_YGGL": {"cid": 7, "sid": "MK_SDCL_P26", "field": "pttl"},
# 1#提升泵电表
"SDCL_P24_GYDD": {"cid": 7, "sid": "MK_SDCL_P24", "field": "kwhttl_p"},
"SDCL_P24_GLYS": {"cid": 7, "sid": "MK_SDCL_P24", "field": "costtl"},
"SDCL_P24_YGGL": {"cid": 7, "sid": "MK_SDCL_P24", "field": "pttl"},
# 2#提升泵电表
"SDCL_P25_GYDD": {"cid": 7, "sid": "MK_SDCL_P25", "field": "kwhttl_p"},
"SDCL_P25_GLYS": {"cid": 7, "sid": "MK_SDCL_P25", "field": "costtl"},
"SDCL_P25_YGGL": {"cid": 7, "sid": "MK_SDCL_P25", "field": "pttl"},
# 3#组团反冲泵电表
"SDCL_P22_GYDD": {"cid": 7, "sid": "MK_SDCL_P22", "field": "kwhttl_p"},
"SDCL_P22_GLYS": {"cid": 7, "sid": "MK_SDCL_P22", "field": "costtl"},
"SDCL_P22_YGGL": {"cid": 7, "sid": "MK_SDCL_P22", "field": "pttl"},
# 2#组团鼓风机电表
"SDCL_P23_GYDD": {"cid": 7, "sid": "MK_SDCL_P23", "field": "kwhttl_p"},
"SDCL_P23_GLYS": {"cid": 7, "sid": "MK_SDCL_P23", "field": "costtl"},
"SDCL_P23_YGGL": {"cid": 7, "sid": "MK_SDCL_P23", "field": "pttl"},
# 1#送水泵电表
"DB_P21_ZXYGDD": {"cid": 7, "sid": "MK_DB_P21", "field": "kwhttl_p"},
"DB_P21_GLYS": {"cid": 7, "sid": "MK_DB_P21", "field": "costtl"},
# 6#送水泵电表
"DB_P15_ZXYGDD": {"cid": 7, "sid": "MK_DB_P15",
"field": "kwhttl_p"},
"DB_P15_GLYS": {"cid": 7, "sid": "MK_DB_P15", "field": "costtl"},
# 3#送水泵电表
"DB_P20_ZXYGDD": {"cid": 7, "sid": "MK_DB_P20", "field": "kwhttl_p"},
"DB_P20_GLYS": {"cid": 7, "sid": "MK_DB_P20", "field": "costtl"},
# 7#送水泵电表
"DB_P19_ZXYGDD": {"cid": 7, "sid": "MK_DB_P19", "field": "kwhttl_p"},
"DB_P19_GLYS": {"cid": 7, "sid": "MK_DB_P19", "field": "costtl"},
},
908: {
# 鹅公岭水厂
# 1#取水泵
"ZNPD_EGLSC_d0522175353__EPf": {"cid": 8, "sid": "EGLSC_d0522175353",
"field": "kwhttl_p"},
"ZNPD_EGLSC_d0522175353__P": {"cid": 8, "sid": "EGLSC_d0522175353",
"field": "costtl"},
"ZNPD_EGLSC_d0522175353__PF": {"cid": 8, "sid": "EGLSC_d0522175353",
"field": "pttl"},
# 2#取水泵
"ZNPD_EGLSC_d0522175102__EPf": {"cid": 8, "sid": "EGLSC_d0522175102",
"field": "kwhttl_p"},
"ZNPD_EGLSC_d0522175102__P": {"cid": 8, "sid": "EGLSC_d0522175102",
"field": "costtl"},
"ZNPD_EGLSC_d0522175102__PF": {"cid": 8, "sid": "EGLSC_d0522175102",
"field": "pttl"},
# 3#取水泵
"ZNPD_EGLSC_d0522175043__EPf": {"cid": 8, "sid": "EGLSC_d0522175043",
"field": "kwhttl_p"},
"ZNPD_EGLSC_d0522175043__PF": {"cid": 8, "sid": "EGLSC_d0522175043",
"field": "costtl"},
"ZNPD_EGLSC_d0522175043__P": {"cid": 8, "sid": "EGLSC_d0522175043",
"field": "pttl"},
# 4#取水泵
"ZNPD_EGLSC_d0522175000__EPf": {"cid": 8, "sid": "EGLSC_d0522175000",
"field": "kwhttl_p"},
"ZNPD_EGLSC_d0522175000__PF": {"cid": 8, "sid": "EGLSC_d0522175000",
"field": "costtl"},
"ZNPD_EGLSC_d0522175000__P": {"cid": 8, "sid": "EGLSC_d0522175000",
"field": "pttl"},
# 5#取水泵
"ZNPD_EGLSC_d0522175021__EPf": {"cid": 8, "sid": "EGLSC_d0522175021",
"field": "kwhttl_p"},
"ZNPD_EGLSC_d0522175021__PF": {"cid": 8, "sid": "EGLSC_d0522175021",
"field": "costtl"},
"ZNPD_EGLSC_d0522175021__P": {"cid": 8, "sid": "EGLSC_d0522175021",
"field": "pttl"},
# 6#取水泵
"ZNPD_EGLSC_d0522181502__EPf": {"cid": 8, "sid": "EGLSC_d0522181502",
"field": "kwhttl_p"},
"ZNPD_EGLSC_d0522181502__PF": {"cid": 8, "sid": "EGLSC_d0522181502",
"field": "costtl"},
"ZNPD_EGLSC_d0522181502__P": {"cid": 8, "sid": "EGLSC_d0522181502",
"field": "pttl"},
# 7#取水泵
"ZNPD_EGLSC_d0522175159__EPf": {"cid": 8, "sid": "EGLSC_d0522175159",
"field": "kwhttl_p"},
"ZNPD_EGLSC_d0522175159__PF": {"cid": 8, "sid": "EGLSC_d0522175159",
"field": "costtl"},
"ZNPD_EGLSC_d0522175159__P": {"cid": 8, "sid": "EGLSC_d0522175159",
"field": "pttl"},
# 取水真空泵
"ZNPD_EGLSC_d0522175124__EPf": {"cid": 8, "sid": "EGLSC_d0522175124",
"field": "kwhttl_p"},
"ZNPD_EGLSC_d0522175124__PF": {"cid": 8, "sid": "EGLSC_d0522175124",
"field": "costtl"},
"ZNPD_EGLSC_d0522175124__P": {"cid": 8, "sid": "EGLSC_d0522175124",
"field": "pttl"},
# 污泥干化车间
"ZNPD_EGLSC_d0522175309__EPf": {"cid": 8, "sid": "EGLSC_d0522175309",
"field": "kwhttl_p"},
"ZNPD_EGLSC_d0522175309__PF": {"cid": 8, "sid": "EGLSC_d0522175309",
"field": "costtl"},
"ZNPD_EGLSC_d0522175309__P": {"cid": 8, "sid": "EGLSC_d0522175309",
"field": "pttl"},
# 办公楼
"ZNPD_EGLSC_d0522175217__EPf": {"cid": 8, "sid": "EGLSC_d0522175217",
"field": "kwhttl_p"},
"ZNPD_EGLSC_d0522175217__PF": {"cid": 8, "sid": "EGLSC_d0522175217",
"field": "costtl"},
"ZNPD_EGLSC_d0522175217__P": {"cid": 8, "sid": "EGLSC_d0522175217",
"field": "pttl"},
# 取水泵房备用
"ZNPD_EGLSC_d0522175411__EPf": {"cid": 8, "sid": "EGLSC_d0522175411",
"field": "kwhttl_p"},
"ZNPD_EGLSC_d0522175411__PF": {"cid": 8, "sid": "EGLSC_d0522175411",
"field": "costtl"},
"ZNPD_EGLSC_d0522175411__P": {"cid": 8, "sid": "EGLSC_d0522175411",
"field": "pttl"},
# 1#送水泵
"ZNPD_EGLSC_d0522150519__EPf": {"cid": 8, "sid": "EGLSC_d0522150519",
"field": "kwhttl_p"},
"ZNPD_EGLSC_d0522150519__PF": {"cid": 8, "sid": "EGLSC_d0522150519",
"field": "costtl"},
"ZNPD_EGLSC_d0522150519__P": {"cid": 8, "sid": "EGLSC_d0522150519",
"field": "pttl"},
# 2#送水泵
"ZNPD_EGLSC_d0522150504__EPf": {"cid": 8, "sid": "EGLSC_d0522150504",
"field": "kwhttl_p"},
"ZNPD_EGLSC_d0522150504__PF": {"cid": 8, "sid": "EGLSC_d0522150504",
"field": "costtl"},
"ZNPD_EGLSC_d0522150504__P": {"cid": 8, "sid": "EGLSC_d0522150504",
"field": "pttl"},
# 3#送水泵 (注意此处电能sid与功率因数/功率的sid不同)
"ZNPD_EGLSC_d0522150240__EPf": {"cid": 8, "sid": "EGLSC_d0522150240",
"field": "kwhttl_p"},
"ZNPD_EGLSC_d0522150240__PF": {"cid": 8, "sid": "EGLSC_d0522150240",
"field": "costtl"},
"ZNPD_EGLSC_d0522150240__P": {"cid": 8, "sid": "EGLSC_d0522150240",
"field": "pttl"},
# 4#送水泵
"ZNPD_EGLSC_d0522150111__EPf": {"cid": 8, "sid": "EGLSC_d0522150111",
"field": "kwhttl_p"},
"ZNPD_EGLSC_d0522150111__PF": {"cid": 8, "sid": "EGLSC_d0522150111",
"field": "costtl"},
"ZNPD_EGLSC_d0522150111__P": {"cid": 8, "sid": "EGLSC_d0522150111",
"field": "pttl"},
# 5#送水泵 (注意此处电能sid与功率因数/功率的sid不同)
"ZNPD_EGLSC_d0522150221__EPf": {"cid": 8, "sid": "EGLSC_d0522150221",
"field": "kwhttl_p"},
"ZNPD_EGLSC_d0522150221__PF": {"cid": 8, "sid": "EGLSC_d0522150221",
"field": "costtl"},
"ZNPD_EGLSC_d0522150221__P": {"cid": 8, "sid": "EGLSC_d0522150221",
"field": "pttl"},
# 6#送水泵
"ZNPD_EGLSC_d0522150448__EPf": {"cid": 8, "sid": "EGLSC_d0522150448",
"field": "kwhttl_p"},
"ZNPD_EGLSC_d0522150448__PF": {"cid": 8, "sid": "EGLSC_d0522150448",
"field": "costtl"},
"ZNPD_EGLSC_d0522150448__P": {"cid": 8, "sid": "EGLSC_d0522150448",
"field": "pttl"},
# 送水泵房照明
"ZNPD_EGLSC_d0522150344__EPf": {"cid": 8, "sid": "EGLSC_d0522150344",
"field": "kwhttl_p"},
"ZNPD_EGLSC_d0522150344__PF": {"cid": 8, "sid": "EGLSC_d0522150344",
"field": "costtl"},
"ZNPD_EGLSC_d0522150344__P": {"cid": 8, "sid": "EGLSC_d0522150344",
"field": "pttl"},
# 综合楼
"ZNPD_EGLSC_d0522150316__EPf": {"cid": 8, "sid": "EGLSC_d0522150316",
"field": "kwhttl_p"},
"ZNPD_EGLSC_d0522150316__PF": {"cid": 8, "sid": "EGLSC_d0522150316",
"field": "costtl"},
"ZNPD_EGLSC_d0522150316__P": {"cid": 8, "sid": "EGLSC_d0522150316",
"field": "pttl"},
# 水池
"ZNPD_EGLSC_d0522150418__EPf": {"cid": 8, "sid": "EGLSC_d0522150418",
"field": "kwhttl_p"},
"ZNPD_EGLSC_d0522150418__PF": {"cid": 8, "sid": "EGLSC_d0522150418",
"field": "costtl"},
"ZNPD_EGLSC_d0522150418__P": {"cid": 8, "sid": "EGLSC_d0522150418",
"field": "pttl"},
# 值班室+加药间
"ZNPD_EGLSC_d0522150639__EPf": {"cid": 8, "sid": "EGLSC_d0522150639",
"field": "kwhttl_p"},
"ZNPD_EGLSC_d0522150639__PF": {"cid": 8, "sid": "EGLSC_d0522150639",
"field": "costtl"},
"ZNPD_EGLSC_d0522150639__P": {"cid": 8, "sid": "EGLSC_d0522150639",
"field": "pttl"},
},
902: {
# 田心水厂
# 1#总进线总电表
"50KVAJXZG_Ep": {"cid": 11, "sid": "TX_50KVAJXZG",
"field": "kwhttl_p"},
"50KVAJXZG_PSum": {"cid": 11, "sid": "TX_50KVAJXZG",
"field": "costtl"},
"50KVAJXZG_P": {"cid": 11, "sid": "TX_50KVAJXZG", "field": "pttl"},
# 2#总进线总电表
"630KVAJXZG_Ep": {"cid": 11, "sid": "TX_630KVAJXZG",
"field": "kwhttl_p"},
"630KVAJXZG_PSum": {"cid": 11, "sid": "TX_630KVAJXZG",
"field": "costtl"},
"630KVAJXZG_P": {"cid": 11, "sid": "TX_630KVAJXZG", "field": "pttl"},
},
904: {
# 坑梓水厂
# 1#反冲提升泵
"ZNPD_KZ_d0518111431__EPf": {"cid": 12, "sid": "KZ_d0518111431",
"field": "kwhttl_p"},
"ZNPD_KZ_d0518111431__PF": {"cid": 12, "sid": "KZ_d0518111431",
"field": "costtl"},
"ZNPD_KZ_d0518111431__P": {"cid": 12, "sid": "KZ_d0518111431",
"field": "pttl"},
# 2#反冲提升泵
"ZNPD_KZ_d0518111451__EPf": {"cid": 12, "sid": "KZ_d0518111451",
"field": "kwhttl_p"},
"ZNPD_KZ_d0518111451__PF": {"cid": 12, "sid": "KZ_d0518111451",
"field": "costtl"},
"ZNPD_KZ_d0518111451__P": {"cid": 12, "sid": "KZ_d0518111451",
"field": "pttl"},
# 3#反冲提升泵
"ZNPD_KZ_d0518111501__EPf": {"cid": 12, "sid": "KZ_d0518111501",
"field": "kwhttl_p"},
"ZNPD_KZ_d0518111501__PF": {"cid": 12, "sid": "KZ_d0518111501",
"field": "costtl"},
"ZNPD_KZ_d0518111501__P": {"cid": 12, "sid": "KZ_d0518111501",
"field": "pttl"},
# 石灰料仓
"ZNPD_KZ_d0518153303__EPf": {"cid": 12, "sid": "KZ_d0518153303",
"field": "kwhttl_p"},
"ZNPD_KZ_d0518153303__PF": {"cid": 12, "sid": "KZ_d0518153303",
"field": "costtl"},
"ZNPD_KZ_d0518153303__P": {"cid": 12, "sid": "KZ_d0518153303",
"field": "pttl"},
# 鼓风机和矾泵
"ZNPD_KZ_d0518162643__EPf": {"cid": 12, "sid": "KZ_d0518162643",
"field": "kwhttl_p"},
"ZNPD_KZ_d0518162643__PF": {"cid": 12, "sid": "KZ_d0518162643",
"field": "costtl"},
"ZNPD_KZ_d0518162643__P": {"cid": 12, "sid": "KZ_d0518162643",
"field": "pttl"},
# 1#送水泵
"SSBF_B1_YGDD_AI": {"cid": 12, "sid": "KZ_SSBF_B1",
"field": "kwhttl_p"},
"SSBF_B1DB_COSΦ_AI": {"cid": 12, "sid": "KZ_SSBF_B1",
"field": "costtl"},
"SSBF_B1DB_PZ_AI": {"cid": 12, "sid": "KZ_SSBF_B1", "field": "pttl"},
# 2#送水泵
"SSBF_B2_YGDD_AI": {"cid": 12, "sid": "KZ_SSBF_B2",
"field": "kwhttl_p"},
"SSBF_B2DB_COSΦ_AI": {"cid": 12, "sid": "KZ_SSBF_B2",
"field": "costtl"},
"SSBF_B2DB_PZ_AI": {"cid": 12, "sid": "KZ_SSBF_B2", "field": "pttl"},
# 3#送水泵
"SSBF_B3_YGDD_AI": {"cid": 12, "sid": "KZ_SSBF_B3",
"field": "kwhttl_p"},
"SSBF_B3DB_COSΦ_AI": {"cid": 12, "sid": "KZ_SSBF_B3",
"field": "costtl"},
"SSBF_B3DB_PZ_AI": {"cid": 12, "sid": "KZ_SSBF_B3", "field": "pttl"},
# 4#送水泵
"SSBF_B4_YGDD_AI": {"cid": 12, "sid": "KZ_SSBF_B4",
"field": "kwhttl_p"},
"SSBF_B4DB_COSΦ_AI": {"cid": 12, "sid": "KZ_SSBF_B4",
"field": "costtl"},
"SSBF_B4DB_PZ_AI": {"cid": 12, "sid": "KZ_SSBF_B4", "field": "pttl"},
# 回收池电表
"SSBF_HSC_YGDD_AI": {"cid": 12, "sid": "KZ_SSBF_HSC",
"field": "kwhttl_p"},
"SSBF_HSCDB_COSΦ_AI": {"cid": 12, "sid": "KZ_SSBF_HSC",
"field": "costtl"},
"SSBF_HSCDB_PZ_AI": {"cid": 12, "sid": "KZ_SSBF_HSC", "field": "pttl"},
# 2#315KVA低压进线总电表
"PD_P0_PE": {"cid": 12, "sid": "KZ_PD_P0", "field": "kwhttl_p"},
"PD_P0_PF": {"cid": 12, "sid": "KZ_PD_P0", "field": "costtl"},
"PD_P0_PT": {"cid": 12, "sid": "KZ_PD_P0", "field": "pttl"},
# 臭氧发生装置
"PD_P3_PE": {"cid": 12, "sid": "KZ_PD_P3", "field": "kwhttl_p"},
"PD_P3_PF": {"cid": 12, "sid": "KZ_PD_P3", "field": "costtl"},
"PD_P3_PT": {"cid": 12, "sid": "KZ_PD_P3", "field": "pttl"},
# 除臭装置
"PD_P1_PE": {"cid": 12, "sid": "KZ_PD_P1", "field": "kwhttl_p"},
"PD_P1_PF": {"cid": 12, "sid": "KZ_PD_P1", "field": "costtl"},
"PD_P1_PT": {"cid": 12, "sid": "KZ_PD_P1", "field": "pttl"},
# 余泥处理系统
"PD_P2_PE": {"cid": 12, "sid": "KZ_PD_P2", "field": "kwhttl_p"},
"PD_P2_PF": {"cid": 12, "sid": "KZ_PD_P2", "field": "costtl"},
"PD_P2_PT": {"cid": 12, "sid": "KZ_PD_P2", "field": "pttl"},
},
}
...@@ -3,71 +3,158 @@ ...@@ -3,71 +3,158 @@
DATE:2026/4/22 14:58 DATE:2026/4/22 14:58
""" """
import json
import time
import asyncio import asyncio
import signal import signal
import pendulum
from utils.time_format import CST, YMD_Hms
from gmqtt import Client as MQTTClient from gmqtt import Client as MQTTClient
from ems_water_grp.constants import SCADA_FIELDS_MAP
from utils.utils import admin_client_id from utils.utils import admin_client_id, mqtt_pwd
from infra.config.settings import SETTING
from infra.logger.logger import Logger from infra.logger.logger import Logger
log_name = f"meter_3rd" log_name = f"meter3rd_forward"
Logger.init_logger_path(f"./ems_water_grp", f"{log_name}.log", log_name) Logger.init_logger_path(f"./ems_water_grp", f"{log_name}.log", log_name)
logger = Logger.getLogger(log_name) logger = Logger.getLogger(log_name)
MQTT_BROKER = "172.18.4.82"
MQTT_USER = "nyconsumer"
MQTT_PWD = "nyconsumer!321"
TOPIC = "factory/data"
class Meter3rdForward:
sub_host = "172.18.4.82"
sub_uname = "nyconsumer"
sub_pwd = "nyconsumer!321"
sub_topic = "factory/data"
class Meter3rdSrv: pub_username = "pot_emqx_super"
topic = "factory/data" pub_topic_prefix = "eems/td/"
def __init__(self): def __init__(self):
self.mqtt_client = None self.client_sub = None
self.client_pub = None
self.stop_event = asyncio.Event() self.stop_event = asyncio.Event()
self.d_last_msg = {}
@property
def pub_pwd(self):
return mqtt_pwd(self.pub_username)
@staticmethod @staticmethod
def on_subscribe(client, mid, qos, properties): def on_sub_subscribe(client, mid, qos, properties):
logger.info(f"Sub to {TOPIC} success, mid: {mid}") logger.info(f"Sub to {Meter3rdForward.sub_topic} success, mid: {mid}")
@staticmethod @staticmethod
def on_connect(client, flags, rc, properties): def on_sub_connect(client, flags, rc, properties):
logger.info(f"Connected to EMQX success, rc: {rc}") logger.info(f"Connected to {Meter3rdForward.sub_host} success rc:{rc}")
client.subscribe(TOPIC, qos=1) client.subscribe(Meter3rdForward.sub_topic, qos=1)
@staticmethod @staticmethod
def on_disconnect(client, packet, exc=None): def on_sub_disconnect(client, packet, exc=None):
logger.warning(f"Disconnected from EMQX, exc: {exc}") logger.warning(f"Disconnected from {Meter3rdForward.sub_host} {exc}")
@staticmethod @staticmethod
def on_message(client, topic, payload, qos, properties): def on_pub_connect(client, flags, rc, properties):
payload = payload.decode("utf-8") logger.info(f"Connected to {SETTING.mqtt_host} success, rc: {rc}")
logger.info(f"Received message: topic={topic}, payload={payload}")
@staticmethod
def on_pub_disconnect(client, packet, exc=None):
logger.warning(f"Disconnected from EMQX {SETTING.mqtt_host} exc {exc}")
def on_sub_message(self, client, topic, payload, qos, properties):
try:
msg_str = payload.decode("utf-8")
data = json.loads(msg_str)
cid = data.get("fId")
if cid:
self.d_last_msg[cid] = msg_str
except Exception as e:
logger.error(f"Decode msg:{payload} error: {e}")
async def parse_and_forward(self, cid, raw_payload):
""" 重新封装消息,推送至EMQX """
try:
d_pyds = {}
data = json.loads(raw_payload)
ts = pendulum.from_timestamp(data["time"], tz=CST).format(YMD_Hms)
for item in data["items"]:
try:
scada_id = item["n"]
if scada_id in SCADA_FIELDS_MAP[cid].keys():
tmp = SCADA_FIELDS_MAP[cid][scada_id]
mid = tmp["sid"]
tag = {tmp["field"]: item["v"]}
if mid in d_pyds:
d_pyds[mid]["images"][0]["tags"].update(tag)
else:
d_pyds[mid] = {"cid": cid, "mid": mid, "nm": mid,
"images": [{"t": ts, "tags": tag}]}
except Exception as e:
continue
for sid, payload in d_pyds.items():
logger.info(f"{sid}: {payload}")
self.client_pub.publish(
f"{self.pub_topic_prefix}/load_ele/{sid}",
json.dumps(payload), qos=1)
except Exception as e:
logger.error(f"parse_and_forward error: {e}")
async def snapshot_sampler(self):
while not self.stop_event.is_set():
try:
sec_to_min = 60 - (time.time() % 60) + 5
await asyncio.sleep(sec_to_min)
if not self.d_last_msg:
continue
cur_batch = dict(self.d_last_msg)
self.d_last_msg.clear()
for cid, raw_msg in cur_batch.items():
if cid in SCADA_FIELDS_MAP:
await self.parse_and_forward(cid, raw_msg)
except Exception as e:
logger.error(f"Processing loop error: {e}")
await asyncio.sleep(1)
async def stop(self): async def stop(self):
logger.info("Shutting down Service...") logger.info("Shutting down Meter3rdForward Service...")
if self.mqtt_client: if self.client_sub:
await self.mqtt_client.disconnect() await self.client_sub.disconnect()
if self.client_pub:
await self.client_pub.disconnect()
self.stop_event.set() self.stop_event.set()
async def start(self): async def start(self):
self.mqtt_client = MQTTClient(admin_client_id("WaterGrpService")) self.client_sub = MQTTClient(admin_client_id("Meter3rdForward"))
self.mqtt_client.set_auth_credentials(MQTT_USER, MQTT_PWD) self.client_sub.set_auth_credentials(self.sub_uname, self.sub_pwd)
self.client_sub.on_connect = self.on_sub_connect
self.client_sub.on_subscribe = self.on_sub_subscribe
self.client_sub.on_disconnect = self.on_sub_disconnect
self.client_sub.on_message = self.on_sub_message
self.client_pub = MQTTClient(admin_client_id("Meter3rdForward"))
self.client_pub.set_auth_credentials(self.pub_username, self.pub_pwd)
self.client_pub.on_connect = self.on_pub_connect
self.client_pub.on_disconnect = self.on_pub_disconnect
self.mqtt_client.on_connect = self.on_connect await asyncio.gather(
self.mqtt_client.on_subscribe = self.on_subscribe self.client_sub.connect(self.sub_host, 1883),
self.mqtt_client.on_disconnect = self.on_disconnect self.client_pub.connect(SETTING.mqtt_host, SETTING.mqtt_port)
self.mqtt_client.on_message = self.on_message )
await self.mqtt_client.connect(MQTT_BROKER, 1883) asyncio.create_task(self.snapshot_sampler())
await self.stop_event.wait() await self.stop_event.wait()
async def main(): async def main():
srv = Meter3rdSrv() srv = Meter3rdForward()
loop = asyncio.get_event_loop() loop = asyncio.get_event_loop()
for sig in (signal.SIGINT, signal.SIGTERM): for sig in (signal.SIGINT, signal.SIGTERM):
loop.add_signal_handler(sig, lambda: asyncio.create_task(srv.stop())) loop.add_signal_handler(sig, lambda: asyncio.create_task(srv.stop()))
...@@ -76,4 +163,7 @@ async def main(): ...@@ -76,4 +163,7 @@ async def main():
if __name__ == '__main__': if __name__ == '__main__':
try:
asyncio.run(main()) asyncio.run(main())
except KeyboardInterrupt:
pass
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment