From e07d867a15655a8873a8ca8863fe36a318d48e03 Mon Sep 17 00:00:00 2001 From: Nico Melone Date: Tue, 2 Dec 2025 14:15:23 -0600 Subject: [PATCH] updated leak detection --- .../thingsboard/pub/sendData.py | 62 +- .../tag_dump_2025_December_02.json | 2392 +++++++++++++++++ .../fk_overflow_pump/thingsboard/measure.csv | 36 + .../thingsboard/measure_no_pond2.csv | 25 + .../fk_overflow_pump/thingsboard/measures.csv | 8 - .../thingsboard/tag_dump_2025_October_23.json | 1433 ++++++++++ .../flowmeterskid_registers_epd.csv | 15 + .../thingsboard/flowmeterskid_tb_v6.cfg | 631 +++++ code snippets/getPLCData.ipynb | 161 +- code snippets/parseIncomingIPs.ipynb | 221 ++ 10 files changed, 4917 insertions(+), 67 deletions(-) create mode 100644 Pub_Sub/fk_leak_detection/thingsboard/tag_dump_2025_December_02.json create mode 100644 Pub_Sub/fk_overflow_pump/thingsboard/measure.csv create mode 100644 Pub_Sub/fk_overflow_pump/thingsboard/measure_no_pond2.csv delete mode 100644 Pub_Sub/fk_overflow_pump/thingsboard/measures.csv create mode 100644 Pub_Sub/fk_overflow_pump/thingsboard/tag_dump_2025_October_23.json create mode 100644 Pub_Sub/flowmeterskid/thingsboard/flowmeterskid_registers_epd.csv create mode 100644 Pub_Sub/flowmeterskid/thingsboard/flowmeterskid_tb_v6.cfg create mode 100644 code snippets/parseIncomingIPs.ipynb diff --git a/Pub_Sub/fk_leak_detection/thingsboard/pub/sendData.py b/Pub_Sub/fk_leak_detection/thingsboard/pub/sendData.py index f685668..6ba7e53 100644 --- a/Pub_Sub/fk_leak_detection/thingsboard/pub/sendData.py +++ b/Pub_Sub/fk_leak_detection/thingsboard/pub/sendData.py @@ -12,6 +12,14 @@ class RuntimeStats: self.currentRun = 0 self.today = "" self.todayString = "" + self.filePath = "/var/user/files/runtimestats.json" + + def __init__(self, filePath:str): + self.runs = {} + self.currentRun = 0 + self.today = "" + self.todayString = "" + self.filePath = filePath def manageTime(self): if self.todayString != dt.strftime(dt.today(), "%Y-%m-%d"): @@ -136,7 +144,7 @@ class RuntimeStats: raise Exception("Day can not be None") logger.debug("removing day {}".format(day)) del self.runs[day] - self.saveDataToFile() + self.saveDataToFile(filePath=self.filePath) def convertSecondstoHours(self, seconds): return round(seconds / (60*60),2) @@ -145,7 +153,7 @@ class RuntimeStats: logger.debug("clearing database") try: for day in list(self.runs.keys()): - self.removeDay(day=day) + self.removeDay(day=day, filePath=self.filePath) except Exception as e: logger.error(e) return False @@ -193,9 +201,15 @@ class RuntimeStats: except Exception as e: logger.error(e) -rts = RuntimeStats() -rts.loadDataFromFile() -rts.saveDataToFile() +p001_path = "/var/user/files/runtimestats_p001.json" +rts1 = RuntimeStats("/var/user/files/runtimestats_p001.json") +rts1.loadDataFromFile(p001_path) +rts1.saveDataToFile(p001_path) + +p002_path = "/var/user/files/runtimestats_p002.json" +rts2 = RuntimeStats("/var/user/files/runtimestats_p002.json") +rts2.loadDataFromFile(p002_path) +rts2.saveDataToFile(p002_path) def reboot(): # basic = Basic() @@ -389,10 +403,11 @@ def controlName(name): def sendData(message): # logger.info(message) - rts.loadDataFromFile() + rts1.loadDataFromFile() + rts2.loadDataFromFile() grouped_data = {} grouped_attributes = {} - now = (round(dt.timestamp(dt.now())/600)*600)*1000 + now = (round(dt.timestamp(dt.now())/60)*60)*1000 payload = {"ts": now, "values": {}} attributes_payload = {} logger.debug(message) @@ -423,18 +438,29 @@ def sendData(message): if health: if "_spt" in name: grouped_attributes[ctrlName][name] = value - if name in ["p001_run"]: - rts.manageTime() - if value == 1 and not rts.runs[rts.todayString]["run_" + str(rts.currentRun)]["start"]: - rts.startRun() - rts.saveDataToFile() - elif value == 0 and rts.runs[rts.todayString]["run_" + str(rts.currentRun)]["start"] and not rts.runs[rts.todayString]["run_" + str(rts.currentRun)]["end"]: - rts.endRun() - rts.saveDataToFile() - grouped_data[ctrlName][name + "_today_running_hours"] = rts.calculateRunTimeDay() - grouped_data[ctrlName][name + "_month_running_hours"] = rts.calculateRunTimeMultiDay(numDays=dt.today().day) else: grouped_data[ctrlName][name] = value + if name in ["p001_run"]: + rts1.manageTime() + if value == 1 and not rts1.runs[rts1.todayString]["run_" + str(rts1.currentRun)]["start"]: + rts1.startRun() + rts1.saveDataToFile(p001_path) + elif value == 0 and rts1.runs[rts1.todayString]["run_" + str(rts1.currentRun)]["start"] and not rts1.runs[rts1.todayString]["run_" + str(rts1.currentRun)]["end"]: + rts1.endRun() + rts1.saveDataToFile() + grouped_data[ctrlName][name + "_today_running_hours"] = rts1.calculateRunTimeDay() + grouped_data[ctrlName][name + "_month_running_hours"] = rts1.calculateRunTimeMultiDay(numDays=dt.today().day) + if name in ["p002_run"]: + rts2.manageTime() + if value == 1 and not rts2.runs[rts2.todayString]["run_" + str(rts2.currentRun)]["start"]: + rts2.startRun() + rts2.saveDataToFile(p002_path) + elif value == 0 and rts2.runs[rts2.todayString]["run_" + str(rts2.currentRun)]["start"] and not rts2.runs[rts2.todayString]["run_" + str(rts2.currentRun)]["end"]: + rts2.endRun() + rts2.saveDataToFile() + grouped_data[ctrlName][name + "_today_running_hours"] = rts2.calculateRunTimeDay() + grouped_data[ctrlName][name + "_month_running_hours"] = rts2.calculateRunTimeMultiDay(numDays=dt.today().day) + except Exception as e: logger.error(e) @@ -460,7 +486,7 @@ def sendData(message): time.sleep(2) attributes_payload["latestReportTime"] = ( - round(dt.timestamp(dt.now())/600)*600)*1000 + round(dt.timestamp(dt.now())/60)*60)*1000 for chunk in chunk_payload(payload=attributes_payload): publish("v1/devices/me/attributes", json.dumps(chunk), __qos__) time.sleep(2) diff --git a/Pub_Sub/fk_leak_detection/thingsboard/tag_dump_2025_December_02.json b/Pub_Sub/fk_leak_detection/thingsboard/tag_dump_2025_December_02.json new file mode 100644 index 0000000..f7cab64 --- /dev/null +++ b/Pub_Sub/fk_leak_detection/thingsboard/tag_dump_2025_December_02.json @@ -0,0 +1,2392 @@ +{ + "_IO_EM_DO_00": { + "tag_name": "_IO_EM_DO_00", + "dim": 0, + "alias": true, + "instance_id": 1, + "symbol_address": 1044, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DO_01": { + "tag_name": "_IO_EM_DO_01", + "dim": 0, + "alias": true, + "instance_id": 2, + "symbol_address": 1045, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DO_02": { + "tag_name": "_IO_EM_DO_02", + "dim": 0, + "alias": true, + "instance_id": 3, + "symbol_address": 1046, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DO_03": { + "tag_name": "_IO_EM_DO_03", + "dim": 0, + "alias": true, + "instance_id": 4, + "symbol_address": 1047, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DO_04": { + "tag_name": "_IO_EM_DO_04", + "dim": 0, + "alias": true, + "instance_id": 5, + "symbol_address": 1048, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DO_05": { + "tag_name": "_IO_EM_DO_05", + "dim": 0, + "alias": true, + "instance_id": 6, + "symbol_address": 1049, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DO_06": { + "tag_name": "_IO_EM_DO_06", + "dim": 0, + "alias": true, + "instance_id": 7, + "symbol_address": 1050, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DI_00": { + "tag_name": "_IO_EM_DI_00", + "dim": 0, + "alias": true, + "instance_id": 8, + "symbol_address": 1051, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DI_01": { + "tag_name": "_IO_EM_DI_01", + "dim": 0, + "alias": true, + "instance_id": 9, + "symbol_address": 1052, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DI_02": { + "tag_name": "_IO_EM_DI_02", + "dim": 0, + "alias": true, + "instance_id": 10, + "symbol_address": 1053, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DI_03": { + "tag_name": "_IO_EM_DI_03", + "dim": 0, + "alias": true, + "instance_id": 11, + "symbol_address": 1054, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DI_04": { + "tag_name": "_IO_EM_DI_04", + "dim": 0, + "alias": true, + "instance_id": 12, + "symbol_address": 1055, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DI_05": { + "tag_name": "_IO_EM_DI_05", + "dim": 0, + "alias": true, + "instance_id": 13, + "symbol_address": 1056, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DI_06": { + "tag_name": "_IO_EM_DI_06", + "dim": 0, + "alias": true, + "instance_id": 14, + "symbol_address": 1057, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DI_07": { + "tag_name": "_IO_EM_DI_07", + "dim": 0, + "alias": true, + "instance_id": 15, + "symbol_address": 1058, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DI_08": { + "tag_name": "_IO_EM_DI_08", + "dim": 0, + "alias": true, + "instance_id": 16, + "symbol_address": 1059, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DI_09": { + "tag_name": "_IO_EM_DI_09", + "dim": 0, + "alias": true, + "instance_id": 17, + "symbol_address": 1060, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DI_10": { + "tag_name": "_IO_EM_DI_10", + "dim": 0, + "alias": true, + "instance_id": 18, + "symbol_address": 1061, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DI_11": { + "tag_name": "_IO_EM_DI_11", + "dim": 0, + "alias": true, + "instance_id": 19, + "symbol_address": 1062, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_AI_00": { + "tag_name": "_IO_EM_AI_00", + "dim": 0, + "alias": true, + "instance_id": 20, + "symbol_address": 1064, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "UINT", + "data_type_name": "UINT", + "tag_type": "atomic" + }, + "_IO_EM_AI_01": { + "tag_name": "_IO_EM_AI_01", + "dim": 0, + "alias": true, + "instance_id": 21, + "symbol_address": 1066, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "UINT", + "data_type_name": "UINT", + "tag_type": "atomic" + }, + "_IO_EM_AI_02": { + "tag_name": "_IO_EM_AI_02", + "dim": 0, + "alias": true, + "instance_id": 22, + "symbol_address": 1068, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "UINT", + "data_type_name": "UINT", + "tag_type": "atomic" + }, + "_IO_EM_AI_03": { + "tag_name": "_IO_EM_AI_03", + "dim": 0, + "alias": true, + "instance_id": 23, + "symbol_address": 1070, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "UINT", + "data_type_name": "UINT", + "tag_type": "atomic" + }, + "_IO_EM_AO_00": { + "tag_name": "_IO_EM_AO_00", + "dim": 0, + "alias": true, + "instance_id": 24, + "symbol_address": 1072, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "UINT", + "data_type_name": "UINT", + "tag_type": "atomic" + }, + "_IO_P1_AI_00": { + "tag_name": "_IO_P1_AI_00", + "dim": 0, + "alias": true, + "instance_id": 25, + "symbol_address": 1074, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "UINT", + "data_type_name": "UINT", + "tag_type": "atomic" + }, + "_IO_P1_AI_01": { + "tag_name": "_IO_P1_AI_01", + "dim": 0, + "alias": true, + "instance_id": 26, + "symbol_address": 1076, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "UINT", + "data_type_name": "UINT", + "tag_type": "atomic" + }, + "_IO_P1_AI_02": { + "tag_name": "_IO_P1_AI_02", + "dim": 0, + "alias": true, + "instance_id": 27, + "symbol_address": 1078, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "UINT", + "data_type_name": "UINT", + "tag_type": "atomic" + }, + "_IO_P1_AI_03": { + "tag_name": "_IO_P1_AI_03", + "dim": 0, + "alias": true, + "instance_id": 28, + "symbol_address": 1080, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "UINT", + "data_type_name": "UINT", + "tag_type": "atomic" + }, + "Leak_1_Hi_Set": { + "tag_name": "Leak_1_Hi_Set", + "dim": 0, + "alias": true, + "instance_id": 29, + "symbol_address": 1124, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Leak_1_Hi_Reset": { + "tag_name": "Leak_1_Hi_Reset", + "dim": 0, + "alias": true, + "instance_id": 30, + "symbol_address": 1125, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Leak_1_Hi_Alarm": { + "tag_name": "Leak_1_Hi_Alarm", + "dim": 0, + "alias": true, + "instance_id": 31, + "symbol_address": 1126, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Leak_2_Hi_Set": { + "tag_name": "Leak_2_Hi_Set", + "dim": 0, + "alias": true, + "instance_id": 32, + "symbol_address": 1127, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Leak_2_Hi_Reset": { + "tag_name": "Leak_2_Hi_Reset", + "dim": 0, + "alias": true, + "instance_id": 33, + "symbol_address": 1128, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Leak_2_Hi_Alarm": { + "tag_name": "Leak_2_Hi_Alarm", + "dim": 0, + "alias": true, + "instance_id": 34, + "symbol_address": 1129, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Leak_1_Lo_Set": { + "tag_name": "Leak_1_Lo_Set", + "dim": 0, + "alias": true, + "instance_id": 35, + "symbol_address": 1130, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Leak_1_Lo_Reset": { + "tag_name": "Leak_1_Lo_Reset", + "dim": 0, + "alias": true, + "instance_id": 36, + "symbol_address": 1131, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Leak_1_Lo_Alarm": { + "tag_name": "Leak_1_Lo_Alarm", + "dim": 0, + "alias": true, + "instance_id": 37, + "symbol_address": 1132, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Leak_2_Lo_Set": { + "tag_name": "Leak_2_Lo_Set", + "dim": 0, + "alias": true, + "instance_id": 38, + "symbol_address": 1133, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Leak_2_Lo_Reset": { + "tag_name": "Leak_2_Lo_Reset", + "dim": 0, + "alias": true, + "instance_id": 39, + "symbol_address": 1134, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Leak_2_Lo_Alarm": { + "tag_name": "Leak_2_Lo_Alarm", + "dim": 0, + "alias": true, + "instance_id": 40, + "symbol_address": 1135, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Leak_1_Hi_Alarm_Enable": { + "tag_name": "Leak_1_Hi_Alarm_Enable", + "dim": 0, + "alias": true, + "instance_id": 41, + "symbol_address": 1136, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Leak_1_Hi_Alarm_Enabled": { + "tag_name": "Leak_1_Hi_Alarm_Enabled", + "dim": 0, + "alias": true, + "instance_id": 42, + "symbol_address": 1137, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P002_RUN_FAIL_ALARM": { + "tag_name": "P002_RUN_FAIL_ALARM", + "dim": 0, + "alias": true, + "instance_id": 43, + "symbol_address": 1138, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P002_OVERLOAD_ALARM": { + "tag_name": "P002_OVERLOAD_ALARM", + "dim": 0, + "alias": true, + "instance_id": 44, + "symbol_address": 1139, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P001_RUN_FAIL_ALARM": { + "tag_name": "P001_RUN_FAIL_ALARM", + "dim": 0, + "alias": true, + "instance_id": 45, + "symbol_address": 1140, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P001_OVERLOAD_ALARM": { + "tag_name": "P001_OVERLOAD_ALARM", + "dim": 0, + "alias": true, + "instance_id": 46, + "symbol_address": 1141, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P001_AUTO_FBK": { + "tag_name": "P001_AUTO_FBK", + "dim": 0, + "alias": true, + "instance_id": 47, + "symbol_address": 1142, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P001_HAND_FBK": { + "tag_name": "P001_HAND_FBK", + "dim": 0, + "alias": true, + "instance_id": 48, + "symbol_address": 1143, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P001_START_BTN_FBK": { + "tag_name": "P001_START_BTN_FBK", + "dim": 0, + "alias": true, + "instance_id": 49, + "symbol_address": 1144, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P001_OVERLOAD_FBK": { + "tag_name": "P001_OVERLOAD_FBK", + "dim": 0, + "alias": true, + "instance_id": 50, + "symbol_address": 1145, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P001_RUN_FBK": { + "tag_name": "P001_RUN_FBK", + "dim": 0, + "alias": true, + "instance_id": 51, + "symbol_address": 1146, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P002_AUTO_FBK": { + "tag_name": "P002_AUTO_FBK", + "dim": 0, + "alias": true, + "instance_id": 52, + "symbol_address": 1147, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P002_HAND_FBK": { + "tag_name": "P002_HAND_FBK", + "dim": 0, + "alias": true, + "instance_id": 53, + "symbol_address": 1148, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P002_START_BTN_FBK": { + "tag_name": "P002_START_BTN_FBK", + "dim": 0, + "alias": true, + "instance_id": 54, + "symbol_address": 1149, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P002_OVERLOAD_FBK": { + "tag_name": "P002_OVERLOAD_FBK", + "dim": 0, + "alias": true, + "instance_id": 55, + "symbol_address": 1150, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P002_RUN_FBK": { + "tag_name": "P002_RUN_FBK", + "dim": 0, + "alias": true, + "instance_id": 56, + "symbol_address": 1151, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P001_RUN_CMD": { + "tag_name": "P001_RUN_CMD", + "dim": 0, + "alias": true, + "instance_id": 57, + "symbol_address": 1152, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P002_RUN_CMD": { + "tag_name": "P002_RUN_CMD", + "dim": 0, + "alias": true, + "instance_id": 58, + "symbol_address": 1153, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "RESET": { + "tag_name": "RESET", + "dim": 0, + "alias": true, + "instance_id": 59, + "symbol_address": 1154, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Leak_1_Lev": { + "tag_name": "Leak_1_Lev", + "dim": 0, + "alias": true, + "instance_id": 60, + "symbol_address": 1160, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_ScaledMin": { + "tag_name": "Leak_1_ScaledMin", + "dim": 0, + "alias": true, + "instance_id": 61, + "symbol_address": 1164, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_ScaledMax": { + "tag_name": "Leak_1_ScaledMax", + "dim": 0, + "alias": true, + "instance_id": 62, + "symbol_address": 1168, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_Lev": { + "tag_name": "Leak_2_Lev", + "dim": 0, + "alias": true, + "instance_id": 63, + "symbol_address": 1172, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_ScaledMin": { + "tag_name": "Leak_2_ScaledMin", + "dim": 0, + "alias": true, + "instance_id": 64, + "symbol_address": 1176, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_ScaledMax": { + "tag_name": "Leak_2_ScaledMax", + "dim": 0, + "alias": true, + "instance_id": 65, + "symbol_address": 1180, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_Hi_Setpoint": { + "tag_name": "Leak_1_Hi_Setpoint", + "dim": 0, + "alias": true, + "instance_id": 66, + "symbol_address": 1184, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_Hi_Clr_Setpoint": { + "tag_name": "Leak_1_Hi_Clr_Setpoint", + "dim": 0, + "alias": true, + "instance_id": 67, + "symbol_address": 1188, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_Hi_Setpoint": { + "tag_name": "Leak_2_Hi_Setpoint", + "dim": 0, + "alias": true, + "instance_id": 68, + "symbol_address": 1192, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_Hi_Clr_Setpoint": { + "tag_name": "Leak_2_Hi_Clr_Setpoint", + "dim": 0, + "alias": true, + "instance_id": 69, + "symbol_address": 1196, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_CU_Ft": { + "tag_name": "Leak_1_CU_Ft", + "dim": 0, + "alias": true, + "instance_id": 70, + "symbol_address": 1200, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_Cubic_Feet_To_Barrels": { + "tag_name": "Leak_1_Cubic_Feet_To_Barrels", + "dim": 0, + "alias": true, + "instance_id": 71, + "symbol_address": 1204, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_Total_Barrels": { + "tag_name": "Leak_1_Total_Barrels", + "dim": 0, + "alias": true, + "instance_id": 72, + "symbol_address": 1208, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_Lo_Setpoint": { + "tag_name": "Leak_1_Lo_Setpoint", + "dim": 0, + "alias": true, + "instance_id": 73, + "symbol_address": 1212, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_Lev_Temp": { + "tag_name": "Leak_1_Lev_Temp", + "dim": 0, + "alias": true, + "instance_id": 74, + "symbol_address": 1216, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_Lo_Clr_Setpoint": { + "tag_name": "Leak_1_Lo_Clr_Setpoint", + "dim": 0, + "alias": true, + "instance_id": 75, + "symbol_address": 1220, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_Lo_Setpoint": { + "tag_name": "Leak_2_Lo_Setpoint", + "dim": 0, + "alias": true, + "instance_id": 76, + "symbol_address": 1224, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_Lo_Clr_Setpoint": { + "tag_name": "Leak_2_Lo_Clr_Setpoint", + "dim": 0, + "alias": true, + "instance_id": 77, + "symbol_address": 1228, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_Tot_Bbls_Temp": { + "tag_name": "Leak_1_Tot_Bbls_Temp", + "dim": 0, + "alias": true, + "instance_id": 78, + "symbol_address": 1232, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_Lev_Temp": { + "tag_name": "Leak_2_Lev_Temp", + "dim": 0, + "alias": true, + "instance_id": 79, + "symbol_address": 1236, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_CU_Ft": { + "tag_name": "Leak_2_CU_Ft", + "dim": 0, + "alias": true, + "instance_id": 80, + "symbol_address": 1240, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_Tot_Bbls_Temp": { + "tag_name": "Leak_2_Tot_Bbls_Temp", + "dim": 0, + "alias": true, + "instance_id": 81, + "symbol_address": 1244, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_Cubic_Feet_To_Barrels": { + "tag_name": "Leak_2_Cubic_Feet_To_Barrels", + "dim": 0, + "alias": true, + "instance_id": 82, + "symbol_address": 1248, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_Total_Barrels": { + "tag_name": "Leak_2_Total_Barrels", + "dim": 0, + "alias": true, + "instance_id": 83, + "symbol_address": 1252, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_0FT_Volume_Total": { + "tag_name": "Leak_1_0FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 84, + "symbol_address": 1256, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_1FT_Volume_Total": { + "tag_name": "Leak_1_1FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 85, + "symbol_address": 1260, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_2FT_Volume_Total": { + "tag_name": "Leak_1_2FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 86, + "symbol_address": 1264, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_3FT_Volume_Total": { + "tag_name": "Leak_1_3FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 87, + "symbol_address": 1268, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_4FT_Volume_Total": { + "tag_name": "Leak_1_4FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 88, + "symbol_address": 1272, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_5FT_Volume_Total": { + "tag_name": "Leak_1_5FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 89, + "symbol_address": 1276, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_6FT_Volume_Total": { + "tag_name": "Leak_1_6FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 90, + "symbol_address": 1280, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_7FT_Volume_Total": { + "tag_name": "Leak_1_7FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 91, + "symbol_address": 1284, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_8FT_Volume_Total": { + "tag_name": "Leak_1_8FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 92, + "symbol_address": 1288, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_9FT_Volume_Total": { + "tag_name": "Leak_1_9FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 93, + "symbol_address": 1292, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_10FT_Volume_Total": { + "tag_name": "Leak_1_10FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 94, + "symbol_address": 1296, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_11FT_Volume_Total": { + "tag_name": "Leak_1_11FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 95, + "symbol_address": 1300, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_12FT_Volume_Total": { + "tag_name": "Leak_1_12FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 96, + "symbol_address": 1304, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_13FT_Volume_Total": { + "tag_name": "Leak_1_13FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 97, + "symbol_address": 1308, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_14FT_Volume_Total": { + "tag_name": "Leak_1_14FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 98, + "symbol_address": 1312, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_16FT_Volume_Total": { + "tag_name": "Leak_1_16FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 99, + "symbol_address": 1316, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_15FT_Volume_Total": { + "tag_name": "Leak_1_15FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 100, + "symbol_address": 1320, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_Stage_Total": { + "tag_name": "Leak_1_Stage_Total", + "dim": 0, + "alias": true, + "instance_id": 101, + "symbol_address": 1324, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_Rise_Multiplier": { + "tag_name": "Leak_1_Rise_Multiplier", + "dim": 0, + "alias": true, + "instance_id": 102, + "symbol_address": 1328, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_Rise_Multiplier": { + "tag_name": "Leak_2_Rise_Multiplier", + "dim": 0, + "alias": true, + "instance_id": 103, + "symbol_address": 1332, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_0FT_Volume_Total": { + "tag_name": "Leak_2_0FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 104, + "symbol_address": 1336, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_1FT_Volume_Total": { + "tag_name": "Leak_2_1FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 105, + "symbol_address": 1340, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_2FT_Volume_Total": { + "tag_name": "Leak_2_2FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 106, + "symbol_address": 1344, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_3FT_Volume_Total": { + "tag_name": "Leak_2_3FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 107, + "symbol_address": 1348, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_4FT_Volume_Total": { + "tag_name": "Leak_2_4FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 108, + "symbol_address": 1352, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_5FT_Volume_Total": { + "tag_name": "Leak_2_5FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 109, + "symbol_address": 1356, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_6FT_Volume_Total": { + "tag_name": "Leak_2_6FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 110, + "symbol_address": 1360, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_7FT_Volume_Total": { + "tag_name": "Leak_2_7FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 111, + "symbol_address": 1364, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_8FT_Volume_Total": { + "tag_name": "Leak_2_8FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 112, + "symbol_address": 1368, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_9FT_Volume_Total": { + "tag_name": "Leak_2_9FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 113, + "symbol_address": 1372, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_10FT_Volume_Total": { + "tag_name": "Leak_2_10FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 114, + "symbol_address": 1376, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_11FT_Volume_Total": { + "tag_name": "Leak_2_11FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 115, + "symbol_address": 1380, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_12FT_Volume_Total": { + "tag_name": "Leak_2_12FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 116, + "symbol_address": 1384, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_13FT_Volume_Total": { + "tag_name": "Leak_2_13FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 117, + "symbol_address": 1388, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_14FT_Volume_Total": { + "tag_name": "Leak_2_14FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 118, + "symbol_address": 1392, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_15FT_Volume_Total": { + "tag_name": "Leak_2_15FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 119, + "symbol_address": 1396, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_16FT_Volume_Total": { + "tag_name": "Leak_2_16FT_Volume_Total", + "dim": 0, + "alias": true, + "instance_id": 120, + "symbol_address": 1400, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_Raw_Min": { + "tag_name": "Leak_1_Raw_Min", + "dim": 0, + "alias": true, + "instance_id": 121, + "symbol_address": 1404, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_Raw_Max": { + "tag_name": "Leak_1_Raw_Max", + "dim": 0, + "alias": true, + "instance_id": 122, + "symbol_address": 1408, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_Raw_Min": { + "tag_name": "Leak_2_Raw_Min", + "dim": 0, + "alias": true, + "instance_id": 123, + "symbol_address": 1412, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_Raw_Max": { + "tag_name": "Leak_2_Raw_Max", + "dim": 0, + "alias": true, + "instance_id": 124, + "symbol_address": 1416, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_Lev_Psi": { + "tag_name": "Leak_1_Lev_Psi", + "dim": 0, + "alias": true, + "instance_id": 125, + "symbol_address": 1420, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_Lev_Psi": { + "tag_name": "Leak_2_Lev_Psi", + "dim": 0, + "alias": true, + "instance_id": 126, + "symbol_address": 1424, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_Pump_On_Spt": { + "tag_name": "Leak_1_Pump_On_Spt", + "dim": 0, + "alias": true, + "instance_id": 127, + "symbol_address": 1428, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_1_Pump_Off_Spt": { + "tag_name": "Leak_1_Pump_Off_Spt", + "dim": 0, + "alias": true, + "instance_id": 128, + "symbol_address": 1432, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_Pump_On_Spt": { + "tag_name": "Leak_2_Pump_On_Spt", + "dim": 0, + "alias": true, + "instance_id": 129, + "symbol_address": 1436, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Leak_2_Pump_Off_Spt": { + "tag_name": "Leak_2_Pump_Off_Spt", + "dim": 0, + "alias": true, + "instance_id": 130, + "symbol_address": 1440, + "symbol_object_address": 1077556028, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + } +} \ No newline at end of file diff --git a/Pub_Sub/fk_overflow_pump/thingsboard/measure.csv b/Pub_Sub/fk_overflow_pump/thingsboard/measure.csv new file mode 100644 index 0000000..c16d977 --- /dev/null +++ b/Pub_Sub/fk_overflow_pump/thingsboard/measure.csv @@ -0,0 +1,36 @@ +MeasuringPointName,ControllerName,GroupName,UploadType,DeadZonePercent,DataType,ArrayIndex,EnableBit,BitIndex,reverseBit,Address,Decimal,Len,ReadWrite,Unit,Description,Transform Type,MaxValue,MinValue,MaxScale,MinScale,Gain,Offset,startBit,endBit,Pt,Ct,Mapping_table,TransDecimal,bitMap,msecSample,storageLwTSDB,DataEndianReverse,ReadOffset,ReadLength,WriteOffset,WriteLength,DataParseMethod,BitId +discharge_out,overflow_pump,default,periodic,,FLOAT,,,,,DisPSI_Out,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,, +fit_rate,overflow_pump,default,periodic,,FLOAT,,,,,FIT_Rate,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,, +level_override_cmd,overflow_pump,default,periodic,,BIT,,,,0,Level_Override ,,,rw,,"1= runs regardless of level, 0= runs based on start/stop levels",none,,,,,,,,,,,,,0,,1,,,,,,, +pond_1_hi_alm,overflow_pump,default,periodic,,BIT,,,,0,Pond_1_Hi_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,, +pond_1_hi_clr_spt,overflow_pump,default,periodic,,FLOAT,,,,,Pond_1_Hi_Clr_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,1,,,,,,, +pond_1_hi_spt,overflow_pump,default,periodic,,FLOAT,,,,,Pond_1_Hi_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,1,,,,,,, +pond_1_level,overflow_pump,default,periodic,,FLOAT,,,,,Pond_1_Lev,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,, +pond_1_lo_alm,overflow_pump,default,periodic,,BIT,,,,0,Pond_1_Lo_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,, +pond_1_lo_clr_spt,overflow_pump,default,periodic,,FLOAT,,,,,Pond_1_Lo_Clr_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,1,,,,,,, +pond_1_lo_spt,overflow_pump,default,periodic,,FLOAT,,,,,Pond_1_Lo_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,1,,,,,,, +pond_1_total_bbls,overflow_pump,default,periodic,,FLOAT,,,,,Pond_1_Total_Barrels,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,, +pond_2_hi_alm,overflow_pump,default,periodic,,BIT,,,,0,Pond_2_Hi_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,, +pond_2_hi_clr_spt,overflow_pump,default,periodic,,FLOAT,,,,,Pond_2_Hi_Clr_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,1,,,,,,, +pond_2_hi_spt,overflow_pump,default,periodic,,FLOAT,,,,,Pond_2_Hi_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,1,,,,,,, +pond_2_level,overflow_pump,default,periodic,,FLOAT,,,,,Pond_2_Lev,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,, +pond_2_lo_alm,overflow_pump,default,periodic,,BIT,,,,0,Pond_2_Lo_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,, +pond_2_lo_clr_spt,overflow_pump,default,periodic,,FLOAT,,,,,Pond_2_Lo_Clr_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,1,,,,,,, +pond_2_lo_spt,overflow_pump,default,periodic,,FLOAT,,,,,Pond_2_Lo_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,1,,,,,,, +pond_2_total_bbls,overflow_pump,default,periodic,,FLOAT,,,,,Pond_2_Total_Barrels,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,, +pump_1_auto,overflow_pump,default,periodic,,BIT,,,,0,P001_AUTO_FBK,,,ro,, HOA auto status,none,,,,,,,,,,,,,0,,1,,,,,,, +pump_1_hand,overflow_pump,default,periodic,,BIT,,,,0,P001_HAND_FBK,,,ro,, HOA hand status,none,,,,,,,,,,,,,0,,1,,,,,,, +pump_1_local_start,overflow_pump,default,periodic,,BIT,,,,0,P001_START_BTN_FBK,,,ro,,Local start status,none,,,,,,,,,,,,,0,,1,,,,,,, +pump_1_overload_status,overflow_pump,default,periodic,,BIT,,,,0,P001_OVERLOAD_FBK,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,, +pump_1_run_fail_alm,overflow_pump,default,periodic,,BIT,,,,0,P001_RUN_FAIL_ALARM,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,, +pump_1_run_status,overflow_pump,default,periodic,,BIT,,,,0,P001_RUN_FBK,,,ro,, Pump running status,none,,,,,,,,,,,,,0,,1,,,,,,, +pump_2_auto,overflow_pump,default,periodic,,BIT,,,,0,P002_AUTO_FBK,,,ro,, HOA auto status,none,,,,,,,,,,,,,0,,1,,,,,,, +pump_2_hand,overflow_pump,default,periodic,,BIT,,,,0,P002_HAND_FBK,,,ro,, HOA hand status,none,,,,,,,,,,,,,0,,1,,,,,,, +pump_2_local_start,overflow_pump,default,periodic,,BIT,,,,0,P002_START_BTN_FBK,,,ro,,Local start status,none,,,,,,,,,,,,,0,,1,,,,,,, +pump_2_overload_status,overflow_pump,default,periodic,,BIT,,,,0,P002_OVERLOAD_FBK,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,, +pump_2_run_fail_alm,overflow_pump,default,periodic,,BIT,,,,0,P002_RUN_FAIL_ALARM,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,, +pump_2_run_status,overflow_pump,default,periodic,,BIT,,,,0,P002_RUN_FBK,,,ro,, Pump running status,none,,,,,,,,,,,,,0,,1,,,,,,, +run_level_perm,overflow_pump,default,periodic,,BIT,,,,0,Run_Level_Perm,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,, +start_level_spt,overflow_pump,default,periodic,,FLOAT,,,,,Start_Level_spt ,2,,rw,, start level input,none,,,,,,,,,,,,,,,1,,,,,,, +start_stop_cmd,overflow_pump,default,periodic,,BIT,,,,0,CMD_Cloud_Control,,,rw,, Pump Start Stop,none,,,,,,,,,,,,,0,,1,,,,,,, +stop_level_spt,overflow_pump,default,periodic,,FLOAT,,,,,Stop_Level_spt ,2,,rw,, stop level input,none,,,,,,,,,,,,,,,1,,,,,,, \ No newline at end of file diff --git a/Pub_Sub/fk_overflow_pump/thingsboard/measure_no_pond2.csv b/Pub_Sub/fk_overflow_pump/thingsboard/measure_no_pond2.csv new file mode 100644 index 0000000..50b25b8 --- /dev/null +++ b/Pub_Sub/fk_overflow_pump/thingsboard/measure_no_pond2.csv @@ -0,0 +1,25 @@ +MeasuringPointName,ControllerName,GroupName,UploadType,DeadZonePercent,DataType,ArrayIndex,EnableBit,BitIndex,reverseBit,Address,Decimal,Len,ReadWrite,Unit,Description,Transform Type,MaxValue,MinValue,MaxScale,MinScale,Gain,Offset,startBit,endBit,Pt,Ct,Mapping_table,TransDecimal,bitMap,msecSample,storageLwTSDB,DataEndianReverse,ReadOffset,ReadLength,WriteOffset,WriteLength,DataParseMethod,BitId +level_override_spt,overflow_pump,default,periodic,,BIT,,,,0,Level_Override ,,,rw,,"1= runs regardless of level, 0= runs based on start/stop levels",none,,,,,,,,,,,,,0,,1,,,,,,, +pond_1_hi_alm,overflow_pump,default,periodic,,BIT,,,,0,Pond_1_Hi_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,, +pond_1_hi_clr_spt,overflow_pump,default,periodic,,FLOAT,,,,,Pond_1_Hi_Clr_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,1,,,,,,, +pond_1_hi_spt,overflow_pump,default,periodic,,FLOAT,,,,,Pond_1_Hi_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,1,,,,,,, +pond_1_level,overflow_pump,default,periodic,,FLOAT,,,,,Pond_1_Lev,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,, +pond_1_lo_alm,overflow_pump,default,periodic,,BIT,,,,0,Pond_1_Lo_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,, +pond_1_lo_clr_spt,overflow_pump,default,periodic,,FLOAT,,,,,Pond_1_Lo_Clr_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,1,,,,,,, +pond_1_lo_spt,overflow_pump,default,periodic,,FLOAT,,,,,Pond_1_Lo_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,1,,,,,,, +pond_1_total_bbls,overflow_pump,default,periodic,,FLOAT,,,,,Pond_1_Total_Barrels,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,, +pump_1_auto,overflow_pump,default,periodic,,BIT,,,,0,P001_AUTO_FBK,,,ro,, HOA auto status,none,,,,,,,,,,,,,0,,1,,,,,,, +pump_1_hand,overflow_pump,default,periodic,,BIT,,,,0,P001_HAND_FBK,,,ro,, HOA hand status,none,,,,,,,,,,,,,0,,1,,,,,,, +pump_1_local_start,overflow_pump,default,periodic,,BIT,,,,0,P001_START_BTN_FBK,,,ro,,Local start status,none,,,,,,,,,,,,,0,,1,,,,,,, +pump_1_overload_status,overflow_pump,default,periodic,,BIT,,,,0,P001_OVERLOAD_FBK,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,, +pump_1_run_fail_alm,overflow_pump,default,periodic,,BIT,,,,0,P001_RUN_FAIL_ALARM,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,, +pump_1_run_status,overflow_pump,default,periodic,,BIT,,,,0,P001_RUN_FBK,,,ro,, Pump running status,none,,,,,,,,,,,,,0,,1,,,,,,, +pump_2_auto,overflow_pump,default,periodic,,BIT,,,,0,P002_AUTO_FBK,,,ro,, HOA auto status,none,,,,,,,,,,,,,0,,1,,,,,,, +pump_2_hand,overflow_pump,default,periodic,,BIT,,,,0,P002_HAND_FBK,,,ro,, HOA hand status,none,,,,,,,,,,,,,0,,1,,,,,,, +pump_2_local_start,overflow_pump,default,periodic,,BIT,,,,0,P002_START_BTN_FBK,,,ro,,Local start status,none,,,,,,,,,,,,,0,,1,,,,,,, +pump_2_overload_status,overflow_pump,default,periodic,,BIT,,,,0,P002_OVERLOAD_FBK,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,, +pump_2_run_fail_alm,overflow_pump,default,periodic,,BIT,,,,0,P002_RUN_FAIL_ALARM,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,, +pump_2_run_status,overflow_pump,default,periodic,,BIT,,,,0,P002_RUN_FBK,,,ro,, Pump running status,none,,,,,,,,,,,,,0,,1,,,,,,, +run_level_perm,overflow_pump,default,periodic,,BIT,,,,0,Run_Level_Perm,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,, +start_level_spt,overflow_pump,default,periodic,,FLOAT,,,,,Start_Level_spt ,2,,rw,, start level input,none,,,,,,,,,,,,,,,1,,,,,,, +stop_level_spt,overflow_pump,default,periodic,,FLOAT,,,,,Stop_Level_spt ,2,,rw,, stop level input,none,,,,,,,,,,,,,,,1,,,,,,, \ No newline at end of file diff --git a/Pub_Sub/fk_overflow_pump/thingsboard/measures.csv b/Pub_Sub/fk_overflow_pump/thingsboard/measures.csv deleted file mode 100644 index 3dd5cbc..0000000 --- a/Pub_Sub/fk_overflow_pump/thingsboard/measures.csv +++ /dev/null @@ -1,8 +0,0 @@ -MeasuringPointName,ControllerName,GroupName,UploadType,DataType,EnableBit,BitIndex,reverseBit,Address,Decimal,Len,ReadWrite,Unit,Description,Transform Type,MaxValue,MinValue,MaxScale,MinScale,Gain,Offset,startBit,endBit,Pt,Ct,Mapping_table,TransDecimal,bitMap,msecSample,DataEndianReverse,ReadOffset,ReadLength,DataParseMethod,BitId,storageLwTSDB -start_level_spt,overflow_pump,default,periodic,FLOAT,,,,Start_Level_spt ,2,,ro,, start level input,none,,,,,,,,,,,,,,,,,,,,1 -stop_level_spt,overflow_pump,default,periodic,FLOAT,,,,Stop_Level_spt ,2,,ro,, stop level input,none,,,,,,,,,,,,,,,,,,,,1 -auto,overflow_pump,default,periodic,BIT,,,0,Raw_Auto_Input ,,,ro,, HOA auto status,none,,,,,,,,,,,,,0,,,,,,,1 -hand,overflow_pump,default,periodic,BIT,,,0,Raw_Hand_Input ,,,ro,, HOA hand status,none,,,,,,,,,,,,,0,,,,,,,1 -run_status,overflow_pump,default,periodic,BIT,,,0,Raw_Run_Status ,,,ro,, Pump running status,none,,,,,,,,,,,,,0,,,,,,,1 -level_override,overflow_pump,default,periodic,BIT,,,0,Level_Override ,,,ro,,"1= runs regardless of level, 0= runs based on start/stop levels",none,,,,,,,,,,,,,0,,,,,,,1 -overload_status,overflow_pump,default,periodic,BIT,,,0,Raw_Overload_Status , ,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 \ No newline at end of file diff --git a/Pub_Sub/fk_overflow_pump/thingsboard/tag_dump_2025_October_23.json b/Pub_Sub/fk_overflow_pump/thingsboard/tag_dump_2025_October_23.json new file mode 100644 index 0000000..f972913 --- /dev/null +++ b/Pub_Sub/fk_overflow_pump/thingsboard/tag_dump_2025_October_23.json @@ -0,0 +1,1433 @@ +{ + "_IO_EM_DO_00": { + "tag_name": "_IO_EM_DO_00", + "dim": 0, + "alias": true, + "instance_id": 1, + "symbol_address": 1044, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DO_01": { + "tag_name": "_IO_EM_DO_01", + "dim": 0, + "alias": true, + "instance_id": 2, + "symbol_address": 1045, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DO_02": { + "tag_name": "_IO_EM_DO_02", + "dim": 0, + "alias": true, + "instance_id": 3, + "symbol_address": 1046, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DO_03": { + "tag_name": "_IO_EM_DO_03", + "dim": 0, + "alias": true, + "instance_id": 4, + "symbol_address": 1047, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DO_04": { + "tag_name": "_IO_EM_DO_04", + "dim": 0, + "alias": true, + "instance_id": 5, + "symbol_address": 1048, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DO_05": { + "tag_name": "_IO_EM_DO_05", + "dim": 0, + "alias": true, + "instance_id": 6, + "symbol_address": 1049, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DO_06": { + "tag_name": "_IO_EM_DO_06", + "dim": 0, + "alias": true, + "instance_id": 7, + "symbol_address": 1050, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DI_00": { + "tag_name": "_IO_EM_DI_00", + "dim": 0, + "alias": true, + "instance_id": 8, + "symbol_address": 1051, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DI_01": { + "tag_name": "_IO_EM_DI_01", + "dim": 0, + "alias": true, + "instance_id": 9, + "symbol_address": 1052, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DI_02": { + "tag_name": "_IO_EM_DI_02", + "dim": 0, + "alias": true, + "instance_id": 10, + "symbol_address": 1053, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DI_03": { + "tag_name": "_IO_EM_DI_03", + "dim": 0, + "alias": true, + "instance_id": 11, + "symbol_address": 1054, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DI_04": { + "tag_name": "_IO_EM_DI_04", + "dim": 0, + "alias": true, + "instance_id": 12, + "symbol_address": 1055, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DI_05": { + "tag_name": "_IO_EM_DI_05", + "dim": 0, + "alias": true, + "instance_id": 13, + "symbol_address": 1056, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DI_06": { + "tag_name": "_IO_EM_DI_06", + "dim": 0, + "alias": true, + "instance_id": 14, + "symbol_address": 1057, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DI_07": { + "tag_name": "_IO_EM_DI_07", + "dim": 0, + "alias": true, + "instance_id": 15, + "symbol_address": 1058, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DI_08": { + "tag_name": "_IO_EM_DI_08", + "dim": 0, + "alias": true, + "instance_id": 16, + "symbol_address": 1059, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DI_09": { + "tag_name": "_IO_EM_DI_09", + "dim": 0, + "alias": true, + "instance_id": 17, + "symbol_address": 1060, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DI_10": { + "tag_name": "_IO_EM_DI_10", + "dim": 0, + "alias": true, + "instance_id": 18, + "symbol_address": 1061, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_DI_11": { + "tag_name": "_IO_EM_DI_11", + "dim": 0, + "alias": true, + "instance_id": 19, + "symbol_address": 1062, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "_IO_EM_AI_00": { + "tag_name": "_IO_EM_AI_00", + "dim": 0, + "alias": true, + "instance_id": 20, + "symbol_address": 1064, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "UINT", + "data_type_name": "UINT", + "tag_type": "atomic" + }, + "_IO_EM_AI_01": { + "tag_name": "_IO_EM_AI_01", + "dim": 0, + "alias": true, + "instance_id": 21, + "symbol_address": 1066, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "UINT", + "data_type_name": "UINT", + "tag_type": "atomic" + }, + "_IO_EM_AI_02": { + "tag_name": "_IO_EM_AI_02", + "dim": 0, + "alias": true, + "instance_id": 22, + "symbol_address": 1068, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "UINT", + "data_type_name": "UINT", + "tag_type": "atomic" + }, + "_IO_EM_AI_03": { + "tag_name": "_IO_EM_AI_03", + "dim": 0, + "alias": true, + "instance_id": 23, + "symbol_address": 1070, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "UINT", + "data_type_name": "UINT", + "tag_type": "atomic" + }, + "_IO_EM_AO_00": { + "tag_name": "_IO_EM_AO_00", + "dim": 0, + "alias": true, + "instance_id": 24, + "symbol_address": 1072, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "UINT", + "data_type_name": "UINT", + "tag_type": "atomic" + }, + "_IO_P1_AI_00": { + "tag_name": "_IO_P1_AI_00", + "dim": 0, + "alias": true, + "instance_id": 25, + "symbol_address": 1074, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "UINT", + "data_type_name": "UINT", + "tag_type": "atomic" + }, + "_IO_P1_AI_01": { + "tag_name": "_IO_P1_AI_01", + "dim": 0, + "alias": true, + "instance_id": 26, + "symbol_address": 1076, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "UINT", + "data_type_name": "UINT", + "tag_type": "atomic" + }, + "_IO_P1_AI_02": { + "tag_name": "_IO_P1_AI_02", + "dim": 0, + "alias": true, + "instance_id": 27, + "symbol_address": 1078, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "UINT", + "data_type_name": "UINT", + "tag_type": "atomic" + }, + "_IO_P1_AI_03": { + "tag_name": "_IO_P1_AI_03", + "dim": 0, + "alias": true, + "instance_id": 28, + "symbol_address": 1080, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "UINT", + "data_type_name": "UINT", + "tag_type": "atomic" + }, + "Pond_1_Hi_Set": { + "tag_name": "Pond_1_Hi_Set", + "dim": 0, + "alias": true, + "instance_id": 29, + "symbol_address": 1124, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Pond_1_Hi_Reset": { + "tag_name": "Pond_1_Hi_Reset", + "dim": 0, + "alias": true, + "instance_id": 30, + "symbol_address": 1125, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Pond_1_Hi_Alarm": { + "tag_name": "Pond_1_Hi_Alarm", + "dim": 0, + "alias": true, + "instance_id": 31, + "symbol_address": 1126, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P001_AUTO_FBK": { + "tag_name": "P001_AUTO_FBK", + "dim": 0, + "alias": true, + "instance_id": 32, + "symbol_address": 1127, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P001_OVERLOAD_FBK": { + "tag_name": "P001_OVERLOAD_FBK", + "dim": 0, + "alias": true, + "instance_id": 33, + "symbol_address": 1128, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P001_RUN_CMD": { + "tag_name": "P001_RUN_CMD", + "dim": 0, + "alias": true, + "instance_id": 34, + "symbol_address": 1129, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Pond_1_Lo_Set": { + "tag_name": "Pond_1_Lo_Set", + "dim": 0, + "alias": true, + "instance_id": 35, + "symbol_address": 1130, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Pond_1_Lo_Reset": { + "tag_name": "Pond_1_Lo_Reset", + "dim": 0, + "alias": true, + "instance_id": 36, + "symbol_address": 1131, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Pond_1_Lo_Alarm": { + "tag_name": "Pond_1_Lo_Alarm", + "dim": 0, + "alias": true, + "instance_id": 37, + "symbol_address": 1132, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P001_HAND_FBK": { + "tag_name": "P001_HAND_FBK", + "dim": 0, + "alias": true, + "instance_id": 38, + "symbol_address": 1133, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P001_START_BTN_FBK": { + "tag_name": "P001_START_BTN_FBK", + "dim": 0, + "alias": true, + "instance_id": 39, + "symbol_address": 1134, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P001_RUN_FBK": { + "tag_name": "P001_RUN_FBK", + "dim": 0, + "alias": true, + "instance_id": 40, + "symbol_address": 1135, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Pond_1_Hi_Alarm_Enable": { + "tag_name": "Pond_1_Hi_Alarm_Enable", + "dim": 0, + "alias": true, + "instance_id": 41, + "symbol_address": 1136, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Pond_1_Hi_Alarm_Enabled": { + "tag_name": "Pond_1_Hi_Alarm_Enabled", + "dim": 0, + "alias": true, + "instance_id": 42, + "symbol_address": 1137, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Run_Level_Perm": { + "tag_name": "Run_Level_Perm", + "dim": 0, + "alias": true, + "instance_id": 44, + "symbol_address": 1156, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P002_START_BTN_FBK": { + "tag_name": "P002_START_BTN_FBK", + "dim": 0, + "alias": true, + "instance_id": 45, + "symbol_address": 1157, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P002_HAND_FBK": { + "tag_name": "P002_HAND_FBK", + "dim": 0, + "alias": true, + "instance_id": 46, + "symbol_address": 1158, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P002_AUTO_FBK": { + "tag_name": "P002_AUTO_FBK", + "dim": 0, + "alias": true, + "instance_id": 47, + "symbol_address": 1159, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Level_Override": { + "tag_name": "Level_Override", + "dim": 0, + "alias": true, + "instance_id": 48, + "symbol_address": 1160, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P002_RUN_FBK": { + "tag_name": "P002_RUN_FBK", + "dim": 0, + "alias": true, + "instance_id": 49, + "symbol_address": 1161, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P002_OVERLOAD_FBK": { + "tag_name": "P002_OVERLOAD_FBK", + "dim": 0, + "alias": true, + "instance_id": 50, + "symbol_address": 1162, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P002_RUN_CMD": { + "tag_name": "P002_RUN_CMD", + "dim": 0, + "alias": true, + "instance_id": 51, + "symbol_address": 1163, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P001_RUN_FAIL_ALARM": { + "tag_name": "P001_RUN_FAIL_ALARM", + "dim": 0, + "alias": true, + "instance_id": 52, + "symbol_address": 1164, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Alarm_Enable": { + "tag_name": "Alarm_Enable", + "dim": 0, + "alias": true, + "instance_id": 53, + "symbol_address": 1166, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "INT", + "data_type_name": "INT", + "tag_type": "atomic" + }, + "Pond_1_Lev": { + "tag_name": "Pond_1_Lev", + "dim": 0, + "alias": true, + "instance_id": 54, + "symbol_address": 1172, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_1_ScaledMin": { + "tag_name": "Pond_1_ScaledMin", + "dim": 0, + "alias": true, + "instance_id": 55, + "symbol_address": 1176, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_1_ScaledMax": { + "tag_name": "Pond_1_ScaledMax", + "dim": 0, + "alias": true, + "instance_id": 56, + "symbol_address": 1180, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "P001_OVERLOAD_ALARM": { + "tag_name": "P001_OVERLOAD_ALARM", + "dim": 0, + "alias": true, + "instance_id": 57, + "symbol_address": 1184, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P002_RUN_FAIL_ALARM": { + "tag_name": "P002_RUN_FAIL_ALARM", + "dim": 0, + "alias": true, + "instance_id": 58, + "symbol_address": 1185, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "P002_OVERLOAD_ALARM": { + "tag_name": "P002_OVERLOAD_ALARM", + "dim": 0, + "alias": true, + "instance_id": 59, + "symbol_address": 1186, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Pond_1_Hi_Setpoint": { + "tag_name": "Pond_1_Hi_Setpoint", + "dim": 0, + "alias": true, + "instance_id": 60, + "symbol_address": 1192, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_1_Hi_Clr_Setpoint": { + "tag_name": "Pond_1_Hi_Clr_Setpoint", + "dim": 0, + "alias": true, + "instance_id": 61, + "symbol_address": 1196, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_1_CU_Ft": { + "tag_name": "Pond_1_CU_Ft", + "dim": 0, + "alias": true, + "instance_id": 63, + "symbol_address": 1208, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_1_Dim_A": { + "tag_name": "Pond_1_Dim_A", + "dim": 0, + "alias": true, + "instance_id": 64, + "symbol_address": 1212, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_1_Dim_B": { + "tag_name": "Pond_1_Dim_B", + "dim": 0, + "alias": true, + "instance_id": 65, + "symbol_address": 1216, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_1_Dim_C": { + "tag_name": "Pond_1_Dim_C", + "dim": 0, + "alias": true, + "instance_id": 66, + "symbol_address": 1220, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_1_Dim_D": { + "tag_name": "Pond_1_Dim_D", + "dim": 0, + "alias": true, + "instance_id": 67, + "symbol_address": 1224, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_1_Cubic_Feet_To_Barrels": { + "tag_name": "Pond_1_Cubic_Feet_To_Barrels", + "dim": 0, + "alias": true, + "instance_id": 68, + "symbol_address": 1228, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_1_Total_Barrels": { + "tag_name": "Pond_1_Total_Barrels", + "dim": 0, + "alias": true, + "instance_id": 69, + "symbol_address": 1232, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_1_Lo_Setpoint": { + "tag_name": "Pond_1_Lo_Setpoint", + "dim": 0, + "alias": true, + "instance_id": 70, + "symbol_address": 1236, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_1_Lev_Temp": { + "tag_name": "Pond_1_Lev_Temp", + "dim": 0, + "alias": true, + "instance_id": 71, + "symbol_address": 1240, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_1_Lo_Clr_Setpoint": { + "tag_name": "Pond_1_Lo_Clr_Setpoint", + "dim": 0, + "alias": true, + "instance_id": 72, + "symbol_address": 1244, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_1_Tot_Bbls_Temp": { + "tag_name": "Pond_1_Tot_Bbls_Temp", + "dim": 0, + "alias": true, + "instance_id": 74, + "symbol_address": 1256, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_1_EU_Min": { + "tag_name": "Pond_1_EU_Min", + "dim": 0, + "alias": true, + "instance_id": 76, + "symbol_address": 1296, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_1_EU_Max": { + "tag_name": "Pond_1_EU_Max", + "dim": 0, + "alias": true, + "instance_id": 77, + "symbol_address": 1300, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Start_Level_spt": { + "tag_name": "Start_Level_spt", + "dim": 0, + "alias": true, + "instance_id": 79, + "symbol_address": 1384, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Stop_Level_spt": { + "tag_name": "Stop_Level_spt", + "dim": 0, + "alias": true, + "instance_id": 80, + "symbol_address": 1388, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_1_Input_Min": { + "tag_name": "Pond_1_Input_Min", + "dim": 0, + "alias": true, + "instance_id": 81, + "symbol_address": 1392, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_1_Input_Max": { + "tag_name": "Pond_1_Input_Max", + "dim": 0, + "alias": true, + "instance_id": 82, + "symbol_address": 1396, + "symbol_object_address": 1077548636, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + } +} \ No newline at end of file diff --git a/Pub_Sub/flowmeterskid/thingsboard/flowmeterskid_registers_epd.csv b/Pub_Sub/flowmeterskid/thingsboard/flowmeterskid_registers_epd.csv new file mode 100644 index 0000000..95e9b7a --- /dev/null +++ b/Pub_Sub/flowmeterskid/thingsboard/flowmeterskid_registers_epd.csv @@ -0,0 +1,15 @@ +MeasuringPointName,ControllerName,GroupName,UploadType,DeadZoneType,DeadZonePercent,DataType,ArrayIndex,EnableBit,BitIndex,reverseBit,Address,Decimal,Len,CodeType,ReadWrite,Unit,Description,Transform Type,MaxValue,MinValue,MaxScale,MinScale,Gain,Offset,startBit,endBit,Pt,Ct,Mapping_table,TransDecimal,bitMap,msecSample,storageLwTSDB,DataEndianReverse,ReadOffset,ReadLength,WriteOffset,WriteLength,DataParseMethod,BitId,pollCycle,EnableRequestCount,RequestCount,byteOrder +flowrate,flowmeter,default,periodic,,,FLOAT,,,,,4X3874,2,,,ro,,,none,,,,,,,,,,,,,,0,1,,,,,,,,0,0,,cdab +totalizer_1,flowmeter,default,periodic,,,FLOAT,,,,,4X2610,2,,,ro,,,none,,,,,,,,,,,,,,0,1,,,,,,,,0,0,,cdab +totalizer_2,flowmeter,default,periodic,,,FLOAT,,,,,4X2810,2,,,ro,,,none,,,,,,,,,,,,,,0,1,,,,,,,,0,0,,cdab +totalizer_3,flowmeter,default,periodic,,,FLOAT,,,,,4X3010,2,,,ro,,,none,,,,,,,,,,,,,,0,1,,,,,,,,0,0,,cdab +flow_unit,flowmeter,default,onChange,0,0,INT,,0,,,4X2103,,,,ro,,,none,,,,,,,,,,,,,,0,1,,,,,,,,0,0,,ab +totalizer_1_unit,flowmeter,default,onChange,0,0,INT,,0,,,4X4604,,,,ro,,,none,,,,,,,,,,,,,,0,1,,,,,,,,0,0,,ab +totalizer_2_unit,flowmeter,default,onChange,0,0,INT,,0,,,4X4605,,,,ro,,,none,,,,,,,,,,,,,,0,1,,,,,,,,0,0,,ab +totalizer_3_unit,flowmeter,default,periodic,,,INT,,0,,,4X4606,,,,ro,,,none,,,,,,,,,,,,,,0,1,,,,,,,,0,0,,ab +reset_totalizers,flowmeter,,never,,,INT,,0,,,4X2609,,,,rw,,,none,,,,,,,,,,,,,,0,1,,,,,,,,0,0,,ab +byte_order,flowmeter,default,onChange,0,0,INT,,0,,,4X4915,,,,rw,,,none,,,,,,,,,,,,,,0,1,,,,,,,,0,0,,ab +device_name,flowmeter,default,onChange,,,STRING,,,,,4X7238,,14,UTF-8,ro,,,none,,,,,,,,,,,,,,0,1,,,,,,,,0,0,, +serial_number,flowmeter,default,onChange,,,STRING,,,,,4X7003,,12,UTF-8,ro,,,none,,,,,,,,,,,,,,0,1,,,,,,,,0,0,, +totalizer_1_rollover,flowmeter,default,periodic,,,FLOAT,,,,,4X2612,2,,,ro,,,none,,,,,,,,,,,,,,0,1,,,,,,,,0,0,,cdab +empty_pipe,flowmeter,default,periodic,,,FLOAT,,,,,4X2298,2,,,ro,,,none,,,,,,,,,,,,,,0,1,,,,,,,,0,0,,cdab \ No newline at end of file diff --git a/Pub_Sub/flowmeterskid/thingsboard/flowmeterskid_tb_v6.cfg b/Pub_Sub/flowmeterskid/thingsboard/flowmeterskid_tb_v6.cfg new file mode 100644 index 0000000..439b211 --- /dev/null +++ b/Pub_Sub/flowmeterskid/thingsboard/flowmeterskid_tb_v6.cfg @@ -0,0 +1,631 @@ +{ + "controllers": [ + { + "protocol": "Modbus-RTU", + "name": "flowmeter", + "endpoint": "rs485", + "args": { + "slaveAddr": 247, + "int16Ord": "ab", + "int32Ord": "cdab", + "float32Ord": "cdab", + "int64Ord": "ghefcdab", + "enableMsecSample": 0, + "continuousAcquisition": 1, + "maxContinuousNumber": 64, + "communicationInterval": 3, + "msecSamplePeriod": 500, + "msecPackage": 20, + "float64Ord": "abcdefgh", + "writeCoilFunction": 5, + "writeRegisterFunction": 6 + }, + "samplePeriod": 10, + "expired": 10000, + "desc": "", + "enable": 1, + "enableDebug": 0, + "enablepollCycle": 0, + "samplePeriod2": 60, + "_id": "0000685c537fce84" + } + ], + "measures": [ + { + "name": "flowrate", + "ctrlName": "flowmeter", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "43874", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 0, + "transformType": 0, + "msecSample": 0, + "_id": "0000686d7b9aaf16" + }, + { + "name": "totalizer_1", + "ctrlName": "flowmeter", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "42610", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 0, + "transformType": 0, + "msecSample": 0, + "_id": "0001686d7b9ab86d" + }, + { + "name": "totalizer_2", + "ctrlName": "flowmeter", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "42810", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 0, + "transformType": 0, + "msecSample": 0, + "_id": "0002686d7b9ad656" + }, + { + "name": "totalizer_3", + "ctrlName": "flowmeter", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "43010", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 0, + "transformType": 0, + "msecSample": 0, + "_id": "0003686d7b9a54b2" + }, + { + "name": "flow_unit", + "ctrlName": "flowmeter", + "group": "default", + "uploadType": "onChange", + "dataType": "INT", + "addr": "42103", + "enableRequestCount": 0, + "enableBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 0, + "deadZoneType": 0, + "deadZonePercent": "0", + "transformType": 0, + "msecSample": 0, + "_id": "0004686d7b9acfb5" + }, + { + "name": "totalizer_1_unit", + "ctrlName": "flowmeter", + "group": "default", + "uploadType": "onChange", + "dataType": "INT", + "addr": "44604", + "enableRequestCount": 0, + "enableBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 0, + "deadZoneType": 0, + "deadZonePercent": "0", + "transformType": 0, + "msecSample": 0, + "_id": "0005686d7b9afee5" + }, + { + "name": "totalizer_2_unit", + "ctrlName": "flowmeter", + "group": "default", + "uploadType": "onChange", + "dataType": "INT", + "addr": "44605", + "enableRequestCount": 0, + "enableBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 0, + "deadZoneType": 0, + "deadZonePercent": "0", + "transformType": 0, + "msecSample": 0, + "_id": "0006686d7b9a8c57" + }, + { + "name": "totalizer_3_unit", + "ctrlName": "flowmeter", + "group": "default", + "uploadType": "periodic", + "dataType": "INT", + "addr": "44606", + "enableRequestCount": 0, + "enableBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 0, + "transformType": 0, + "msecSample": 0, + "_id": "0007686d7b9a2751" + }, + { + "name": "reset_totalizers", + "ctrlName": "flowmeter", + "group": "", + "uploadType": "never", + "dataType": "INT", + "addr": "42609", + "enableRequestCount": 0, + "enableBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "transformType": 0, + "msecSample": 0, + "_id": "0008686d7b9a6841" + }, + { + "name": "byte_order", + "ctrlName": "flowmeter", + "group": "default", + "uploadType": "onChange", + "dataType": "INT", + "addr": "44915", + "enableRequestCount": 0, + "enableBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 0, + "deadZoneType": 0, + "deadZonePercent": "0", + "transformType": 0, + "msecSample": 0, + "_id": "0009686d7b9adc1e" + }, + { + "name": "device_name", + "ctrlName": "flowmeter", + "group": "default", + "uploadType": "onChange", + "dataType": "STRING", + "addr": "47238", + "enableRequestCount": 0, + "len": 14, + "codeType": "UTF-8", + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 0, + "transformType": 0, + "msecSample": 0, + "_id": "000a686d7b9abc03" + }, + { + "name": "serial_number", + "ctrlName": "flowmeter", + "group": "default", + "uploadType": "onChange", + "dataType": "STRING", + "addr": "47003", + "enableRequestCount": 0, + "len": 12, + "codeType": "UTF-8", + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 0, + "transformType": 0, + "msecSample": 0, + "_id": "000b686d7b9aa8f9" + }, + { + "name": "totalizer_1_rollover", + "ctrlName": "flowmeter", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "42612", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "msecSample": 0, + "_id": "000c686d7b9a55be" + } + ], + "alarmLables": [ + "default" + ], + "alarms": [], + "groups": [ + { + "name": "default", + "uploadInterval": 600, + "_id": "group59b64649c93", + "LwTSDBSize": 1000, + "strategy": 1, + "historyDataMode": "gateway", + "historyDataPath": "/var/user/data/dbhome/device_supervisor/LwTSDB", + "enablePerOnchange": 0 + } + ], + "misc": { + "maxAlarmRecordSz": 2000, + "logLvl": "DEBUG", + "coms": [ + { + "name": "rs232", + "baud": 9600, + "bits": 8, + "parityChk": "n", + "stopbits": 1 + }, + { + "name": "rs485", + "baud": 19200, + "bits": 8, + "parityChk": "n", + "stopbits": 1 + } + ], + "cacheMode": "gateway", + "cachePath": "/var/user/data/dbhome/device_supervisor/offlinedata", + "cacheSize": 10000, + "cacheUploadPeriod": 200, + "cacheUploadStrategy": 0, + "cacheStrategy": 0, + "pubTimeout": 1000, + "pubRepeatNum": 3, + "debugLogMode": "gateway", + "debugLogPath": "/var/user/data/dbhome/device_supervisor/debugLog", + "debugLogSize": 2000, + "logNum": 2, + "logSize": 1 + }, + "clouds": [ + { + "cacheSize": 10000, + "enable": 1, + "name": "default", + "type": "Standard MQTT", + "args": { + "host": "hp.henrypump.cloud", + "port": 1883, + "clientId": "cp-flow-meter-x", + "auth": 1, + "tls": 0, + "cleanSession": 0, + "mqttVersion": "v3.1.1", + "keepalive": 60, + "key": "", + "cert": "", + "rootCA": "", + "verifyServer": 0, + "verifyClient": 0, + "username": "conocophillipsmqtt", + "passwd": "conocophillipsmqtt@1903", + "willQos": 0, + "willRetain": 0, + "willTopic": "", + "willPayload": "", + "tlsAuth": "caSelfSigned" + }, + "_id": "cloud59b6464bd03", + "uploadRules": [] + } + ], + "quickfaas": { + "genericFuncs": [], + "uploadFuncs": [ + { + "qos": 1, + "funcName": "sendData", + "script": "import json, os, time, shutil\nfrom datetime import datetime as dt\nfrom common.Logger import logger\nfrom quickfaas.remotebus import publish\nfrom mobiuspi_lib.gps import GPS\nfrom quickfaas.global_dict import get as get_params\nfrom quickfaas.global_dict import _set_global_args\n\ndef reboot(reason=\"Rebooting for config file update\"):\n #basic = Basic()\n logger.info(\"!\" * 10 + \"REBOOTING DEVICE\" + \"!\"*10)\n logger.info(reason)\n r = os.popen(\"kill -s SIGHUP `cat /var/run/python/supervisord.pid`\").read()\n logger.info(f\"REBOOT : {r}\")\n\ndef checkFileExist(filename):\n path = \"/var/user/files\"\n try:\n if not os.path.exists(path):\n logger.debug(\"no folder making files folder in var/user\")\n os.makedirs(path)\n with open(path + \"/\" + filename, \"a\") as f:\n json.dump({}, f)\n except Exception as e:\n logger.error(f\"Something went wrong in checkFileExist while making folder: {e}\")\n \n try:\n if not os.path.exists(path + \"/\" + filename):\n logger.debug(\"no creds file making creds file\")\n with open(path + \"/\" + filename, \"a\") as f:\n json.dump({}, f)\n except Exception as e:\n logger.error(f\"Something went wrong in checkFileExist wihle making file: {e}\")\n\ndef convertDStoJSON(ds):\n j = dict()\n try:\n for x in ds:\n j[x[\"key\"]] = x[\"value\"]\n except Exception as e:\n logger.error(f\"Something went wrong in convertDStoJSON: {e}\")\n return j\n\ndef convertJSONtoDS(j):\n d = []\n try:\n for key in j.keys():\n d.append({\"key\": key, \"value\": j[key]})\n except Exception as e:\n logger.error(f\"Something went wrong in convertJSONtoDS: {e}\")\n return d\n\ndef checkCredentialConfig():\n logger.debug(\"CHECKING CONFIG\")\n cfgpath = \"/var/user/cfg/device_supervisor/device_supervisor.cfg\"\n credspath = \"/var/user/files/creds.json\"\n cfg = dict()\n with open(cfgpath, \"r\") as f:\n try:\n cfg = json.load(f)\n clouds = cfg.get(\"clouds\")\n logger.debug(clouds)\n #if not configured then try to configure from stored values\n if clouds[0][\"args\"][\"clientId\"] == \"unknown\" or clouds[0][\"args\"][\"username\"] == \"unknown\" or not clouds[0][\"args\"][\"passwd\"] or clouds[0][\"args\"][\"passwd\"] == \"unknown\":\n try:\n checkFileExist(\"creds.json\")\n except Exception as e:\n logger.error(f\"Error in checkFileExist: {e}\")\n with open(credspath, \"r\") as c:\n try:\n creds = json.load(c)\n if creds:\n logger.debug(\"updating config with stored data\")\n clouds[0][\"args\"][\"clientId\"] = creds[\"clientId\"]\n clouds[0][\"args\"][\"username\"] = creds[\"userName\"]\n clouds[0][\"args\"][\"passwd\"] = creds[\"password\"]\n cfg[\"clouds\"] = clouds\n cfg = checkParameterConfig(cfg)\n with open(cfgpath, \"w\", encoding='utf-8') as n:\n json.dump(cfg, n, indent=1, ensure_ascii=False)\n reboot()\n except Exception as e:\n logger.error(f\"Error trying to load credentials from file: {e}\")\n else:\n #assuming clouds is filled out, if data is different then assume someone typed in something new and store it, if creds is empty fill with clouds' data\n checkFileExist(\"creds.json\")\n with open(credspath, \"r\") as c:\n logger.debug(\"updating stored file with new data\")\n cfg = checkParameterConfig(cfg)\n with open(cfgpath, \"w\", encoding='utf-8') as n:\n json.dump(cfg, n, indent=1, ensure_ascii=False)\n creds = json.load(c)\n if creds:\n if creds[\"clientId\"] != clouds[0][\"args\"][\"clientId\"]:\n creds[\"clientId\"] = clouds[0][\"args\"][\"clientId\"]\n if creds[\"userName\"] != clouds[0][\"args\"][\"username\"]:\n creds[\"userName\"] = clouds[0][\"args\"][\"username\"]\n if creds[\"password\"] != clouds[0][\"args\"][\"passwd\"]:\n creds[\"password\"] = clouds[0][\"args\"][\"passwd\"]\n else:\n creds[\"clientId\"] = clouds[0][\"args\"][\"clientId\"]\n creds[\"userName\"] = clouds[0][\"args\"][\"username\"]\n creds[\"password\"] = clouds[0][\"args\"][\"passwd\"]\n with open(credspath, \"w\") as cw:\n json.dump(creds,cw)\n except Exception as e:\n logger.error(f\"Somethign went wrong in checkCredentialConfig: {e}\")\n\ndef checkParameterConfig(cfg):\n try:\n logger.debug(\"Checking Parameters!!!!\")\n paramspath = \"/var/user/files/params.json\"\n cfgparams = convertDStoJSON(cfg.get(\"labels\"))\n #check stored values \n checkFileExist(\"params.json\")\n with open(paramspath, \"r\") as f:\n logger.debug(\"Opened param storage file\")\n params = json.load(f)\n if params:\n if cfgparams != params:\n #go through each param\n #if not \"unknown\" and cfg and params aren't the same take from cfg likely updated manually\n #if key in cfg but not in params copy to params\n logger.debug(\"equalizing params between cfg and stored\")\n for key in cfgparams.keys():\n try:\n if cfgparams[key] != params[key] and cfgparams[key] != \"unknown\":\n params[key] = cfgparams[key]\n except:\n params[key] = cfgparams[key]\n cfg[\"labels\"] = convertJSONtoDS(params)\n _set_global_args(convertJSONtoDS(params))\n with open(paramspath, \"w\") as p:\n json.dump(params, p)\n else:\n with open(paramspath, \"w\") as p:\n logger.debug(\"initializing param file with params in memory\")\n json.dump(convertDStoJSON(get_params()), p)\n cfg[\"labels\"] = get_params()\n \n return cfg\n except Exception as e:\n logger.error(f\"Something went wrong in checkParameterConfig: {e}\")\n os.system(f'rm {paramspath}')\n return cfg\n\npayload = {}\n\ndef initialize_totalizers():\n return {\n \"day\": 0,\n \"week\": 0,\n \"month\": 0,\n \"year\": 0,\n \"lifetime\": 0,\n \"dayHolding\": 0,\n \"weekHolding\": 0,\n \"monthHolding\": 0,\n \"yearHolding\": 0,\n \"rolloverCounter\": 0\n }\n\ndef getTotalizers(file_path=\"/var/user/files/totalizers.json\"):\n \"\"\"\n Retrieves totalizer data from a JSON file.\n\n :param file_path: Path to the JSON file storing totalizer data.\n :return: Dictionary containing totalizer values.\n \"\"\"\n try:\n with open(file_path, \"r\") as t:\n totalizers = json.load(t)\n if not totalizers or not isinstance(totalizers, dict):\n logger.info(\"Invalid data format in the file. Initializing totalizers.\")\n totalizers = initialize_totalizers()\n except FileNotFoundError:\n logger.info(\"File not found. Initializing totalizers.\")\n totalizers = initialize_totalizers()\n except json.JSONDecodeError:\n timestamp = dt.now().strftime(\"%Y%m%d_%H%M%S\")\n # Split the file path and insert the timestamp before the extension\n file_name, file_extension = os.path.splitext(file_path)\n backup_file_path = f\"{file_name}_{timestamp}{file_extension}\"\n shutil.copyfile(file_path, backup_file_path)\n logger.error(f\"Error decoding JSON. A backup of the file is created at {backup_file_path}. Initializing totalizers.\")\n totalizers = initialize_totalizers()\n return totalizers\n\n# Helper function to split the payload into chunks\ndef chunk_payload(payload, chunk_size=20):\n chunked_values = list(payload[\"values\"].items())\n for i in range(0, len(chunked_values), chunk_size):\n yield {\n \"ts\": payload[\"ts\"],\n \"values\": dict(chunked_values[i:i+chunk_size])\n }\n\n\ndef sendData(message,wizard_api):\n logger.debug(message)\n checkCredentialConfig()\n payload = {\"ts\": (round(dt.timestamp(dt.now())/600)*600)*1000, \"values\": {}}\n resetPayload = {\"ts\": \"\", \"values\": {}}\n dayReset, weekReset, monthReset, yearReset = False, False, False, False\n totalizer_1 = None\n ro_counter = None\n for measure in message[\"values\"][\"flowmeter\"].keys():\n try:\n if message[\"values\"][\"flowmeter\"][measure][\"status\"] == 1:\n if measure in [\"totalizer_1\"]:\n totalizer_1 = message[\"values\"][\"flowmeter\"][measure][\"raw_data\"]\n if measure in [\"totalizer_1_rollover\"]:\n ro_counter = message[\"values\"][\"flowmeter\"][measure][\"raw_data\"]\n payload[\"values\"][measure] = message[\"values\"][\"flowmeter\"][measure][\"raw_data\"]\n except Exception as e:\n logger.error(e)\n try:\n if totalizer_1 != None and ro_counter != None:\n real_lifetime = totalizer_1 + ro_counter * 10000000\n payload[\"values\"][\"year_volume\"], yearReset = totalizeYear(real_lifetime)\n payload[\"values\"][\"month_volume\"], monthReset = totalizeMonth(real_lifetime)\n payload[\"values\"][\"week_volume\"], weekReset = totalizeWeek(real_lifetime)\n payload[\"values\"][\"day_volume\"], dayReset = totalizeDay(real_lifetime)\n payload[\"values\"][\"real_lifetime\"] = real_lifetime\n except Exception as e:\n logger.error(e)\n\n try:\n payload[\"values\"][\"latitude\"], payload[\"values\"][\"longitude\"], payload[\"values\"][\"speed\"] = getGPS()\n except:\n logger.error(\"Could not get GPS coordinates\")\n for chunk in chunk_payload(payload=payload):\n publish(__topic__, json.dumps(chunk), __qos__)\n time.sleep(2)\n\n publish(\"v1/devices/me/attributes\", json.dumps({\"latestReportTime\": (round(dt.timestamp(dt.now())/600)*600)*1000}), __qos__)\n \n if dayReset:\n resetPayload[\"values\"][\"yesterday_volume\"] = payload[\"values\"][\"day_volume\"]\n resetPayload[\"values\"][\"day_volume\"] = 0\n if weekReset:\n resetPayload[\"values\"][\"last_week_volume\"] = payload[\"values\"][\"week_volume\"]\n resetPayload[\"values\"][\"week_volume\"] = 0\n if monthReset:\n resetPayload[\"values\"][\"last_month_volume\"] = payload[\"values\"][\"month_volume\"]\n resetPayload[\"values\"][\"month_volume\"] = 0\n if yearReset:\n resetPayload[\"values\"][\"last_year_volume\"] = payload[\"values\"][\"year_volume\"]\n resetPayload[\"values\"][\"year_volume\"] = 0 \n\n if resetPayload[\"values\"]:\n resetPayload[\"ts\"] = 1 + (round(dt.timestamp(dt.now())/600)*600)*1000\n publish(__topic__, json.dumps(resetPayload), __qos__) \n\ndef saveTotalizers(totalizers, file_path=\"/var/user/files/totalizers.json\"):\n \"\"\"\n Saves totalizer data to a JSON file.\n\n :param totalizers: Dictionary containing totalizer values to be saved.\n :param file_path: Path to the JSON file where totalizer data will be saved.\n \"\"\"\n try:\n with open(file_path, \"w\") as t:\n json.dump(totalizers, t)\n except (IOError, OSError, json.JSONEncodeError) as e:\n logger.error(f\"Error saving totalizers to {file_path}: {e}\")\n raise # Optionally re-raise the exception if it should be handled by the caller\n\ndef getGPS():\n # Create a gps instance\n gps = GPS()\n\n # Retrieve GPS information\n position_status = gps.get_position_status()\n logger.debug(\"position_status: \")\n logger.debug(position_status)\n latitude = position_status[\"latitude\"].split(\" \")\n longitude = position_status[\"longitude\"].split(\" \")\n lat_dec = int(latitude[0][:-1]) + (float(latitude[1][:-1])/60)\n lon_dec = int(longitude[0][:-1]) + (float(longitude[1][:-1])/60)\n if latitude[2] == \"S\":\n lat_dec = lat_dec * -1\n if longitude[2] == \"W\":\n lon_dec = lon_dec * -1\n #lat_dec = round(lat_dec, 7)\n #lon_dec = round(lon_dec, 7)\n logger.info(\"HERE IS THE GPS COORDS\")\n logger.info(f\"LATITUDE: {lat_dec}, LONGITUDE: {lon_dec}\")\n speedKnots = position_status[\"speed\"].split(\" \")\n speedMPH = float(speedKnots[0]) * 1.151\n return (f\"{lat_dec:.8f}\",f\"{lon_dec:.8f}\",f\"{speedMPH:.2f}\")\n\ndef totalizeDay(lifetime, max_retries=3, retry_delay=2):\n \"\"\"\n Update and save daily totalizers based on the lifetime value.\n\n :param lifetime: The current lifetime total.\n :param max_retries: Maximum number of save attempts.\n :param retry_delay: Delay in seconds between retries.\n :return: A tuple containing the calculated value and a boolean indicating if a reset occurred, or (None, False) if save fails.\n \"\"\"\n totalizers = getTotalizers()\n now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)\n reset = False\n value = lifetime - totalizers[\"dayHolding\"]\n\n if not int(now.strftime(\"%d\")) == int(totalizers[\"day\"]):\n totalizers[\"dayHolding\"] = lifetime\n totalizers[\"day\"] = int(now.strftime(\"%d\"))\n\n for attempt in range(max_retries):\n try:\n saveTotalizers(totalizers)\n reset = True\n return (value, reset)\n except Exception as e:\n logger.error(f\"Attempt {attempt + 1} failed to save totalizers: {e}\")\n if attempt < max_retries - 1:\n time.sleep(retry_delay)\n else:\n logger.error(\"All attempts to save totalizers failed.\")\n return (None, False)\n\n return (value, reset)\n\ndef totalizeWeek(lifetime, max_retries=3, retry_delay=2):\n \"\"\"\n Update and save weekly totalizers based on the lifetime value.\n\n :param lifetime: The current lifetime total.\n :param max_retries: Maximum number of save attempts.\n :param retry_delay: Delay in seconds between retries.\n :return: A tuple containing the calculated value and a boolean indicating if a reset occurred, or (None, False) if save fails.\n \"\"\"\n totalizers = getTotalizers()\n now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)\n reset = False\n value = lifetime - totalizers[\"weekHolding\"]\n\n if (not now.strftime(\"%U\") == totalizers[\"week\"] and now.strftime(\"%a\") == \"Sun\") or totalizers[\"week\"] == 0:\n totalizers[\"weekHolding\"] = lifetime\n totalizers[\"week\"] = now.strftime(\"%U\")\n\n for attempt in range(max_retries):\n try:\n saveTotalizers(totalizers)\n reset = True\n return (value, reset)\n except Exception as e:\n logger.error(f\"Attempt {attempt + 1} failed to save totalizers: {e}\")\n if attempt < max_retries - 1:\n time.sleep(retry_delay)\n else:\n logger.error(\"All attempts to save totalizers failed.\")\n return (None, False)\n return (value, reset)\n\ndef totalizeMonth(lifetime, max_retries=3, retry_delay=2):\n \"\"\"\n Update and save monthly totalizers based on the lifetime value.\n\n :param lifetime: The current lifetime total.\n :param max_retries: Maximum number of save attempts.\n :param retry_delay: Delay in seconds between retries.\n :return: A tuple containing the calculated value and a boolean indicating if a reset occurred, or (None, False) if save fails.\n \"\"\"\n totalizers = getTotalizers()\n now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)\n reset = False\n value = lifetime - totalizers[\"monthHolding\"]\n\n if not int(now.strftime(\"%m\")) == int(totalizers[\"month\"]):\n totalizers[\"monthHolding\"] = lifetime\n totalizers[\"month\"] = now.strftime(\"%m\")\n\n for attempt in range(max_retries):\n try:\n saveTotalizers(totalizers)\n reset = True\n return (value, reset)\n except Exception as e:\n logger.error(f\"Attempt {attempt + 1} failed to save totalizers: {e}\")\n if attempt < max_retries - 1:\n time.sleep(retry_delay)\n else:\n logger.error(\"All attempts to save totalizers failed.\")\n return (None, False)\n\n return (value,reset)\n\ndef totalizeYear(lifetime, max_retries=3, retry_delay=2):\n \"\"\"\n Update and save yearly totalizers based on the lifetime value.\n\n :param lifetime: The current lifetime total.\n :param max_retries: Maximum number of save attempts.\n :param retry_delay: Delay in seconds between retries.\n :return: A tuple containing the calculated value and a boolean indicating if a reset occurred, or (None, False) if save fails.\n \"\"\"\n totalizers = getTotalizers()\n now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)\n reset = False\n value = lifetime - totalizers[\"yearHolding\"]\n\n if not int(now.strftime(\"%Y\")) == int(totalizers[\"year\"]):\n totalizers[\"yearHolding\"] = lifetime\n totalizers[\"year\"] = now.strftime(\"%Y\")\n \n for attempt in range(max_retries):\n try:\n saveTotalizers(totalizers)\n reset = True\n return (value, reset)\n except Exception as e:\n logger.error(f\"Attempt {attempt + 1} failed to save totalizers: {e}\")\n if attempt < max_retries - 1:\n time.sleep(retry_delay)\n else:\n logger.error(\"All attempts to save totalizers failed.\")\n return (None, False)", + "name": "sendData", + "trigger": "measure_event", + "topic": "v1/devices/me/telemetry", + "cloudName": "default", + "groups": [ + "default" + ], + "hideOfflineData": 0, + "msgType": 0 + } + ], + "downloadFuncs": [ + { + "name": "Receive Command", + "topic": "v1/devices/me/rpc/request/+", + "qos": 1, + "funcName": "receiveCommand", + "payload_type": "JSON", + "script": "import json\nfrom datetime import datetime as dt\nfrom common.Logger import logger\nfrom quickfaas.measure import write\nfrom quickfaas.remotebus import publish\n\n\ndef get_totalizers():\n try:\n with open(\"/var/user/files/totalizers.json\", \"r\") as t:\n totalizers = json.load(t)\n if not totalizers:\n logger.info(\"-----INITIALIZING TOTALIZERS-----\")\n totalizers = {\n \"day\": 0,\n \"week\": 0,\n \"month\": 0,\n \"year\": 0,\n \"lifetime\": 0,\n \"dayHolding\": 0,\n \"weekHolding\": 0,\n \"monthHolding\": 0,\n \"yearHolding\": 0\n }\n except:\n totalizers = {\n \"day\": 0,\n \"week\": 0,\n \"month\": 0,\n \"year\": 0,\n \"lifetime\": 0,\n \"dayHolding\": 0,\n \"weekHolding\": 0,\n \"monthHolding\": 0,\n \"yearHolding\": 0\n }\n return totalizers\n\ndef saveTotalizers(totalizers):\n try:\n with open(\"/var/user/files/totalizers.json\", \"w\") as t:\n json.dump(totalizers,t)\n except Exception as e:\n logger.error(e)\n\ndef resetTotalizers():\n try:\n totalizers = get_totalizers()\n \n totalizers[\"dayHolding\"] = 0\n totalizers[\"weekHolding\"] = 0\n totalizers[\"monthHolding\"] = 0\n totalizers[\"yearHolding\"] = 0\n saveTotalizers(totalizers) \n return True\n except Exception as e:\n logger.error(e)\n return e\n\ndef receiveCommand(topic, payload):\n logger.debug(topic)\n logger.debug(json.loads(payload))\n p = json.loads(payload)\n command = p[\"method\"]\n if command == \"resetTotalizers\":\n r = resetTotalizers()\n \n if r == True:\n message = [{\"name\": \"flowmeter\", \"measures\":[{\"name\":\"reset_totalizers\", \"value\": 1}]}]\n try:\n resp = write(message)\n payload = {\n \"ts\": (round(dt.timestamp(dt.now())/600)*600)*1000,\n \"values\": {\n \"day_volume\": 0,\n \"yesterday_volume\": 0,\n \"week_volume\": 0,\n \"last_week_volume\": 0,\n \"month_volume\": 0,\n \"last_month_volume\": 0,\n \"year_volume\": 0,\n \"last_year_volume\": 0\n }\n }\n publish(\"v1/devices/me/telemetry\",json.dumps(payload))\n except Exception as e:\n logger.error(\"Failed to write message\")\n logger.error(e)\n \n ack(topic.split(\"/\")[-1], r)\n\ndef ack(msgid, r):\n #logger.debug(msgid)\n #logger.debug(mac)\n #logger.debug(name)\n #logger.debug(value)\n publish(\"v1/devices/me/rpc/response/\" + str(msgid), json.dumps({\"msg\": {\"time\": (round(dt.timestamp(dt.now())/600)*600)*1000, \"response\": r}, \"metadata\": \"\", \"msgType\": \"\"}))", + "msgType": 0, + "cloudName": "default", + "trigger": "command_event" + } + ] + }, + "mindspheres": [ + { + "name": "mindsphere", + "enable": 0, + "_id": "mindsphereeafcdf", + "args": { + "hostEnvironment": "eu1", + "hostDomain": "mindsphere.io", + "appName": "", + "appVersion": "", + "clientId": "", + "clientSecret": "", + "authType": "tenant", + "hostTenant": "", + "userTenant": "", + "timeout": 10, + "statusTimeout": 300, + "enableOfflinePut": 0 + }, + "mindsphereputs": [] + } + ], + "labels": [ + { + "key": "SN", + "value": "GF5022443062765", + "_id": "0000685c537f9409" + }, + { + "key": "MAC", + "value": "ec:6e:79:0a:07:b7", + "_id": "0001685c537f17fd" + } + ], + "serverList": [], + "modbusSlave": { + "enable": 0, + "protocol": "Modbus-TCP", + "port": 502, + "slaveAddr": 1, + "int16Ord": "ab", + "int32Ord": "abcd", + "float32Ord": "abcd", + "maxConnection": 5, + "mapping_table": [], + "useRawvalue": 1, + "mappingTable": [ + { + "name": "1", + "slaveAddr": 1, + "_id": "modbusTCPSlave01", + "measures": [] + } + ] + }, + "modbusRTUSlave": { + "enable": 0, + "protocol": "Modbus-RTU", + "coms": "rs485", + "slaveAddr": 1, + "int16Ord": "ab", + "int32Ord": "abcd", + "float32Ord": "abcd", + "mapping_table": [], + "useRawvalue": 1, + "mappingTable": [ + { + "name": "1", + "slaveAddr": 1, + "_id": "modbusRTUSlave01", + "measures": [] + } + ] + }, + "iec104Server": { + "enable": 0, + "cotSize": 2, + "port": 2404, + "serverList": [ + { + "asduAddr": 1 + } + ], + "kValue": 12, + "wValue": 8, + "t0": 30, + "t1": 15, + "t2": 10, + "t3": 20, + "maximumLink": 5, + "timeSet": 1, + "byteOrder": "abcd", + "useRawvalue": 1, + "connectMode": "tcpServer", + "enableSpontaneous": 1, + "uploadPeriod": 0, + "asduLen": 2, + "mapping_table": [] + }, + "iec101Server": { + "enable": 0, + "coms": "rs485", + "mode": "UnBalance", + "protocolMode": 0, + "linkLen": 2, + "linkAddr": 1, + "asduLen": 2, + "ioaLen": 3, + "cotLen": 2, + "serverList": [ + { + "asduAddr": 1 + } + ], + "linkTimeOut": 2000, + "timeSet": 1, + "idleTimeOut": 10000, + "byteOrder": "abcd", + "useRawvalue": 1, + "enableSpontaneous": 1, + "uploadPeriod": 0, + "mappingTable": { + "YX": [], + "YC": [], + "YK": [] + } + }, + "iec104Client": { + "enable": 0, + "connectType": 2, + "serverAddr": "ipower.inhandcloud.cn", + "serverPort": 2404, + "communicationCode": "", + "protocol": 1, + "asduAddr": 1, + "tls": 0, + "mapping_table": { + "YX": [], + "YC": [], + "YK": [] + } + }, + "opcuaServer": { + "enable": 0, + "port": 4840, + "maximumLink": 5, + "securityMode": 0, + "identifierType": "String", + "certificate": "", + "privateKey": "", + "pubsub": 0, + "useRawvalue": 1, + "mapping_table": [] + }, + "iec61850Server": { + "enable": 0, + "protocol": "iec61850Server", + "port": 102, + "iedName": "INHAND", + "LDName": "Gateway", + "ctrlMode": 1, + "authentication": 0, + "password": "123456", + "useRawvalue": 1, + "dataSet": [], + "mapping_table": [] + }, + "sl651Slave": { + "enable": 0, + "centerAaddr": 1, + "remoteAddr": "", + "addrCode": "", + "password": "", + "platform_list": [], + "useRawvalue": 1, + "addressIdentifier": "00F1", + "timeLeader": "00F0", + "reverseCRC": 0, + "mapping_table": [] + }, + "hj212Client": { + "enable": 0, + "useRawvalue": 1, + "platform_list": [], + "block_list": [], + "mapping_table": [] + }, + "bacnetServer": { + "enable": 0, + "protocol": "BACnet/IP", + "deviceId": 0, + "port": 47808, + "bbmdEnable": 0, + "useRawvalue": 1, + "mapping_table": [] + }, + "bacnetMSTPServer": { + "enable": 0, + "protocol": "BACnet/MSTP", + "deviceId": 0, + "coms": "rs485", + "maxInfoFrame": 6, + "mstpMac": 1, + "maxMaster": 10, + "useRawvalue": 1, + "mapping_table": [] + }, + "Dnp3Server": { + "enable": 0, + "protocol": "Dnp3-TCP", + "slaveAddr": 1, + "masterAddr": 2, + "port": 20000, + "useRawvalue": 1, + "enableUnsol": 0, + "maxFrasize": 4096, + "layerTimeout": 1000, + "linkRetry": 5, + "enableLink": 0, + "mapping_table": [] + }, + "snmpAgent": { + "enable": 0, + "port": 161, + "useRawvalue": 1, + "version": 3, + "userName": "", + "enableAuth": 0, + "readWrite": "ro", + "enable_trap": 0, + "mapping_table": [] + }, + "southMetadata": {}, + "bindMetadata": { + "version": "", + "timestamp": "" + }, + "bindConfig": { + "enable": 0, + "bind": { + "modelId": "", + "modelName": "", + "srcId": "", + "srcName": "", + "devId": "", + "devName": "" + }, + "varGroups": [], + "variables": [], + "alerts": [] + }, + "templates": {}, + "version": "3.2.1" +} \ No newline at end of file diff --git a/code snippets/getPLCData.ipynb b/code snippets/getPLCData.ipynb index 150c8d9..cb1e2f1 100644 --- a/code snippets/getPLCData.ipynb +++ b/code snippets/getPLCData.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 20, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -10,25 +10,25 @@ "import json, pprint\n", "from datetime import datetime as dt\n", "import csv\n", - "import re\n" + "import re, time\n" ] }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ - "ip_address = \"107.84.248.206\"# \"ngrok.iot.inhandnetworks.com:3054\" # \"166.141.90.208\"\n", - "device_type = \"dane_water\"\n", + "ip_address = \"166.193.23.21\"# \"ngrok.iot.inhandnetworks.com:3054\" # \"166.141.90.208\"\n", + "device_type = \"fk_overflow_pump\"\n", "today = dt.now().strftime(\"%Y_%B_%d\")\n", - "filename = f\"tag_dump_{today}_Station_3.json\"\n", + "filename = f\"tag_dump_{today}.json\"\n", "path = f'/Users/nico/Documents/GitHub/HP_InHand_IG502/Pub_Sub/{device_type}/thingsboard/' # code snippets/tag_dump.json'" ] }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -43,7 +43,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -78,19 +78,11 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CSV file created: /Users/nico/Documents/GitHub/HP_InHand_IG502/Pub_Sub/dane_water/thingsboard/Station_3.csv\n" - ] - } - ], + "outputs": [], "source": [ - "controller_name = \"Station_3\"\n", + "controller_name = \"leak_detection\"\n", "filename = f\"{controller_name}.csv\"\n", "header = [\n", " \"MeasuringPointName\",\"ControllerName\",\"GroupName\",\"UploadType\",\"DeadZoneType\",\"DeadZonePercent\",\n", @@ -169,11 +161,100 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Alarm_Enable\n", + "Level_Override\n", + "P001_AUTO_FBK\n", + "P001_HAND_FBK\n", + "P001_OVERLOAD_ALARM\n", + "P001_OVERLOAD_FBK\n", + "P001_RUN_CMD\n", + "P001_RUN_FAIL_ALARM\n", + "P001_RUN_FBK\n", + "P001_START_BTN_FBK\n", + "P002_AUTO_FBK\n", + "P002_HAND_FBK\n", + "P002_OVERLOAD_ALARM\n", + "P002_OVERLOAD_FBK\n", + "P002_RUN_CMD\n", + "P002_RUN_FAIL_ALARM\n", + "P002_RUN_FBK\n", + "P002_START_BTN_FBK\n", + "Pond_1_CU_Ft\n", + "Pond_1_Cubic_Feet_To_Barrels\n", + "Pond_1_Dim_A\n", + "Pond_1_Dim_B\n", + "Pond_1_Dim_C\n", + "Pond_1_Dim_D\n", + "Pond_1_EU_Max\n", + "Pond_1_EU_Min\n", + "Pond_1_Hi_Alarm\n", + "Pond_1_Hi_Alarm_Enable\n", + "Pond_1_Hi_Alarm_Enabled\n", + "Pond_1_Hi_Clr_Setpoint\n", + "Pond_1_Hi_Reset\n", + "Pond_1_Hi_Set\n", + "Pond_1_Hi_Setpoint\n", + "Pond_1_Input_Max\n", + "Pond_1_Input_Min\n", + "Pond_1_Lev\n", + "Pond_1_Lev_Temp\n", + "Pond_1_Lo_Alarm\n", + "Pond_1_Lo_Clr_Setpoint\n", + "Pond_1_Lo_Reset\n", + "Pond_1_Lo_Set\n", + "Pond_1_Lo_Setpoint\n", + "Pond_1_ScaledMax\n", + "Pond_1_ScaledMin\n", + "Pond_1_Tot_Bbls_Temp\n", + "Pond_1_Total_Barrels\n", + "Run_Level_Perm\n", + "Start_Level_spt\n", + "Stop_Level_spt\n", + "_IO_EM_AI_00\n", + "_IO_EM_AI_01\n", + "_IO_EM_AI_02\n", + "_IO_EM_AI_03\n", + "_IO_EM_AO_00\n", + "_IO_EM_DI_00\n", + "_IO_EM_DI_01\n", + "_IO_EM_DI_02\n", + "_IO_EM_DI_03\n", + "_IO_EM_DI_04\n", + "_IO_EM_DI_05\n", + "_IO_EM_DI_06\n", + "_IO_EM_DI_07\n", + "_IO_EM_DI_08\n", + "_IO_EM_DI_09\n", + "_IO_EM_DI_10\n", + "_IO_EM_DI_11\n", + "_IO_EM_DO_00\n", + "_IO_EM_DO_01\n", + "_IO_EM_DO_02\n", + "_IO_EM_DO_03\n", + "_IO_EM_DO_04\n", + "_IO_EM_DO_05\n", + "_IO_EM_DO_06\n", + "_IO_P1_AI_00\n", + "_IO_P1_AI_01\n", + "_IO_P1_AI_02\n", + "_IO_P1_AI_03\n" + ] + } + ], "source": [ - "print(plctags)" + "tags = []\n", + "for x in plctags:\n", + " tags.append(x[\"tag_name\"])\n", + "tags.sort()\n", + "for x in tags:\n", + " print(x)" ] }, { @@ -187,12 +268,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Pond_1_Total_Barrels, nan, REAL, None\n" + ] + } + ], "source": [ "with LogixDriver(ip_address) as plc:\n", - " print(plc.read(\"Pond_1_Lev\"))" + " print(plc.read(\"Pond_1_Total_Barrels\"))" ] }, { @@ -202,23 +291,13 @@ "outputs": [], "source": [ "readtags = [\n", - " \"Lact_01_Monthly_Total\",\n", - " \"Lact_01_Prev_Month_Total\",\n", - " \"Lact_01_Today_Total\",\n", - " \"Lact_01_Yesterday_Total\",\n", - " \"Lact_02_Monthly_Total\",\n", - " \"Lact_02_Prev_Month_Total\",\n", - " \"Lact_02_Today_Total\",\n", - " \"Lact_02_Yesterday_Total\",\n", - " \"XferPump_01_Daily_Totalizer.Total\",\n", - " \"XferPump_01_Daily_Totalizer.OldTotal\",\n", - " \"XferPump_02_Monthly_Totalizer.Total\",\n", - " \"XferPump_02_Monthly_Totalizer.OldTotal\",\n", - " \"Val_Water_Xfer_Current_Day\",\n", - " \"Val_Water_Xfer_Prev_Day\"\n", + " \"P001_RUN_FBK\",\n", + " \"Leak_1_Lev\"\n", "]\n", - "with LogixDriver('63.40.227.154') as plc:\n", - " print(*plc.read(*readtags), sep=\"\\n\")\n", + "with LogixDriver(ip_address) as plc:\n", + " while(True):\n", + " print(*plc.read(*readtags), sep=\"\\n\")\n", + " time.sleep(30)\n", " " ] }, diff --git a/code snippets/parseIncomingIPs.ipynb b/code snippets/parseIncomingIPs.ipynb new file mode 100644 index 0000000..fbf5b4e --- /dev/null +++ b/code snippets/parseIncomingIPs.ipynb @@ -0,0 +1,221 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "c3d3179a", + "metadata": {}, + "outputs": [], + "source": [ + "import re\n", + "from pathlib import Path\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "bf7cab93", + "metadata": {}, + "outputs": [], + "source": [ + "LOG_FILE = Path('/Users/nico/Downloads/history(1).log') # change to your real filename\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "3fb97df3", + "metadata": {}, + "outputs": [], + "source": [ + "# Regular expressions\n", + "# 1. find lines that mention ACCEPTIN or DROPIN\n", + "# 2. extract the SRC=… and DPT=… fields\n", + "rx_match = re.compile(r'\\b(?:ACCEPTIN|DROPIN)\\b')\n", + "rx_src = re.compile(r'SRC=(\\S+)')\n", + "rx_dpt = re.compile(r'DPT=(\\S+)')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "80bda503", + "metadata": {}, + "outputs": [], + "source": [ + "src_set = set()\n", + "dpt_set = set()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "2c65a8a8", + "metadata": {}, + "outputs": [], + "source": [ + "for line in LOG_FILE.read_text().splitlines():\n", + " if rx_match.search(line):\n", + " src = rx_src.search(line)\n", + " dpt = rx_dpt.search(line)\n", + " if src:\n", + " src_set.add(src.group(1))\n", + " if dpt:\n", + " dpt_set.add(dpt.group(1))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "ee8d993a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "SRC addresses (unique):\n", + "101.109.1.155\n", + "101.126.65.104\n", + "103.167.90.33\n", + "129.212.181.192\n", + "139.19.117.131\n", + "143.244.143.105\n", + "146.88.240.102\n", + "149.100.11.243\n", + "157.230.88.176\n", + "159.203.22.30\n", + "161.35.89.149\n", + "162.199.59.89\n", + "162.243.92.131\n", + "164.52.0.92\n", + "164.92.186.91\n", + "165.227.34.24\n", + "178.20.210.151\n", + "178.20.210.152\n", + "185.226.197.20\n", + "185.243.98.11\n", + "185.244.104.2\n", + "185.44.76.10\n", + "192.155.81.124\n", + "193.142.147.209\n", + "193.163.125.168\n", + "193.163.125.172\n", + "193.32.162.146\n", + "193.34.213.150\n", + "194.0.234.20\n", + "194.180.48.63\n", + "196.251.100.49\n", + "196.251.100.74\n", + "198.23.193.70\n", + "198.235.24.220\n", + "198.235.24.255\n", + "199.30.231.6\n", + "205.210.31.254\n", + "209.38.80.186\n", + "211.197.158.113\n", + "217.119.139.38\n", + "222.186.13.133\n", + "40.118.131.195\n", + "40.124.80.250\n", + "45.140.140.15\n", + "45.58.127.135\n", + "51.158.205.47\n", + "51.159.195.137\n", + "52.177.127.126\n", + "62.60.131.204\n", + "64.31.56.53\n", + "64.62.156.14\n", + "64.62.197.37\n", + "64.62.197.80\n", + "66.175.215.158\n", + "71.6.134.230\n", + "77.90.185.43\n", + "78.130.40.117\n", + "78.159.130.8\n", + "80.94.92.166\n", + "81.22.193.93\n", + "85.235.74.21\n", + "88.218.193.185\n", + "89.42.231.77\n", + "91.199.163.52\n", + "91.224.92.54\n", + "91.224.92.94\n", + "91.232.238.112\n", + "94.100.26.36\n" + ] + } + ], + "source": [ + "print(\"SRC addresses (unique):\")\n", + "for addr in sorted(src_set):\n", + " print(addr)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "238c0796", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "68" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(src_set)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "8c5730a3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "DPT ports (unique):\n", + "22\n", + "443\n" + ] + } + ], + "source": [ + "print(\"\\nDPT ports (unique):\")\n", + "for port in sorted(dpt_set):\n", + " print(port)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}