diff --git a/Pub_Sub/fk_plcpond/sendData.py b/Pub_Sub/fk_plcpond/sendData.py new file mode 100644 index 0000000..009a2af --- /dev/null +++ b/Pub_Sub/fk_plcpond/sendData.py @@ -0,0 +1,363 @@ +import json, os, time, shutil +from datetime import datetime as dt +from common.Logger import logger +from quickfaas.remotebus import publish +from mobiuspi_lib.gps import GPS +from quickfaas.global_dict import get as get_params +from quickfaas.global_dict import _set_global_args + +def reboot(): + #basic = Basic() + logger.info("!" * 10 + "REBOOTING DEVICE" + "!"*10) + r = os.popen("kill -s SIGHUP `cat /var/run/python/supervisord.pid`").read() + logger.info(f"REBOOT : {r}") + +def checkFileExist(filename): + path = "/var/user/files" + if not os.path.exists(path): + logger.info("no folder making files folder in var/user") + os.makedirs(path) + with open(path + "/" + filename, "a") as f: + json.dump({}, f) + if not os.path.exists(path + "/" + filename): + logger.info("no creds file making creds file") + with open(path + "/" + filename, "a") as f: + json.dump({}, f) + +def convertDStoJSON(ds): + j = dict() + for x in ds: + j[x["key"]] = x["value"] + return j + +def convertJSONtoDS(j): + d = [] + for key in j.keys(): + d.append({"key": key, "value": j[key]}) + return d + +def checkCredentialConfig(): + logger.info("CHECKING CONFIG") + cfgpath = "/var/user/cfg/device_supervisor/device_supervisor.cfg" + credspath = "/var/user/files/creds.json" + cfg = dict() + with open(cfgpath, "r") as f: + cfg = json.load(f) + clouds = cfg.get("clouds") + logger.info(clouds) + #if not configured then try to configure from stored values + if clouds[0]["args"]["clientId"] == "unknown" or clouds[0]["args"]["username"] == "unknown" or not clouds[0]["args"]["passwd"] or clouds[0]["args"]["passwd"] == "unknown": + checkFileExist("creds.json") + with open(credspath, "r") as c: + creds = json.load(c) + if creds: + logger.info("updating config with stored data") + clouds[0]["args"]["clientId"] = creds["clientId"] + clouds[0]["args"]["username"] = creds["userName"] + clouds[0]["args"]["passwd"] = creds["password"] + cfg["clouds"] = clouds + cfg = checkParameterConfig(cfg) + with open(cfgpath, "w", encoding='utf-8') as n: + json.dump(cfg, n, indent=1, ensure_ascii=False) + reboot() + else: + #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 + checkFileExist("creds.json") + with open(credspath, "r") as c: + logger.info("updating stored file with new data") + cfg = checkParameterConfig(cfg) + with open(cfgpath, "w", encoding='utf-8') as n: + json.dump(cfg, n, indent=1, ensure_ascii=False) + creds = json.load(c) + if creds: + if creds["clientId"] != clouds[0]["args"]["clientId"]: + creds["clientId"] = clouds[0]["args"]["clientId"] + if creds["userName"] != clouds[0]["args"]["username"]: + creds["userName"] = clouds[0]["args"]["username"] + if creds["password"] != clouds[0]["args"]["passwd"]: + creds["password"] = clouds[0]["args"]["passwd"] + else: + creds["clientId"] = clouds[0]["args"]["clientId"] + creds["userName"] = clouds[0]["args"]["username"] + creds["password"] = clouds[0]["args"]["passwd"] + with open(credspath, "w") as cw: + json.dump(creds,cw) + +def checkParameterConfig(cfg): + logger.info("Checking Parameters!!!!") + paramspath = "/var/user/files/params.json" + cfgparams = convertDStoJSON(cfg.get("labels")) + #check stored values + checkFileExist("params.json") + with open(paramspath, "r") as f: + logger.info("Opened param storage file") + params = json.load(f) + if params: + if cfgparams != params: + #go through each param + #if not "unknown" and cfg and params aren't the same take from cfg likely updated manually + #if key in cfg but not in params copy to params + logger.info("equalizing params between cfg and stored") + for key in cfgparams.keys(): + try: + if cfgparams[key] != params[key] and cfgparams[key] != "unknown": + params[key] = cfgparams[key] + except: + params[key] = cfgparams[key] + cfg["labels"] = convertJSONtoDS(params) + _set_global_args(convertJSONtoDS(params)) + with open(paramspath, "w") as p: + json.dump(params, p) + else: + with open(paramspath, "w") as p: + logger.info("initializing param file with params in memory") + json.dump(convertDStoJSON(get_params()), p) + cfg["labels"] = get_params() + + return cfg + +payload = {} + +def initialize_totalizers(): + return { + "day": 0, + "week": 0, + "month": 0, + "year": 0, + "lifetime": 0, + "dayHolding": 0, + "weekHolding": 0, + "monthHolding": 0, + "yearHolding": 0, + "rolloverCounter": 0 + } + +def getTotalizers(file_path="/var/user/files/totalizers.json"): + """ + Retrieves totalizer data from a JSON file. + + :param file_path: Path to the JSON file storing totalizer data. + :return: Dictionary containing totalizer values. + """ + try: + with open(file_path, "r") as t: + totalizers = json.load(t) + if not totalizers or not isinstance(totalizers, dict): + logger.info("Invalid data format in the file. Initializing totalizers.") + totalizers = initialize_totalizers() + except FileNotFoundError: + logger.info("File not found. Initializing totalizers.") + totalizers = initialize_totalizers() + except json.JSONDecodeError: + timestamp = dt.now().strftime("%Y%m%d_%H%M%S") + # Split the file path and insert the timestamp before the extension + file_name, file_extension = os.path.splitext(file_path) + backup_file_path = f"{file_name}_{timestamp}{file_extension}" + shutil.copyfile(file_path, backup_file_path) + logger.error(f"Error decoding JSON. A backup of the file is created at {backup_file_path}. Initializing totalizers.") + totalizers = initialize_totalizers() + return totalizers + +# Helper function to split the payload into chunks +def chunk_payload(payload, chunk_size=20): + chunked_values = list(payload["values"].items()) + for i in range(0, len(chunked_values), chunk_size): + yield { + "ts": payload["ts"], + "values": dict(chunked_values[i:i+chunk_size]) + } + +def sendData(message): + payload = {} + payload["ts"] = (round(dt.timestamp(dt.now())/600)*600)*1000 + payload["values"] = {} + resetPayload = {"ts": "", "values": {}} + dayReset, weekReset, monthReset, yearReset = False, False, False, False + totalizer_1 = None + try: + checkCredentialConfig() + except Exception as e: + logger.error(e) + for measure in message["measures"]: + try: + logger.debug(measure) + if measure["name"] in ["fit_1_total"]: + totalizer_1 = measure["value"] + payload["values"][measure["name"]] = measure["value"] + except Exception as e: + logger.error(e) + try: + if totalizer_1 != None: + real_lifetime = totalizer_1 + payload["values"]["fit_1_year_volume"], yearReset = totalizeYear(real_lifetime) + payload["values"]["fit_1_month_volume"], monthReset = totalizeMonth(real_lifetime) + payload["values"]["fit_1_week_volume"], weekReset = totalizeWeek(real_lifetime) + payload["values"]["fit_1_day_volume"], dayReset = totalizeDay(real_lifetime) + payload["values"]["fit_1_real_lifetime"] = real_lifetime + except Exception as e: + logger.error(e) + + for chunk in chunk_payload(payload=payload): + publish(__topic__, json.dumps(chunk), __qos__) + time.sleep(2) + publish("v1/devices/me/attributes", json.dumps({"latestReportTime": (round(dt.timestamp(dt.now())/600)*600)*1000}), __qos__) + + if dayReset: + resetPayload["values"]["fit_1_yesterday_volume"] = payload["values"]["fit_1_day_volume"] + resetPayload["values"]["fit_1_day_volume"] = 0 + if weekReset: + resetPayload["values"]["fit_1_last_week_volume"] = payload["values"]["fit_1_week_volume"] + resetPayload["values"]["fit_1_week_volume"] = 0 + if monthReset: + resetPayload["values"]["fit_1_last_month_volume"] = payload["values"]["fit_1_month_volume"] + resetPayload["values"]["fit_1_month_volume"] = 0 + if yearReset: + resetPayload["values"]["fit_1_last_year_volume"] = payload["values"]["fit_1_year_volume"] + resetPayload["values"]["fit_1_year_volume"] = 0 + + if resetPayload["values"]: + resetPayload["ts"] = 1 + (round(dt.timestamp(dt.now())/600)*600)*1000 + publish(__topic__, json.dumps(resetPayload), __qos__) + +def saveTotalizers(totalizers, file_path="/var/user/files/totalizers.json"): + """ + Saves totalizer data to a JSON file. + + :param totalizers: Dictionary containing totalizer values to be saved. + :param file_path: Path to the JSON file where totalizer data will be saved. + """ + try: + with open(file_path, "w") as t: + json.dump(totalizers, t) + except (IOError, OSError, json.JSONEncodeError) as e: + logger.error(f"Error saving totalizers to {file_path}: {e}") + raise # Optionally re-raise the exception if it should be handled by the caller + +def totalizeDay(lifetime, max_retries=3, retry_delay=2): + """ + Update and save daily totalizers based on the lifetime value. + + :param lifetime: The current lifetime total. + :param max_retries: Maximum number of save attempts. + :param retry_delay: Delay in seconds between retries. + :return: A tuple containing the calculated value and a boolean indicating if a reset occurred, or (None, False) if save fails. + """ + totalizers = getTotalizers() + now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600) + reset = False + value = lifetime - totalizers["dayHolding"] + + if not int(now.strftime("%d")) == int(totalizers["day"]): + totalizers["dayHolding"] = lifetime + totalizers["day"] = int(now.strftime("%d")) + + for attempt in range(max_retries): + try: + saveTotalizers(totalizers) + reset = True + return (value, reset) + except Exception as e: + logger.error(f"Attempt {attempt + 1} failed to save totalizers: {e}") + if attempt < max_retries - 1: + time.sleep(retry_delay) + else: + logger.error("All attempts to save totalizers failed.") + return (None, False) + + return (value, reset) + +def totalizeWeek(lifetime, max_retries=3, retry_delay=2): + """ + Update and save weekly totalizers based on the lifetime value. + + :param lifetime: The current lifetime total. + :param max_retries: Maximum number of save attempts. + :param retry_delay: Delay in seconds between retries. + :return: A tuple containing the calculated value and a boolean indicating if a reset occurred, or (None, False) if save fails. + """ + totalizers = getTotalizers() + now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600) + reset = False + value = lifetime - totalizers["weekHolding"] + + if (not now.strftime("%U") == totalizers["week"] and now.strftime("%a") == "Sun") or totalizers["week"] == 0: + totalizers["weekHolding"] = lifetime + totalizers["week"] = now.strftime("%U") + + for attempt in range(max_retries): + try: + saveTotalizers(totalizers) + reset = True + return (value, reset) + except Exception as e: + logger.error(f"Attempt {attempt + 1} failed to save totalizers: {e}") + if attempt < max_retries - 1: + time.sleep(retry_delay) + else: + logger.error("All attempts to save totalizers failed.") + return (None, False) + return (value, reset) + +def totalizeMonth(lifetime, max_retries=3, retry_delay=2): + """ + Update and save monthly totalizers based on the lifetime value. + + :param lifetime: The current lifetime total. + :param max_retries: Maximum number of save attempts. + :param retry_delay: Delay in seconds between retries. + :return: A tuple containing the calculated value and a boolean indicating if a reset occurred, or (None, False) if save fails. + """ + totalizers = getTotalizers() + now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600) + reset = False + value = lifetime - totalizers["monthHolding"] + + if not int(now.strftime("%m")) == int(totalizers["month"]): + totalizers["monthHolding"] = lifetime + totalizers["month"] = now.strftime("%m") + + for attempt in range(max_retries): + try: + saveTotalizers(totalizers) + reset = True + return (value, reset) + except Exception as e: + logger.error(f"Attempt {attempt + 1} failed to save totalizers: {e}") + if attempt < max_retries - 1: + time.sleep(retry_delay) + else: + logger.error("All attempts to save totalizers failed.") + return (None, False) + + return (value,reset) + +def totalizeYear(lifetime, max_retries=3, retry_delay=2): + """ + Update and save yearly totalizers based on the lifetime value. + + :param lifetime: The current lifetime total. + :param max_retries: Maximum number of save attempts. + :param retry_delay: Delay in seconds between retries. + :return: A tuple containing the calculated value and a boolean indicating if a reset occurred, or (None, False) if save fails. + """ + totalizers = getTotalizers() + now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600) + reset = False + value = lifetime - totalizers["yearHolding"] + + if not int(now.strftime("%Y")) == int(totalizers["year"]): + totalizers["yearHolding"] = lifetime + totalizers["year"] = now.strftime("%Y") + + for attempt in range(max_retries): + try: + saveTotalizers(totalizers) + reset = True + return (value, reset) + except Exception as e: + logger.error(f"Attempt {attempt + 1} failed to save totalizers: {e}") + if attempt < max_retries - 1: + time.sleep(retry_delay) + else: + logger.error("All attempts to save totalizers failed.") + return (None, False) diff --git a/Pub_Sub/fk_plcpond_gateway/thingsboard/be-pond-transfer.csv b/Pub_Sub/fk_plcpond_gateway/thingsboard/be-pond-transfer.csv index 1996f23..85ddda4 100644 --- a/Pub_Sub/fk_plcpond_gateway/thingsboard/be-pond-transfer.csv +++ b/Pub_Sub/fk_plcpond_gateway/thingsboard/be-pond-transfer.csv @@ -2,6 +2,8 @@ MeasuringPointName,ControllerName,GroupName,UploadType,DeadZonePercent,DataType, alarm_enable_cmd,plcpond,default,periodic,,INT,,0,,,Alarm_Enable,,,rw,,,none,,,,,,,,,,,,,,,0 auto,plcpond,default,periodic,,BIT,,,,0,Auto,,,rw,,,none,,,,,,,,,,,,,0,,0 discharge_out,plcpond,default,periodic,,FLOAT,,,,,DisPSI_Out,2,,ro,,,none,,,,,,,,,,,,,,,0 +fit_1_rate,plcpond,default,periodic,,FLOAT,,,,,FIT1_FLOWRATE,2,,ro,,,none,,,,,,,,,,,,,,,0 +fit_1_total,plcpond,default,periodic,,FLOAT,,,,,FIT1_TOTAL_FLOWRATE,2,,ro,,,none,,,,,,,,,,,,,,,0 fit_rate,plcpond,default,periodic,,FLOAT,,,,,FIT_Rate,2,,ro,,,none,,,,,,,,,,,,,,,0 hand,plcpond,default,periodic,,BIT,,,,0,Hand,,,ro,,,none,,,,,,,,,,,,,0,,0 off,plcpond,default,periodic,,BIT,,,,0,OFF,,,ro,,,none,,,,,,,,,,,,,0,,0 diff --git a/Pub_Sub/fk_plcpond_gateway/thingsboard/tag_dump_2026_January_07_be_pond.json b/Pub_Sub/fk_plcpond_gateway/thingsboard/tag_dump_2026_January_07_be_pond.json new file mode 100644 index 0000000..72c7999 --- /dev/null +++ b/Pub_Sub/fk_plcpond_gateway/thingsboard/tag_dump_2026_January_07_be_pond.json @@ -0,0 +1,2160 @@ +{ + "_IO_EM_DO_00": { + "tag_name": "_IO_EM_DO_00", + "dim": 0, + "alias": true, + "instance_id": 1, + "symbol_address": 1044, + "symbol_object_address": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Pond_2_Hi_Set": { + "tag_name": "Pond_2_Hi_Set", + "dim": 0, + "alias": true, + "instance_id": 32, + "symbol_address": 1127, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Pond_2_Hi_Reset": { + "tag_name": "Pond_2_Hi_Reset", + "dim": 0, + "alias": true, + "instance_id": 33, + "symbol_address": 1128, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Pond_2_Hi_Alarm": { + "tag_name": "Pond_2_Hi_Alarm", + "dim": 0, + "alias": true, + "instance_id": 34, + "symbol_address": 1129, + "symbol_object_address": 1077559172, + "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": 1077559172, + "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": 1077559172, + "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": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Pond_2_Lo_Set": { + "tag_name": "Pond_2_Lo_Set", + "dim": 0, + "alias": true, + "instance_id": 38, + "symbol_address": 1133, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Pond_2_Lo_Reset": { + "tag_name": "Pond_2_Lo_Reset", + "dim": 0, + "alias": true, + "instance_id": 39, + "symbol_address": 1134, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Pond_2_Lo_Alarm": { + "tag_name": "Pond_2_Lo_Alarm", + "dim": 0, + "alias": true, + "instance_id": 40, + "symbol_address": 1135, + "symbol_object_address": 1077559172, + "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": 1077559172, + "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": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Save": { + "tag_name": "Save", + "dim": 0, + "alias": true, + "instance_id": 43, + "symbol_address": 1138, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Pump_Status": { + "tag_name": "Pump_Status", + "dim": 0, + "alias": true, + "instance_id": 44, + "symbol_address": 1139, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Hand": { + "tag_name": "Hand", + "dim": 0, + "alias": true, + "instance_id": 45, + "symbol_address": 1140, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Auto": { + "tag_name": "Auto", + "dim": 0, + "alias": true, + "instance_id": 46, + "symbol_address": 1141, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Pump_Permissive": { + "tag_name": "Pump_Permissive", + "dim": 0, + "alias": true, + "instance_id": 47, + "symbol_address": 1142, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "Run_Perm": { + "tag_name": "Run_Perm", + "dim": 0, + "alias": true, + "instance_id": 48, + "symbol_address": 1143, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "DisPSI_Out_Hi_Set": { + "tag_name": "DisPSI_Out_Hi_Set", + "dim": 0, + "alias": true, + "instance_id": 49, + "symbol_address": 1144, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "DisPSI_Out_Hi_Reset": { + "tag_name": "DisPSI_Out_Hi_Reset", + "dim": 0, + "alias": true, + "instance_id": 50, + "symbol_address": 1145, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "DisPSI_Out_Hi_Alarm": { + "tag_name": "DisPSI_Out_Hi_Alarm", + "dim": 0, + "alias": true, + "instance_id": 51, + "symbol_address": 1146, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "DisPSI_Out_Lo_Set": { + "tag_name": "DisPSI_Out_Lo_Set", + "dim": 0, + "alias": true, + "instance_id": 52, + "symbol_address": 1147, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "DisPSI_Out_Lo_Reset": { + "tag_name": "DisPSI_Out_Lo_Reset", + "dim": 0, + "alias": true, + "instance_id": 53, + "symbol_address": 1148, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "DisPSI_Out_Lo_Alarm": { + "tag_name": "DisPSI_Out_Lo_Alarm", + "dim": 0, + "alias": true, + "instance_id": 54, + "symbol_address": 1149, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "FIT_Rate_Hi_Set": { + "tag_name": "FIT_Rate_Hi_Set", + "dim": 0, + "alias": true, + "instance_id": 55, + "symbol_address": 1150, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "FIT_Rate_Hi_Reset": { + "tag_name": "FIT_Rate_Hi_Reset", + "dim": 0, + "alias": true, + "instance_id": 56, + "symbol_address": 1151, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "FIT_Rate_Hi_Alarm": { + "tag_name": "FIT_Rate_Hi_Alarm", + "dim": 0, + "alias": true, + "instance_id": 57, + "symbol_address": 1152, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "FIT_Rate_Lo_Set": { + "tag_name": "FIT_Rate_Lo_Set", + "dim": 0, + "alias": true, + "instance_id": 58, + "symbol_address": 1153, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "FIT_Rate_Lo_Reset": { + "tag_name": "FIT_Rate_Lo_Reset", + "dim": 0, + "alias": true, + "instance_id": 59, + "symbol_address": 1154, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "FIT_Rate_Lo_Alarm": { + "tag_name": "FIT_Rate_Lo_Alarm", + "dim": 0, + "alias": true, + "instance_id": 60, + "symbol_address": 1155, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "BOOL", + "data_type_name": "BOOL", + "bit_position": 0, + "tag_type": "atomic" + }, + "OFF": { + "tag_name": "OFF", + "dim": 0, + "alias": true, + "instance_id": 61, + "symbol_address": 1156, + "symbol_object_address": 1077559172, + "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": 62, + "symbol_address": 1158, + "symbol_object_address": 1077559172, + "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": 63, + "symbol_address": 1164, + "symbol_object_address": 1077559172, + "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": 64, + "symbol_address": 1168, + "symbol_object_address": 1077559172, + "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": 65, + "symbol_address": 1172, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_2_Lev": { + "tag_name": "Pond_2_Lev", + "dim": 0, + "alias": true, + "instance_id": 66, + "symbol_address": 1176, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_2_ScaledMax": { + "tag_name": "Pond_2_ScaledMax", + "dim": 0, + "alias": true, + "instance_id": 67, + "symbol_address": 1180, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_1_Hi_Setpoint": { + "tag_name": "Pond_1_Hi_Setpoint", + "dim": 0, + "alias": true, + "instance_id": 68, + "symbol_address": 1184, + "symbol_object_address": 1077559172, + "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": 69, + "symbol_address": 1188, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_2_Hi_Setpoint": { + "tag_name": "Pond_2_Hi_Setpoint", + "dim": 0, + "alias": true, + "instance_id": 70, + "symbol_address": 1192, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_2_Hi_Clr_Setpoint": { + "tag_name": "Pond_2_Hi_Clr_Setpoint", + "dim": 0, + "alias": true, + "instance_id": 71, + "symbol_address": 1196, + "symbol_object_address": 1077559172, + "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": 72, + "symbol_address": 1200, + "symbol_object_address": 1077559172, + "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": 73, + "symbol_address": 1204, + "symbol_object_address": 1077559172, + "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": 74, + "symbol_address": 1208, + "symbol_object_address": 1077559172, + "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": 75, + "symbol_address": 1212, + "symbol_object_address": 1077559172, + "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": 76, + "symbol_address": 1216, + "symbol_object_address": 1077559172, + "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": 77, + "symbol_address": 1220, + "symbol_object_address": 1077559172, + "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": 78, + "symbol_address": 1224, + "symbol_object_address": 1077559172, + "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": 79, + "symbol_address": 1228, + "symbol_object_address": 1077559172, + "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": 80, + "symbol_address": 1232, + "symbol_object_address": 1077559172, + "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": 81, + "symbol_address": 1236, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_2_Lo_Setpoint": { + "tag_name": "Pond_2_Lo_Setpoint", + "dim": 0, + "alias": true, + "instance_id": 82, + "symbol_address": 1240, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_2_Lo_Clr_Setpoint": { + "tag_name": "Pond_2_Lo_Clr_Setpoint", + "dim": 0, + "alias": true, + "instance_id": 83, + "symbol_address": 1244, + "symbol_object_address": 1077559172, + "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": 84, + "symbol_address": 1248, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_2_Lev_Temp": { + "tag_name": "Pond_2_Lev_Temp", + "dim": 0, + "alias": true, + "instance_id": 85, + "symbol_address": 1252, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_2_Dim_C": { + "tag_name": "Pond_2_Dim_C", + "dim": 0, + "alias": true, + "instance_id": 86, + "symbol_address": 1256, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_2_Dim_D": { + "tag_name": "Pond_2_Dim_D", + "dim": 0, + "alias": true, + "instance_id": 87, + "symbol_address": 1260, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_2_CU_Ft": { + "tag_name": "Pond_2_CU_Ft", + "dim": 0, + "alias": true, + "instance_id": 88, + "symbol_address": 1264, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_2_Tot_Bbls_Temp": { + "tag_name": "Pond_2_Tot_Bbls_Temp", + "dim": 0, + "alias": true, + "instance_id": 89, + "symbol_address": 1268, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_2_Cubic_Feet_To_Barrels": { + "tag_name": "Pond_2_Cubic_Feet_To_Barrels", + "dim": 0, + "alias": true, + "instance_id": 90, + "symbol_address": 1272, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_2_Dim_A": { + "tag_name": "Pond_2_Dim_A", + "dim": 0, + "alias": true, + "instance_id": 91, + "symbol_address": 1276, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_2_Dim_B": { + "tag_name": "Pond_2_Dim_B", + "dim": 0, + "alias": true, + "instance_id": 92, + "symbol_address": 1280, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_2_Total_Barrels": { + "tag_name": "Pond_2_Total_Barrels", + "dim": 0, + "alias": true, + "instance_id": 93, + "symbol_address": 1284, + "symbol_object_address": 1077559172, + "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": 94, + "symbol_address": 1288, + "symbol_object_address": 1077559172, + "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": 95, + "symbol_address": 1292, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_2_EU_Min": { + "tag_name": "Pond_2_EU_Min", + "dim": 0, + "alias": true, + "instance_id": 96, + "symbol_address": 1296, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_2_EU_Max": { + "tag_name": "Pond_2_EU_Max", + "dim": 0, + "alias": true, + "instance_id": 97, + "symbol_address": 1300, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "DisPSI_Out": { + "tag_name": "DisPSI_Out", + "dim": 0, + "alias": true, + "instance_id": 98, + "symbol_address": 1304, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "DisPSI_Out_Temp": { + "tag_name": "DisPSI_Out_Temp", + "dim": 0, + "alias": true, + "instance_id": 99, + "symbol_address": 1308, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "DisPSI_Out_ScaledMin": { + "tag_name": "DisPSI_Out_ScaledMin", + "dim": 0, + "alias": true, + "instance_id": 100, + "symbol_address": 1312, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "DisPSI_Out_ScaledMax": { + "tag_name": "DisPSI_Out_ScaledMax", + "dim": 0, + "alias": true, + "instance_id": 101, + "symbol_address": 1316, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Anaog_03_Raw": { + "tag_name": "Anaog_03_Raw", + "dim": 0, + "alias": true, + "instance_id": 102, + "symbol_address": 1320, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "FIT_Rate_Temp": { + "tag_name": "FIT_Rate_Temp", + "dim": 0, + "alias": true, + "instance_id": 103, + "symbol_address": 1324, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "FIT_Rate_ScaledMin": { + "tag_name": "FIT_Rate_ScaledMin", + "dim": 0, + "alias": true, + "instance_id": 104, + "symbol_address": 1328, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "FIT_Rate_ScaledMax": { + "tag_name": "FIT_Rate_ScaledMax", + "dim": 0, + "alias": true, + "instance_id": 105, + "symbol_address": 1332, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "FIT_Rate": { + "tag_name": "FIT_Rate", + "dim": 0, + "alias": true, + "instance_id": 106, + "symbol_address": 1336, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "DisPSI_Out_Hi_Setpoint": { + "tag_name": "DisPSI_Out_Hi_Setpoint", + "dim": 0, + "alias": true, + "instance_id": 107, + "symbol_address": 1340, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "DisPSI_Out_Hi_Clr_Setpoint": { + "tag_name": "DisPSI_Out_Hi_Clr_Setpoint", + "dim": 0, + "alias": true, + "instance_id": 108, + "symbol_address": 1344, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "DisPSI_Out_Lo_Setpoint": { + "tag_name": "DisPSI_Out_Lo_Setpoint", + "dim": 0, + "alias": true, + "instance_id": 109, + "symbol_address": 1348, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "DisPSI_Out_Lo_Clr_Setpoint": { + "tag_name": "DisPSI_Out_Lo_Clr_Setpoint", + "dim": 0, + "alias": true, + "instance_id": 110, + "symbol_address": 1352, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "FIT_Rate_Hi_Setpoint": { + "tag_name": "FIT_Rate_Hi_Setpoint", + "dim": 0, + "alias": true, + "instance_id": 111, + "symbol_address": 1356, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "FIT_Rate_Hi_Clr_Setpoint": { + "tag_name": "FIT_Rate_Hi_Clr_Setpoint", + "dim": 0, + "alias": true, + "instance_id": 112, + "symbol_address": 1360, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "FIT_Rate_Lo_Setpoint": { + "tag_name": "FIT_Rate_Lo_Setpoint", + "dim": 0, + "alias": true, + "instance_id": 113, + "symbol_address": 1364, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "FIT_Rate_Lo_Clr_Setpoint": { + "tag_name": "FIT_Rate_Lo_Clr_Setpoint", + "dim": 0, + "alias": true, + "instance_id": 114, + "symbol_address": 1368, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "Pond_2_ScaledMin": { + "tag_name": "Pond_2_ScaledMin", + "dim": 0, + "alias": true, + "instance_id": 115, + "symbol_address": 1372, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "FIT1_TOTAL_FLOWRATE": { + "tag_name": "FIT1_TOTAL_FLOWRATE", + "dim": 0, + "alias": true, + "instance_id": 118, + "symbol_address": 4712, + "symbol_object_address": 1077559172, + "software_control": 0, + "external_access": "Unknown", + "dimensions": [ + 0, + 0, + 0 + ], + "data_type": "REAL", + "data_type_name": "REAL", + "tag_type": "atomic" + }, + "FIT1_FLOWRATE": { + "tag_name": "FIT1_FLOWRATE", + "dim": 0, + "alias": true, + "instance_id": 119, + "symbol_address": 4716, + "symbol_object_address": 1077559172, + "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