From 0585dbbe021725aa95ea134661213bc86862955f Mon Sep 17 00:00:00 2001 From: Nico Melone Date: Tue, 10 Dec 2024 17:48:32 -0600 Subject: [PATCH] added rr facility --- .../thingsboard/dual_flowmeter_ma_to_tb.cfg | 743 ++ .../thingsboard/pub/sendData.py | 63 + .../thingsboard/sub/receiveCommand.py | 111 + .../thingsboard/be-pond-transfer.csv | 26 + .../thingsboard/bp-compressor.cfg | 0 .../thingsboard/fk_plcpond_tb_v3.cfg} | 0 .../thingsboard/fk_plcpond_tb_v4.cfg} | 0 .../thingsboard/pub/sendData.py | 0 .../fk_transfer/thingsboard/pub/sendData.py | 132 +- .../thingsboard/sub/receiveCommand.py | 278 + Pub_Sub/piflow/thingsboard/pub/sendData.py | 509 + Pub_Sub/rr_facility/thingsboard/alarm.csv | 92 + .../rr_facility/thingsboard/pub/sendData.py | 262 + .../rr_facility/thingsboard/rr_facility.cfg | 8537 +++++++++++++++++ .../rr_facility/thingsboard/rr_facility.csv | 383 + .../thingsboard/sub/receiveCommand.py | 75 + Pub_Sub/tankalarms/thingsboard/fee-bm.cfg | 933 ++ code snippets/setList.ipynb | 278 + 18 files changed, 12374 insertions(+), 48 deletions(-) create mode 100644 Pub_Sub/dual_flowmeter/thingsboard/dual_flowmeter_ma_to_tb.cfg create mode 100644 Pub_Sub/dual_flowmeter/thingsboard/pub/sendData.py create mode 100644 Pub_Sub/dual_flowmeter/thingsboard/sub/receiveCommand.py create mode 100644 Pub_Sub/fk_plcpond/thingsboard/be-pond-transfer.csv rename Pub_Sub/{fkplcpond => fk_plcpond}/thingsboard/bp-compressor.cfg (100%) rename Pub_Sub/{fkplcpond/thingsboard/fkplcpond_tb_v3.cfg => fk_plcpond/thingsboard/fk_plcpond_tb_v3.cfg} (100%) rename Pub_Sub/{fkplcpond/thingsboard/fkplcpond_tb_v4.cfg => fk_plcpond/thingsboard/fk_plcpond_tb_v4.cfg} (100%) rename Pub_Sub/{fkplcpond => fk_plcpond}/thingsboard/pub/sendData.py (100%) create mode 100644 Pub_Sub/oradvvfdipp/thingsboard/sub/receiveCommand.py create mode 100644 Pub_Sub/piflow/thingsboard/pub/sendData.py create mode 100644 Pub_Sub/rr_facility/thingsboard/alarm.csv create mode 100644 Pub_Sub/rr_facility/thingsboard/pub/sendData.py create mode 100644 Pub_Sub/rr_facility/thingsboard/rr_facility.cfg create mode 100644 Pub_Sub/rr_facility/thingsboard/rr_facility.csv create mode 100644 Pub_Sub/rr_facility/thingsboard/sub/receiveCommand.py create mode 100644 Pub_Sub/tankalarms/thingsboard/fee-bm.cfg create mode 100644 code snippets/setList.ipynb diff --git a/Pub_Sub/dual_flowmeter/thingsboard/dual_flowmeter_ma_to_tb.cfg b/Pub_Sub/dual_flowmeter/thingsboard/dual_flowmeter_ma_to_tb.cfg new file mode 100644 index 0000000..a1a9ee8 --- /dev/null +++ b/Pub_Sub/dual_flowmeter/thingsboard/dual_flowmeter_ma_to_tb.cfg @@ -0,0 +1,743 @@ +{ + "controllers": [ + { + "protocol": "AllenBradley MicroCip", + "name": "dual_flowmeter", + "samplePeriod": 10, + "expired": 10000, + "enablePerOnchange": 0, + "args": { + "slot": 0, + "connectTimeOut": 2000 + }, + "endpoint": "192.168.1.12:44818", + "desc": "", + "enable": 1, + "enableDebug": 0 + } + ], + "measures": [ + { + "name": "pump_1_daily_total", + "ctrlName": "dual_flowmeter", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Pump_1_Daily_Flow_Rate_Total", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "pump_1_run_status", + "ctrlName": "dual_flowmeter", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "Pump_1_Run_Status", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "bitMap": 0, + "reverseBit": 0, + "storageLwTSDB": 0 + }, + { + "name": "pump_1_flowrate", + "ctrlName": "dual_flowmeter", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Pump_1_SCL_Flow_Meter", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "pump_1_yesterdays_total", + "ctrlName": "dual_flowmeter", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Pump_1_Yesterdays_Total", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "pump_1_prevmonth_total", + "ctrlName": "dual_flowmeter", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Pump_1_PrevMonth_Total", + "decimal": 2, + "len": 1, + "readWrite": "rw", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "pump_1_month_total", + "ctrlName": "dual_flowmeter", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Pump_1_Current_Month_Total", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "pump_1_lifetime_total", + "ctrlName": "dual_flowmeter", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Pump_1_Lifetime_Flow", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "pump_1_suction", + "ctrlName": "dual_flowmeter", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Suction_PSI_TP1_Scaled", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "pump_2_daily_total", + "ctrlName": "dual_flowmeter", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Pump_2_Daily_Flow_Rate_Total", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "pump_2_run_status", + "ctrlName": "dual_flowmeter", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "Pump_2_Run_Status", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "bitMap": 0, + "reverseBit": 0, + "storageLwTSDB": 0 + }, + { + "name": "pump_2_flowrate", + "ctrlName": "dual_flowmeter", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Pump_2_SCL_Flow_Meter", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "pump_2_yesterdays_total", + "ctrlName": "dual_flowmeter", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Pump_2_Yesterdays_Total", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "pump_2_prevmonth_total", + "ctrlName": "dual_flowmeter", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Pump_2_PrevMonth_Total", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "pump_2_month_total", + "ctrlName": "dual_flowmeter", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Pump_2_Current_Month_Total", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "pump_2_lifetime_total", + "ctrlName": "dual_flowmeter", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Pump_2_Lifetime_Flow", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "pump_2_suction", + "ctrlName": "dual_flowmeter", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Suction_PSI_TP2_Scaled", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "pump_charge_psi_tp1", + "ctrlName": "dual_flowmeter", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Charge_PSI_TP1_Scaled", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "pond_1_height", + "ctrlName": "dual_flowmeter", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Pond_level_TP1_Scaled", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "1.0", + "offset": "0.0", + "storageLwTSDB": 0 + }, + { + "name": "pond_1_volume", + "ctrlName": "dual_flowmeter", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "pond1Volume", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "1.0", + "offset": "0.0", + "storageLwTSDB": 0 + }, + { + "name": "charge_pump_run_status", + "ctrlName": "dual_flowmeter", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CHARGE_PUMP_Run_Status", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "bitMap": 0, + "reverseBit": 0, + "storageLwTSDB": 0 + } + ], + "alarmLables": [ + "default" + ], + "alarms": [], + "groups": [ + { + "name": "default", + "uploadInterval": 600, + "LwTSDBSize": 1000, + "strategy": 1, + "historyDataPath": "/var/user/data/dbhome/device_supervisor/LwTSDB", + "enablePerOnchange": 0 + } + ], + "misc": { + "maxAlarmRecordSz": 2000, + "logLvl": "INFO", + "coms": [ + { + "name": "rs232", + "baud": 9600, + "bits": 8, + "stopbits": 1, + "parityChk": "n" + }, + { + "name": "rs485", + "baud": 9600, + "bits": 8, + "stopbits": 1, + "parityChk": "n" + } + ], + "cachePath": "/var/user/data/dbhome/device_supervisor/offlinedata", + "cacheSize": 10000, + "debugLogPath": "/var/user/data/dbhome/device_supervisor/debugLog", + "debugLogSize": 2000 + }, + "clouds": [ + { + "cacheSize": 10000, + "enable": 1, + "name": "default", + "type": "Standard MQTT", + "args": { + "host": "mq194.imistaway.net", + "port": 1883, + "clientId": "dawn-frac-pit", + "auth": 1, + "tls": 0, + "cleanSession": 0, + "mqttVersion": "v3.1.1", + "keepalive": 60, + "key": "", + "cert": "", + "rootCA": "", + "verifyServer": 0, + "verifyClient": 0, + "username": "admin", + "passwd": "columbus", + "authType": 1, + "willQos": 0, + "willRetain": 0, + "willTopic": "", + "willPayload": "", + "tlsAuth": "caSelfSigned" + }, + "uploadRules": [] + }, + { + "cacheSize": 10000, + "enable": 1, + "name": "ThingsBoard", + "type": "Standard MQTT", + "args": { + "host": "hp.henrypump.cloud", + "port": 1883, + "clientId": "dawn-frac-pit", + "auth": 1, + "tls": 0, + "cleanSession": 0, + "mqttVersion": "v3.1.1", + "keepalive": 60, + "key": "", + "cert": "", + "rootCA": "", + "verifyServer": 0, + "verifyClient": 0, + "username": "sqa2ot3w6hygz4sy5owq", + "passwd": "", + "willQos": 0, + "willRetain": 0, + "willTopic": "", + "willPayload": "" + }, + "uploadRules": [] + } + ], + "quickfaas": { + "genericFuncs": [], + "uploadFuncs": [ + { + "name": "Send Data", + "trigger": "measure_event", + "topic": "meshify/db/194/_/dual_flowmeter/${MAC_LOWER}", + "qos": 1, + "groups": [ + "default" + ], + "funcName": "sendData", + "script": "import json, uuid, os\nfrom common.Logger import logger\nfrom quickfaas.remotebus import publish\nfrom paho.mqtt import client\nfrom quickfaas.global_dict import get as get_params\nfrom quickfaas.global_dict import _set_global_args\n\ndef reboot():\n logger.info(\"!\" * 10 + \"REBOOTING DEVICE\" + \"!\"*10)\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 if not os.path.exists(path):\n logger.info(\"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 if not os.path.exists(path + \"/\" + filename):\n logger.info(\"no creds file making creds file\")\n with open(path + \"/\" + filename, \"a\") as f:\n json.dump({}, f)\n\ndef convertDStoJSON(ds):\n j = dict()\n for x in ds:\n j[x[\"key\"]] = x[\"value\"]\n return j\n\ndef convertJSONtoDS(j):\n d = []\n for key in j.keys():\n d.append({\"key\": key, \"value\": j[key]})\n return d\n\ndef checkCredentialConfig():\n logger.info(\"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 cfg = json.load(f)\n clouds = cfg.get(\"clouds\")\n logger.info(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 checkFileExist(\"creds.json\")\n with open(credspath, \"r\") as c:\n creds = json.load(c)\n if creds:\n logger.info(\"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 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.info(\"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\ndef checkParameterConfig(cfg):\n logger.info(\"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.info(\"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.info(\"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.info(\"initializing param file with params in memory\")\n json.dump(convertDStoJSON(get_params()), p)\n cfg[\"labels\"] = get_params()\n \n return cfg\n\n\n\nlwtData = {\n \"init\":False,\n \"client\": client.Client(client_id=str(uuid.uuid4()), clean_session=True, userdata=None, protocol=client.MQTTv311, transport=\"tcp\")\n}\ndef lwt(mac):\n try:\n #if not lwtData[\"connected\"]:\n if not lwtData[\"init\"]:\n print(\"INITIALIZING LWT CLIENT\")\n lwtData[\"client\"].username_pw_set(username=\"admin\", password=\"columbus\")\n lwtData[\"client\"].will_set(\"meshify/db/194/_/mainHP/\" + mac + \":00:00/connected\",json.dumps([{\"value\":False}]))\n lwtData[\"client\"].reconnect_delay_set(min_delay=10, max_delay=120)\n lwtData[\"init\"] = True\n print(\"Connecting to MQTT Broker for LWT purposes!!!!!!!\")\n lwtData[\"client\"].connect(\"mq194.imistaway.net\",1883, 600)\n lwtData[\"client\"].reconnect()\n lwtData[\"client\"].publish(\"meshify/db/194/_/mainHP/\" + mac + \":00:00/connected\", json.dumps([{\"value\":True}]))\n except Exception as e:\n print(\"LWT DID NOT DO THE THING\")\n print(e)\n\ndef sendData(message):\n #logger.debug(message)\n mac = __topic__.split(\"/\")[-1]\n lwt(mac)\n checkCredentialConfig()\n for measure in message[\"measures\"]:\n try:\n logger.debug(measure)\n if measure[\"name\"] in [\"pump_1_run_status\", \"pump_2_run_status\", \"charge_pump_run_status\"]:\n logger.debug(\"Converting DINT/BOOL to STRING\")\n value = convert_int(measure[\"name\"], measure[\"value\"])\n logger.debug(\"Converted {} to {}\".format(measure[\"value\"], value))\n publish(__topic__ + \":01:99/\" + measure[\"name\"], json.dumps({\"value\": value}), __qos__)\n else:\n publish(__topic__ + \":01:99/\" + measure[\"name\"], json.dumps({\"value\": measure[\"value\"]}), __qos__)\n except Exception as e:\n logger.error(e)\n \n\ndef convert_int(plc_tag, value):\n \n status_codes = {\n 0: \"Off\",\n 1: \"On\"\n }\n\n plc_tags = {\n \"pump_1_run_status\": status_codes.get(value, \"Invalid Code\"),\n \"pump_2_run_status\": status_codes.get(value, \"Invalid Code\"),\n \"charge_pump_run_status\": status_codes.get(value, \"Invalid Code\")\n }\n\n return plc_tags.get(plc_tag, \"Invalid Tag\")\n\n ", + "msgType": 0, + "cloudName": "default" + }, + { + "qos": 1, + "funcName": "sendData", + "script": "import json, os, time\nfrom datetime import datetime as dt\nfrom common.Logger import logger\nfrom quickfaas.remotebus import publish\nfrom quickfaas.global_dict import get as get_params\nfrom quickfaas.global_dict import _set_global_args\n\ndef reboot():\n logger.info(\"!\" * 10 + \"REBOOTING DEVICE\" + \"!\"*10)\n r = os.popen(\"kill -s SIGHUP `cat /var/run/python/supervisord.pid`\").read()\n logger.info(f\"REBOOT : {r}\")\n\n\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):\n #logger.debug(message)\n payload = {\"ts\": (round(dt.timestamp(dt.now())/600)*600)*1000, \"values\": {}}\n for measure in message[\"measures\"]:\n try:\n logger.debug(measure)\n if measure[\"name\"] in [\"pump_1_run_status\", \"pump_2_run_status\", \"charge_pump_run_status\"]:\n logger.debug(\"Converting DINT/BOOL to STRING\")\n value = convert_int(measure[\"name\"], measure[\"value\"])\n logger.debug(\"Converted {} to {}\".format(measure[\"value\"], value))\n payload[\"values\"][measure[\"name\"]] = value\n payload[\"values\"][measure[\"name\"] + \"_int\"] = measure[\"value\"]\n else:\n payload[\"values\"][measure[\"name\"]] = measure[\"value\"]\n except Exception as e:\n logger.error(e)\n \n for chunk in chunk_payload(payload=payload):\n publish(__topic__, json.dumps(chunk), __qos__, cloud_name=\"ThingsBoard\")\n time.sleep(2)\n publish(\"v1/devices/me/attributes\", json.dumps({\"latestReportTime\": (round(dt.timestamp(dt.now())/600)*600)*1000}), __qos__, cloud_name=\"ThingsBoard\")\n\ndef convert_int(plc_tag, value):\n \n status_codes = {\n 0: \"Off\",\n 1: \"On\"\n }\n\n plc_tags = {\n \"pump_1_run_status\": status_codes.get(value, \"Invalid Code\"),\n \"pump_2_run_status\": status_codes.get(value, \"Invalid Code\"),\n \"charge_pump_run_status\": status_codes.get(value, \"Invalid Code\")\n }\n\n return plc_tags.get(plc_tag, \"Invalid Tag\")\n\n ", + "name": "sendData", + "trigger": "measure_event", + "topic": "v1/devices/me/telemetry", + "cloudName": "ThingsBoard", + "groups": [ + "default" + ], + "msgType": 0 + } + ], + "downloadFuncs": [ + { + "name": "Commands", + "topic": "meshify/sets/194/${MAC_UPPER}:01:99", + "qos": 1, + "funcName": "receiveCommand", + "payload_type": "Plaintext", + "script": "# Enter your python code.\nimport json\nfrom quickfaas.measure import recall\nfrom common.Logger import logger\n\ndef sync(mac,value, wizard_api):\n #get new values and send\n try:\n data = recall()#json.loads(recall().decode(\"utf-8\"))\n except Exception as e:\n logger.error(e)\n logger.info(data)\n for controller in data:\n for measure in controller[\"measures\"]:\n #publish measure\n topic = \"meshify/db/194/_/dual_flowmeter/\" + mac + \"/\" + measure[\"name\"]\n if measure[\"name\"] in [\"pump_1_run_status\", \"pump_2_run_status\", \"charge_pump_run_status\"]:\n payload = [{\"value\": convert_int(measure[\"name\"], measure[\"value\"])}]\n else:\n payload = [{\"value\": measure[\"value\"]}]\n logger.debug(\"Sending on topic: {}\".format(topic))\n logger.debug(\"Sending value: {}\".format(payload))\n wizard_api.mqtt_publish(topic, json.dumps(payload))\ndef writeplctag(mac, value, wizard_api):\n try:\n value = json.loads(value.replace(\"'\",'\"'))\n logger.debug(value)\n message = {\"advvfdipp\":{value[\"tag\"]: value[\"val\"]}}\n wizard_api.write_plc_values(message)\n except Exception as e:\n logger.debug(e)\n \ndef receiveCommand(topic, payload, wizard_api):\n logger.debug(topic)\n logger.debug(json.loads(payload))\n p = json.loads(payload)[0]\n command = p[\"payload\"][\"name\"].split(\".\")[1]\n commands = {\n \"sync\": sync,\n \"writeplctag\": writeplctag,\n }\n commands[command](p[\"mac\"].lower(),p[\"payload\"][\"value\"], wizard_api)\n #logger.debug(command)\n ack(p[\"msgId\"], p[\"mac\"], command, p[\"payload\"][\"name\"].split(\".\")[1], p[\"payload\"][\"value\"], wizard_api)\n\ndef ack(msgid, mac, name, command, value, wizard_api):\n #logger.debug(mac)\n macsquish = \"\".join(mac.split(\":\")[:-2])\n maclower = \":\".join(mac.split(\":\")[:-2])\n maclower = maclower.lower()\n #logger.debug(msgid)\n #logger.debug(mac)\n #logger.debug(name)\n #logger.debug(value)\n wizard_api.mqtt_publish(\"meshify/responses/\" + str(msgid), json.dumps([{\"value\": \"{} Success Setting: {} To: {}\".format(macsquish,name, value), \"msgid\": str(msgid)}]))\n wizard_api.mqtt_publish(\"meshify/db/194/_/mainMeshify/\" + maclower + \":00:00/commands\", json.dumps([{\"value\": {\"status\": \"success\", \"value\": str(value), \"channel\": command}, \"msgid\": str(msgid)}]))\n\ndef convert_int(plc_tag, value):\n \n status_codes = {\n 0: \"Off\",\n 1: \"On\"\n }\n\n plc_tags = {\n \"pump_1_run_status\": status_codes.get(value, \"Invalid Code\"),\n \"pump_2_run_status\": status_codes.get(value, \"Invalid Code\"),\n \"charge_pump_run_status\": status_codes.get(value, \"Invalid Code\")\n }\n\n return plc_tags.get(plc_tag, \"Invalid Tag\")\n\n ", + "msgType": 0, + "trigger": "command_event", + "cloudName": "default" + }, + { + "name": "receiveCommand", + "topic": "v1/devices/me/rpc/request/+", + "qos": 1, + "funcName": "receiveCommand", + "payload_type": "Plaintext", + "script": "import json, time\nfrom datetime import datetime as dt\nfrom quickfaas.measure import recall, write\nfrom quickfaas.remotebus import publish\nfrom common.Logger import logger\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\ndef sync():\n #get new values and send\n payload = {\"ts\": round(dt.timestamp(dt.now()))*1000, \"values\": {}}\n topic = \"v1/devices/me/telemetry\"\n try:\n data = recall()#json.loads(recall().decode(\"utf-8\"))\n except Exception as e:\n logger.error(e)\n logger.debug(data)\n for controller in data:\n for measure in controller[\"measures\"]:\n #publish measure\n if measure[\"name\"] in [\"pump_1_run_status\", \"pump_2_run_status\", \"charge_pump_run_status\"]:\n payload[\"values\"][measure[\"name\"]] = convert_int(measure[\"name\"], measure[\"value\"])\n payload[\"values\"][measure[\"name\"]+ \"_int\"] = measure[\"value\"]\n else:\n payload[\"values\"][measure[\"name\"]] = measure[\"value\"]\n logger.debug(\"Sending on topic: {}\".format(topic))\n logger.debug(\"Sending value: {}\".format(payload))\n for chunk in chunk_payload(payload=payload):\n publish(topic, json.dumps(chunk), 1, cloud_name=\"ThingsBoard\")\n time.sleep(2)\n\ndef writeplctag(value):\n #value in the form {\"measurement\": , \"value\": }\n try:\n #value = json.loads(value.replace(\"'\",'\"'))\n logger.debug(value)\n #payload format: [{\"name\": \"advvfdipp\", \"measures\": [{\"name\": \"manualfrequencysetpoint\", \"value\": 49}]}]\n message = [{\"name\": \"dual_flowmeter\", \"measures\":[{\"name\":value[\"measurement\"], \"value\": value[\"value\"]}]}]\n resp = write(message) \n logger.debug(\"RETURN FROM WRITE: {}\".format(resp))\n return True\n except Exception as e:\n logger.debug(e)\n return False\n\ndef receiveCommand(topic, payload):\n try:\n logger.debug(topic)\n logger.debug(json.loads(payload))\n p = json.loads(payload)\n command = p[\"method\"]\n commands = {\n \"sync\": sync,\n \"writeplctag\": writeplctag,\n } \n if command == \"setPLCTag\":\n try:\n result = commands[\"writeplctag\"](p[\"params\"])\n logger.debug(result)\n except Exception as e:\n logger.error(e)\n #logger.debug(command)\n ack(topic.split(\"/\")[-1])\n time.sleep(5)\n sync()\n except Exception as e:\n logger.debug(e)\n \ndef receiveCommand(topic, payload, wizard_api):\n logger.debug(topic)\n logger.debug(json.loads(payload))\n p = json.loads(payload)[0]\n command = p[\"payload\"][\"name\"].split(\".\")[1]\n commands = {\n \"sync\": sync,\n \"writeplctag\": writeplctag,\n }\n commands[command](p[\"mac\"].lower(),p[\"payload\"][\"value\"], wizard_api)\n #logger.debug(command)\n ack(p[\"msgId\"], p[\"mac\"], command, p[\"payload\"][\"name\"].split(\".\")[1], p[\"payload\"][\"value\"], wizard_api)\n\ndef ack(msgid):\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\": time.time()}, \"metadata\": \"\", \"msgType\": \"\"}), 1,cloud_name=\"ThingsBoard\")\n\ndef convert_int(plc_tag, value):\n \n status_codes = {\n 0: \"Off\",\n 1: \"On\"\n }\n\n plc_tags = {\n \"pump_1_run_status\": status_codes.get(value, \"Invalid Code\"),\n \"pump_2_run_status\": status_codes.get(value, \"Invalid Code\"),\n \"charge_pump_run_status\": status_codes.get(value, \"Invalid Code\")\n }\n\n return plc_tags.get(plc_tag, \"Invalid Tag\")\n\n ", + "msgType": 0, + "cloudName": "ThingsBoard", + "trigger": "command_event" + } + ] + }, + "labels": [ + { + "key": "SN", + "value": "GF5022311031689" + }, + { + "key": "MAC", + "value": "00:18:05:28:4a:08" + }, + { + "key": "MAC_UPPER", + "value": "C4:93:00:0D:E9:41" + }, + { + "key": "MAC_LOWER", + "value": "c4:93:00:0d:e9:41" + } + ], + "modbusSlave": { + "enable": 0, + "protocol": "Modbus-TCP", + "port": 502, + "slaveAddr": 1, + "int16Ord": "ab", + "int32Ord": "abcd", + "float32Ord": "abcd", + "maxConnection": 5, + "mapping_table": [] + }, + "modbusRTUSlave": { + "enable": 0, + "protocol": "Modbus-RTU", + "coms": "rs485", + "slaveAddr": 1, + "int16Ord": "ab", + "int32Ord": "abcd", + "float32Ord": "abcd", + "mapping_table": [] + }, + "iec104Server": { + "enable": 0, + "cotSize": 2, + "port": 2404, + "serverList": [ + { + "asduAddr": 1 + } + ], + "kValue": 12, + "wValue": 8, + "t0": 15, + "t1": 15, + "t2": 10, + "t3": 20, + "maximumLink": 5, + "timeSet": 1, + "byteOrder": "abcd", + "mapping_table": [] + }, + "iec101Server": { + "enable": 0, + "coms": "rs485", + "mode": "UnBalance", + "linkLen": 2, + "linkAddr": 1, + "asduLen": 2, + "ioaLen": 3, + "cotLen": 2, + "serverList": [ + { + "asduAddr": 1 + } + ], + "linkTimeOut": 2000, + "timeSet": 1, + "idleTimeOut": 10000, + "byteOrder": "abcd", + "mapping_table": { + "YX": [], + "YC": [], + "YK": [] + } + }, + "iec104Client": { + "enable": 0, + "connectType": 2, + "serverAddr": "ipower.inhandcloud.cn", + "serverPort": 2406, + "communicationCode": "", + "protocol": 1, + "asduAddr": 1, + "tls": 1, + "verification": 1, + "mapping_table": { + "YX": [], + "YC": [], + "YK": [] + } + }, + "opcuaServer": { + "enable": 0, + "port": 4840, + "maximumLink": 5, + "securityMode": 0, + "identifierType": "String", + "certificate": "None", + "privateKey": "None", + "pubsub": 0, + "mapping_table": [] + }, + "sl651Slave": { + "enable": 0, + "centerAaddr": 1, + "remoteAddr": "", + "addrCode": "", + "password": "", + "platform_list": [], + "mapping_table": [] + }, + "hj212Client": { + "enable": 0, + "platform_list": [], + "block_list": [], + "mapping_table": [] + }, + "southMetadata": {}, + "bindMetadata": {}, + "bindConfig": { + "enable": 0, + "bind": { + "modelId": "", + "modelName": "", + "srcId": "", + "srcName": "", + "devId": "", + "devName": "" + }, + "varGroups": [], + "variables": [], + "alerts": [] + }, + "templates": {}, + "version": "2.7.1" +} \ No newline at end of file diff --git a/Pub_Sub/dual_flowmeter/thingsboard/pub/sendData.py b/Pub_Sub/dual_flowmeter/thingsboard/pub/sendData.py new file mode 100644 index 0000000..4bc36a1 --- /dev/null +++ b/Pub_Sub/dual_flowmeter/thingsboard/pub/sendData.py @@ -0,0 +1,63 @@ +import json, os, time +from datetime import datetime as dt +from common.Logger import logger +from quickfaas.remotebus import publish +from quickfaas.global_dict import get as get_params +from quickfaas.global_dict import _set_global_args + +def reboot(): + logger.info("!" * 10 + "REBOOTING DEVICE" + "!"*10) + r = os.popen("kill -s SIGHUP `cat /var/run/python/supervisord.pid`").read() + logger.info(f"REBOOT : {r}") + + + +# 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): + #logger.debug(message) + payload = {"ts": (round(dt.timestamp(dt.now())/600)*600)*1000, "values": {}} + for measure in message["measures"]: + try: + logger.debug(measure) + if measure["name"] in ["pump_1_run_status", "pump_2_run_status", "charge_pump_run_status"]: + logger.info(measure["name"]) + logger.debug("Converting DINT/BOOL to STRING") + value = convert_int(measure["name"], measure["value"]) + logger.debug("Converted {} to {}".format(measure["value"], value)) + payload["values"][measure["name"]] = value + payload["values"][measure["name"] + "_int"] = measure["value"] + else: + payload["values"][measure["name"]] = measure["value"] + except Exception as e: + logger.error(e) + logger.info(payload) + for chunk in chunk_payload(payload=payload): + publish(__topic__, json.dumps(chunk), __qos__, cloud_name="ThingsBoard") + time.sleep(2) + publish("v1/devices/me/attributes", json.dumps({"latestReportTime": (round(dt.timestamp(dt.now())/600)*600)*1000}), __qos__, cloud_name="ThingsBoard") + +def convert_int(plc_tag, value): + + status_codes = { + 0: "Off", + 1: "On" + } + + plc_tags = { + "pump_1_run_status": status_codes.get(value, "Invalid Code"), + "pump_2_run_status": status_codes.get(value, "Invalid Code"), + "charge_pump_run_status": status_codes.get(value, "Invalid Code") + } + + return plc_tags.get(plc_tag, "Invalid Tag") + + \ No newline at end of file diff --git a/Pub_Sub/dual_flowmeter/thingsboard/sub/receiveCommand.py b/Pub_Sub/dual_flowmeter/thingsboard/sub/receiveCommand.py new file mode 100644 index 0000000..6dc8e63 --- /dev/null +++ b/Pub_Sub/dual_flowmeter/thingsboard/sub/receiveCommand.py @@ -0,0 +1,111 @@ +import json, time +from datetime import datetime as dt +from quickfaas.measure import recall, write +from quickfaas.remotebus import publish +from common.Logger import logger + +# 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 sync(): + #get new values and send + payload = {"ts": round(dt.timestamp(dt.now()))*1000, "values": {}} + topic = "v1/devices/me/telemetry" + try: + data = recall()#json.loads(recall().decode("utf-8")) + except Exception as e: + logger.error(e) + logger.debug(data) + for controller in data: + for measure in controller["measures"]: + #publish measure + if measure["name"] in ["pump_1_run_status", "pump_2_run_status", "charge_pump_run_status"]: + payload["values"][measure["name"]] = convert_int(measure["name"], measure["value"]) + payload["values"][measure["name"]+ "_int"] = measure["value"] + else: + payload["values"][measure["name"]] = measure["value"] + logger.debug("Sending on topic: {}".format(topic)) + logger.debug("Sending value: {}".format(payload)) + for chunk in chunk_payload(payload=payload): + publish(topic, json.dumps(chunk), 1, cloud_name="ThingsBoard") + time.sleep(2) + +def writeplctag(value): + #value in the form {"measurement": , "value": } + try: + #value = json.loads(value.replace("'",'"')) + logger.debug(value) + #payload format: [{"name": "advvfdipp", "measures": [{"name": "manualfrequencysetpoint", "value": 49}]}] + message = [{"name": "dual_flowmeter", "measures":[{"name":value["measurement"], "value": value["value"]}]}] + resp = write(message) + logger.debug("RETURN FROM WRITE: {}".format(resp)) + return True + except Exception as e: + logger.debug(e) + return False + +def receiveCommand(topic, payload): + try: + logger.debug(topic) + logger.debug(json.loads(payload)) + p = json.loads(payload) + command = p["method"] + commands = { + "sync": sync, + "writeplctag": writeplctag, + } + if command == "setPLCTag": + try: + result = commands["writeplctag"](p["params"]) + logger.debug(result) + except Exception as e: + logger.error(e) + #logger.debug(command) + ack(topic.split("/")[-1]) + time.sleep(5) + sync() + except Exception as e: + logger.debug(e) + +def receiveCommand(topic, payload, wizard_api): + logger.debug(topic) + logger.debug(json.loads(payload)) + p = json.loads(payload)[0] + command = p["payload"]["name"].split(".")[1] + commands = { + "sync": sync, + "writeplctag": writeplctag, + } + commands[command](p["mac"].lower(),p["payload"]["value"], wizard_api) + #logger.debug(command) + ack(p["msgId"], p["mac"], command, p["payload"]["name"].split(".")[1], p["payload"]["value"], wizard_api) + +def ack(msgid): + #logger.debug(msgid) + #logger.debug(mac) + #logger.debug(name) + #logger.debug(value) + publish("v1/devices/me/rpc/response/" + str(msgid), json.dumps({"msg": {"time": time.time()}, "metadata": "", "msgType": ""}), 1,cloud_name="ThingsBoard") + +def convert_int(plc_tag, value): + + status_codes = { + 0: "Off", + 1: "On" + } + + plc_tags = { + "pump_1_run_status": status_codes.get(value, "Invalid Code"), + "pump_2_run_status": status_codes.get(value, "Invalid Code"), + "charge_pump_run_status": status_codes.get(value, "Invalid Code") + } + + return plc_tags.get(plc_tag, "Invalid Tag") + + \ No newline at end of file diff --git a/Pub_Sub/fk_plcpond/thingsboard/be-pond-transfer.csv b/Pub_Sub/fk_plcpond/thingsboard/be-pond-transfer.csv new file mode 100644 index 0000000..1996f23 --- /dev/null +++ b/Pub_Sub/fk_plcpond/thingsboard/be-pond-transfer.csv @@ -0,0 +1,26 @@ +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,$,,, +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_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 +pond_1_hi_alm,plcpond,default,periodic,,BIT,,,,0,Pond_1_Hi_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,0 +pond_1_hi_clr_spt,plcpond,default,periodic,,FLOAT,,,,,Pond_1_Hi_Clr_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,0 +pond_1_hi_spt,plcpond,default,periodic,,FLOAT,,,,,Pond_1_Hi_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,0 +pond_1_level,plcpond,default,periodic,,FLOAT,,,,,Pond_1_Lev,2,,ro,,,none,,,,,,,,,,,,,,,0 +pond_1_lo_alm,plcpond,default,periodic,,BIT,,,,0,Pond_1_Lo_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,0 +pond_1_lo_clr_spt,plcpond,default,periodic,,FLOAT,,,,,Pond_1_Lo_Clr_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,0 +pond_1_lo_spt,plcpond,default,periodic,,FLOAT,,,,,Pond_1_Lo_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,0 +pond_1_total_bbls,plcpond,default,periodic,,FLOAT,,,,,Pond_1_Total_Barrels,2,,ro,,,none,,,,,,,,,,,,,,,0 +pond_2_hi_alm,plcpond,default,periodic,,BIT,,,,0,Pond_2_Hi_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,0 +pond_2_hi_clr_spt,plcpond,default,periodic,,FLOAT,,,,,Pond_2_Hi_Clr_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,0 +pond_2_hi_spt,plcpond,default,periodic,,FLOAT,,,,,Pond_2_Hi_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,0 +pond_2_level,plcpond,default,periodic,,FLOAT,,,,,Pond_2_Lev,2,,ro,,,none,,,,,,,,,,,,,,,0 +pond_2_lo_alm,plcpond,default,periodic,,BIT,,,,0,Pond_2_Lo_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,0 +pond_2_lo_clr_spt,plcpond,default,periodic,,FLOAT,,,,,Pond_2_Lo_Clr_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,0 +pond_2_lo_spt,plcpond,default,periodic,,FLOAT,,,,,Pond_2_Lo_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,0 +pond_2_total_bbls,plcpond,default,periodic,,FLOAT,,,,,Pond_2_Total_Barrels,2,,ro,,,none,,,,,,,,,,,,,,,0 +pump_permissive,plcpond,default,periodic,,BIT,,,,0,Pump_Permissive,,,ro,,,none,,,,,,,,,,,,,0,,0 +pump_status,plcpond,default,periodic,,BIT,,,,0,Pump_Status,,,ro,,,none,,,,,,,,,,,,,0,,0 +run_permissive,plcpond,default,periodic,,BIT,,,,0,Run_Perm,,,ro,,,none,,,,,,,,,,,,,0,,0 \ No newline at end of file diff --git a/Pub_Sub/fkplcpond/thingsboard/bp-compressor.cfg b/Pub_Sub/fk_plcpond/thingsboard/bp-compressor.cfg similarity index 100% rename from Pub_Sub/fkplcpond/thingsboard/bp-compressor.cfg rename to Pub_Sub/fk_plcpond/thingsboard/bp-compressor.cfg diff --git a/Pub_Sub/fkplcpond/thingsboard/fkplcpond_tb_v3.cfg b/Pub_Sub/fk_plcpond/thingsboard/fk_plcpond_tb_v3.cfg similarity index 100% rename from Pub_Sub/fkplcpond/thingsboard/fkplcpond_tb_v3.cfg rename to Pub_Sub/fk_plcpond/thingsboard/fk_plcpond_tb_v3.cfg diff --git a/Pub_Sub/fkplcpond/thingsboard/fkplcpond_tb_v4.cfg b/Pub_Sub/fk_plcpond/thingsboard/fk_plcpond_tb_v4.cfg similarity index 100% rename from Pub_Sub/fkplcpond/thingsboard/fkplcpond_tb_v4.cfg rename to Pub_Sub/fk_plcpond/thingsboard/fk_plcpond_tb_v4.cfg diff --git a/Pub_Sub/fkplcpond/thingsboard/pub/sendData.py b/Pub_Sub/fk_plcpond/thingsboard/pub/sendData.py similarity index 100% rename from Pub_Sub/fkplcpond/thingsboard/pub/sendData.py rename to Pub_Sub/fk_plcpond/thingsboard/pub/sendData.py diff --git a/Pub_Sub/fk_transfer/thingsboard/pub/sendData.py b/Pub_Sub/fk_transfer/thingsboard/pub/sendData.py index 55c2b08..8509e9a 100644 --- a/Pub_Sub/fk_transfer/thingsboard/pub/sendData.py +++ b/Pub_Sub/fk_transfer/thingsboard/pub/sendData.py @@ -1,61 +1,79 @@ # Enter your python code. -import json, os, time, shutil +import json, os, time from datetime import datetime as dt from common.Logger import logger from quickfaas.remotebus import publish from quickfaas.global_dict import get as get_params from quickfaas.global_dict import _set_global_args - - -def chunk_payload(payload, chunk_size=20): - if "values" in payload: - # Original format: {"ts": ..., "values": {...}} - 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 chunk_payload(payload, chunk_size=20, is_attributes_payload=False): + if is_attributes_payload: + # For attributes payload, chunk the controllers + controllers = list(payload.items()) + for i in range(0, len(controllers), chunk_size): + yield dict(controllers[i:i + chunk_size]) else: - # New format: {"key1": "value1", "key2": "value2"} - chunked_keys = list(payload.keys()) - for i in range(0, len(chunked_keys), chunk_size): - yield {k: payload[k] for k in chunked_keys[i:i+chunk_size]} - + # For data payload, chunk the values within each controller + for controller, data in payload.items(): + for entry in data: + ts = entry['ts'] + values = entry['values'] + chunked_values = list(values.items()) + for i in range(0, len(chunked_values), chunk_size): + yield { + controller:[ + { + "ts": ts, + "values": dict(chunked_values[i:i + chunk_size])} + ] + } def sendData(message): - #logger.debug(message) - payload = {"ts": (round(dt.timestamp(dt.now())/600)*600)*1000, "values": {}} - attributes_payload = {} + #logger.info(message) + # Extract measures and group by ctrlName + grouped_data = {} + grouped_attributes = {} + now = (round(dt.timestamp(dt.now())/600)*600)*1000 resetPayload = {"ts": "", "values": {}} dayReset, weekReset, monthReset, yearReset = False, False, False, False - for measure in message["measures"]: - try: - logger.debug(measure) - if measure["health"] == 1: - if "_spt" in measure["name"]: - attributes_payload[measure["name"]] = measure["value"] - elif measure in ["totalizer_1"]: - payload["values"]["day_volume"], dayReset = totalizeDay(measure["value"]) - payload["values"]["week_volume"], weekReset = totalizeWeek(measure["value"]) - payload["values"]["month_volume"], monthReset = totalizeMonth(measure["value"]) - payload["values"]["year_volume"], yearReset = totalizeYear(measure["value"]) - payload["values"][measure["name"]] = measure["value"] - except Exception as e: - logger.error(e) + for measure in message['measures']: + ctrlName = " ".join(measure['ctrlName'].split("_")) + name = measure['name'] + value = measure['value'] + health = measure['health'] + #Add controller for telemetry if it doesn't exist + if ctrlName not in grouped_data: + grouped_data[ctrlName] = {} + #Add controller for attributes if it doesn't exist + if ctrlName not in grouped_attributes: + grouped_attributes[ctrlName] = {} + #Add data to temp payload if datapoint health is good + if health: + if "_spt" in name and "transfer" in ctrlName.lower(): + grouped_attributes[ctrlName][name] = value + elif "totalizer_1" in name: + grouped_data[ctrlName]["day_volume"], dayReset = totalizeDay(value) + grouped_data[ctrlName]["week_volume"], weekReset = totalizeWeek(value) + grouped_data[ctrlName]["month_volume"], monthReset = totalizeMonth(value) + grouped_data[ctrlName]["year_volume"], yearReset = totalizeYear(value) + elif name == "alarm_enable_cmd": + gatewayData = {"ts": now, "values": {name: value, "connected": True}} + grouped_data[ctrlName][name] = value + grouped_attributes[ctrlName]["latestReportTime"] = now + #logger.info(grouped_data) + # Transform the grouped data to desired structure + payload = {} + + for key, value in grouped_data.items(): + if value: + payload[key] = [{"ts": now ,"values": value}] + attributes_payload = {} + for key, value in grouped_attributes.items(): + if value: + attributes_payload[key] = value - - for chunk in chunk_payload(payload=payload): - publish(__topic__, json.dumps(chunk), __qos__, cloud_name="FK Transfer") - time.sleep(2) - - attributes_payload["latestReportTime"] = (round(dt.timestamp(dt.now())/600)*600)*1000 - for chunk in chunk_payload(payload=attributes_payload): - publish("v1/devices/me/attributes", json.dumps(chunk), __qos__, cloud_name="FK Transfer") - time.sleep(2) - if dayReset: + logger.info("MADE IT TO DAY RESET") resetPayload["values"]["yesterday_volume"] = payload["values"]["day_volume"] resetPayload["values"]["day_volume"] = 0 if weekReset: @@ -66,11 +84,29 @@ def sendData(message): resetPayload["values"]["month_volume"] = 0 if yearReset: resetPayload["values"]["last_year_volume"] = payload["values"]["year_volume"] - resetPayload["values"]["year_volume"] = 0 - + resetPayload["values"]["year_volume"] = 0 + if resetPayload["values"]: - resetPayload["ts"] = 1 + (round(dt.timestamp(dt.now())/600)*600)*1000 - publish(__topic__, json.dumps(resetPayload), __qos__, cloud_name="FK Transfer") + logger.info("MADE IT TO APPEND RESET") + payload["AA Transfer"].append({"ts": now + 1000 ,"values": resetPayload["values"]}) + + logger.info(json.dumps(payload, indent=4)) + #logger.info(json.dumps(payload, indent=4)) + #logger.debug(payload) + #publish(__topic__, json.dumps(payload), __qos__,cloud_name="default") + publish("v1/gateway/attributes", json.dumps(attributes_payload), __qos__,cloud_name="default") + publish("v1/devices/me/telemetry", json.dumps(gatewayData), __qos__, cloud_name="default") + + for chunk in chunk_payload(payload=payload): + publish(__topic__, json.dumps(chunk), __qos__, cloud_name="default") + #logger.info(json.dumps(chunk, indent=4)) + time.sleep(2) + """ + for chunk in chunk_payload(payload=attributes_payload, is_attributes_payload=True): + publish("v1/gateway/attributes", json.dumps(chunk), __qos__, cloud_name="default") + logger.info(json.dumps(chunk, indent=4)) + time.sleep(2) + """ def initialize_totalizers(): diff --git a/Pub_Sub/oradvvfdipp/thingsboard/sub/receiveCommand.py b/Pub_Sub/oradvvfdipp/thingsboard/sub/receiveCommand.py new file mode 100644 index 0000000..bd2312e --- /dev/null +++ b/Pub_Sub/oradvvfdipp/thingsboard/sub/receiveCommand.py @@ -0,0 +1,278 @@ +import json, time +from datetime import datetime as dt +from quickfaas.measure import recall, write +from quickfaas.remotebus import publish +from common.Logger import logger + +# 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 sync(): + #get new values and send + payload = {"ts": round(dt.timestamp(dt.now()))*1000, "values": {}} + topic = "v1/devices/me/telemetry" + try: + data = recall()#json.loads(recall().decode("utf-8")) + except Exception as e: + logger.error(e) + logger.debug(data) + for controller in data: + for measure in controller["measures"]: + #publish measure + if measure["name"] in ["wellstatus","pidcontrolmode","downholesensorstatus","alarmflowrate","alarmintakepressure","alarmintaketemperature","alarmtubingpressure","alarmvfd","alarmlockout","alarmfluidlevel","runpermissive","startpermissive","last_vfd_fault_code","vfd_fault", "flowmeter_fault"]: + payload["values"][measure["name"]] = convert_int(measure["name"], measure["value"]) + payload["values"][measure["name"]+ "_int"] = measure["value"] + else: + payload["values"][measure["name"]] = measure["value"] + logger.debug("Sending on topic: {}".format(topic)) + logger.debug("Sending value: {}".format(payload)) + for chunk in chunk_payload(payload=payload): + publish(topic, json.dumps(chunk), 1, cloud_name="ThingsBoard") + time.sleep(2) +def writeplctag(value): + #value in the form {"measurement": , "value": } + try: + #value = json.loads(value.replace("'",'"')) + logger.debug(value) + #payload format: [{"name": "advvfdipp", "measures": [{"name": "manualfrequencysetpoint", "value": 49}]}] + message = [{"name": "advvfdipp", "measures":[{"name":value["measurement"], "value": value["value"]}]}] + resp = write(message) + logger.debug("RETURN FROM WRITE: {}".format(resp)) + return True + except Exception as e: + logger.debug(e) + return False + +def receiveCommand(topic, payload): + try: + logger.debug(topic) + logger.debug(json.loads(payload)) + p = json.loads(payload) + command = p["method"] + commands = { + "sync": sync, + "writeplctag": writeplctag, + } + if command == "setPLCTag": + try: + result = commands["writeplctag"](p["params"]) + logger.debug(result) + except Exception as e: + logger.error(e) + elif command == "changeSetpoint": + try: + logger.debug("attempting controlpoint write") + params_type = {"measurement": "pidcontrolmode", "value": p["params"]["setpointType"]} + if params_type["value"]: + commands["writeplctag"](params_type) + time.sleep(2) + except Exception as e: + logger.error("DID NOT WRITE CONTROL MODE") + logger.error(e) + try: + logger.debug("attempting setpoint write") + modes = {0: "flowsetpoint", 1: "fluidlevelsetpoint", 2: "tubingpressuresetpoint", 3: "manualfrequencysetpoint"} + params_value = {"value": p["params"]["setpointValue"]} + if params_value["value"]: + params_value["measurement"] = modes[getMode()] + result = commands["writeplctag"](params_value) + logger.debug(result) + except Exception as e: + logger.error("DID NOT WRITE SETPOINT") + logger.error(e) + #logger.debug(command) + ack(topic.split("/")[-1]) + time.sleep(5) + sync() + except Exception as e: + logger.debug(e) + + +def ack(msgid): + #logger.debug(msgid) + #logger.debug(mac) + #logger.debug(name) + #logger.debug(value) + publish("v1/devices/me/rpc/response/" + str(msgid), json.dumps({"msg": {"time": time.time()}, "metadata": "", "msgType": ""}), 1,cloud_name="ThingsBoard") + +def getMode(): + try: + data = recall() + for controller in data: + for measure in controller["measures"]: + if measure["name"] == "pidcontrolmode": + return measure["value"] + except: + return None + +def convert_int(plc_tag, value): + well_status_codes = { + 0: "Running", + 1: "Pumped Off", + 2: "Alarmed", + 3: "Locked Out", + 4: "Stopped" + } + + pid_control_codes = { + 0: "Flow", + 1: "Fluid Level", + 2: "Tubing Pressure", + 3: "Manual" + } + + downhole_codes = { + 0: "OK", + 1: "Connecting", + 2: "Open Circuit", + 3: "Shorted", + 4: "Cannot Decode" + } + + permissive_codes = { + 0: "OK", + 1: "Flow", + 2: "Intake Pressure", + 3: "Intake Temperature", + 4: "Tubing Pressure", + 5: "VFD", + 6: "Fluid Level", + 7: "Min. Downtime" + } + + alarm_codes = { + 0: "OK", + 1: "Alarm" + } + + alarm_vfd_codes = { + 0: "OK", + 1: "Locked Out" + } + + vfd_fault_codes = { + 0: "No Fault", + 2: "Auxiliary Input", + 3: "Power Loss", + 4: "UnderVoltage", + 5: "OverVoltage", + 7: "Motor Overload", + 8: "Heatsink OverTemp", + 9: "Thermister OverTemp", + 10: "Dynamic Brake OverTemp", + 12: "Hardware OverCurrent", + 13: "Ground Fault", + 14: "Ground Warning", + 15: "Load Loss", + 17: "Input Phase Loss", + 18: "Motor PTC Trip", + 19: "Task Overrun", + 20: "Torque Prove Speed Band", + 21: "Output Phase Loss", + 24: "Decel Inhibit", + 25: "OverSpeed Limit", + 26: "Brake Slipped", + 27: "Torque Prove Conflict", + 28: "TP Encls Confict", + 29: "Analog In Loss", + 33: "Auto Restarts Exhausted", + 35: "IPM OverCurrent", + 36: "SW OverCurrent", + 38: "Phase U to Ground", + 39: "Phase V to Ground", + 40: "Phase W to Ground", + 41: "Phase UV Short", + 42: "Phase VW Short", + 43: "Phase WU Short", + 44: "Phase UNeg to Ground", + 45: "Phase VNeg to Ground", + 46: "Phase WNeg to Ground", + 48: "System Defaulted", + 49: "Drive Powerup", + 51: "Clear Fault Queue", + 55: "Control Board Overtemp", + 59: "Invalid Code", + 61: "Shear Pin 1", + 62: "Shear Pin 2", + 64: "Drive Overload", + 66: "OW Torque Level", + 67: "Pump Off", + 71: "Port 1 Adapter", + 72: "Port 2 Adapter", + 73: "Port 3 Adapter", + 74: "Port 4 Adapter", + 75: "Port 5 Adapter", + 76: "Port 6 Adapter", + 77: "IR Volts Range", + 78: "FluxAmps Ref Range", + 79: "Excessive Load", + 80: "AutoTune Aborted", + 81: "Port 1 DPI Loss", + 82: "Port 2 DPI Loss", + 83: "Port 3 DPI Loss", + 84: "Port 4 DPI Loss", + 85: "Port 5 DPI Loss", + 86: "Port 6 DPI Loss", + 87: "IXo Voltage Range", + 91: "Primary Velocity Feedback Loss", + 93: "Hardware Enable Check", + 94: "Alternate Velocity Feedback Loss", + 95: "Auxiliary Velocity Feedback Loss", + 96: "Position Feedback Loss", + 97: "Auto Tach Switch", + 100: "Parameter Checksum", + 101: "Power Down NVS Blank", + 102: "NVS Not Blank", + 103: "Power Down NVS Incompatible", + 104: "Power Board Checksum", + 106: "Incompat MCB-PB", + 107: "Replaced MCB-PB", + 108: "Analog Calibration Checksum", + 110: "Invalid Power Board Data", + 111: "Power Board Invalid ID", + 112: "Power Board App Min Version", + 113: "Tracking DataError", + 115: "Power Down Table Full", + 116: "Power Down Entry Too Large", + 117: "Power Down Data Checksum", + 118: "Power Board Power Down Checksum", + 124: "App ID Changed", + 125: "Using Backup App", + 134: "Start on Power Up", + 137: "External Precharge Error", + 138: "Precharge Open", + 141: "Autotune Enc Angle", + 142: "Autotune Speed Restricted", + 143: "Autotune Current Regulator", + 144: "Autotune Inertia", + 145: "Autotune Travel", + 13035: "Net IO Timeout", + 13037: "Net IO Timeout" + + } + + plc_tags = { + "wellstatus": well_status_codes.get(value, "Invalid Code"), + "pidcontrolmode": pid_control_codes.get(value, "Invalid Code"), + "downholesensorstatus": downhole_codes.get(value, "Invalid Code"), + "alarmflowrate": alarm_codes.get(value, "Invalid Code"), + "alarmintakepressure": alarm_codes.get(value, "Invalid Code"), + "alarmintaketemperature": alarm_codes.get(value, "Invalid Code"), + "alarmtubingpressure": alarm_codes.get(value, "Invalid Code"), + "alarmvfd": alarm_codes.get(value, "Invalid Code"), + "alarmlockout": alarm_vfd_codes.get(value, "Invalid Code"), + "alarmfluidlevel": alarm_codes.get(value, "Invalid Code"), + "runpermissive": permissive_codes.get(value, "Invalid Code"), + "startpermissive": permissive_codes.get(value, "Invalid Code"), + "last_vfd_fault_code": vfd_fault_codes.get(value, "Invalid Code"), + "vfd_fault": vfd_fault_codes.get(value, "Invalid Code"), + "flowmeter_fault": alarm_codes.get(value, "Invalid Code") + } + + return plc_tags.get(plc_tag, "Invalid Tag") diff --git a/Pub_Sub/piflow/thingsboard/pub/sendData.py b/Pub_Sub/piflow/thingsboard/pub/sendData.py new file mode 100644 index 0000000..9bc2009 --- /dev/null +++ b/Pub_Sub/piflow/thingsboard/pub/sendData.py @@ -0,0 +1,509 @@ +# Enter your python code. +import json, os, time, shutil +from datetime import datetime as dt +from common.Logger import logger +from quickfaas.remotebus import publish +from quickfaas.global_dict import get as get_params +from quickfaas.global_dict import _set_global_args +from mobiuspi_lib.gps import GPS + +payload = {} + +def initialize_totalizers(): + return { + "totalizer_1_day": 0, + "totalizer_1_week": 0, + "totalizer_1_month": 0, + "totalizer_1_year": 0, + "totalizer_1_lifetime": 0, + "totalizer_1_dayHolding": 0, + "totalizer_1_weekHolding": 0, + "totalizer_1_monthHolding": 0, + "totalizer_1_yearHolding": 0, + "totalizer_1_rolloverCounter": 0, + "totalizer_2_day": 0, + "totalizer_2_week": 0, + "totalizer_2_month": 0, + "totalizer_2_year": 0, + "totalizer_2_lifetime": 0, + "totalizer_2_dayHolding": 0, + "totalizer_2_weekHolding": 0, + "totalizer_2_monthHolding": 0, + "totalizer_2_yearHolding": 0, + "totalizer_2_rolloverCounter": 0, + "totalizer_3_day": 0, + "totalizer_3_week": 0, + "totalizer_3_month": 0, + "totalizer_3_year": 0, + "totalizer_3_lifetime": 0, + "totalizer_3_dayHolding": 0, + "totalizer_3_weekHolding": 0, + "totalizer_3_monthHolding": 0, + "totalizer_3_yearHolding": 0, + "totalizer_3_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 + + +def chunk_payload(payload, chunk_size=20): + if "values" in payload: + # Original format: {"ts": ..., "values": {...}} + 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]) + } + else: + # New format: {"key1": "value1", "key2": "value2"} + chunked_keys = list(payload.keys()) + for i in range(0, len(chunked_keys), chunk_size): + yield {k: payload[k] for k in chunked_keys[i:i+chunk_size]} + +def sendData(message): + logger.debug(message) + payload = {"ts": (round(dt.timestamp(dt.now())/600)*600)*1000, "values": {}} + resetPayload = {"ts": "", "values": {}} + dayReset, weekReset, monthReset, yearReset = False, False, False, False + for measure in message['measures']: + try: + if measure["health"] == 1: + if measure["name"] in ["totalizer_1", "totalizer_2", "totalizer_3"]: + payload["values"]["year_" + measure["name"]], yearReset = totalizeYear(measure["value"], measure["name"]) + payload["values"]["month_" + measure["name"]], monthReset = totalizeMonth(measure["value"], measure["name"]) + payload["values"]["week_" + measure["name"]], weekReset = totalizeWeek(measure["value"], measure["name"]) + payload["values"]["today_" + measure["name"]], dayReset = totalizeDay(measure["value"], measure["name"]) + elif measure["name"] in ["totalizer_1_units", "totalizer_2_units", "totalizer_3_units", "flow_unit", "run_status", "fault_a", "fault_b"]: + payload["values"][measure["name"]] = convert_int(measure["name"], measure["value"]) + else: + payload["values"][measure["name"]] = measure["value"] + except Exception as e: + logger.error(e) + + for chunk in chunk_payload(payload=payload): + publish(__topic__, json.dumps(chunk), __qos__) + time.sleep(2) + try: + publish("v1/devices/me/attributes", json.dumps({"latestReportTime": (round(dt.timestamp(dt.now())/600)*600)*1000}), __qos__) + except Exception as e: + logger.error(e) + + if dayReset: + resetPayload["values"]["yesterday_totalizer_1"] = payload["values"]["today_totalizer_1"] + resetPayload["values"]["yesterday_totalizer_2"] = payload["values"]["today_totalizer_2"] + resetPayload["values"]["yesterday_totalizer_3"] = payload["values"]["today_totalizer_3"] + resetPayload["values"]["today_totalizer_1"] = 0 + resetPayload["values"]["today_totalizer_2"] = 0 + resetPayload["values"]["today_totalizer_3"] = 0 + if weekReset: + resetPayload["values"]["last_week_totalizer_1"] = payload["values"]["week_totalizer_1"] + resetPayload["values"]["last_week_totalizer_2"] = payload["values"]["week_totalizer_1"] + resetPayload["values"]["last_week_totalizer_3"] = payload["values"]["week_totalizer_3"] + resetPayload["values"]["week_totalizer_1"] = 0 + resetPayload["values"]["week_totalizer_2"] = 0 + resetPayload["values"]["week_totalizer_3"] = 0 + if monthReset: + resetPayload["values"]["last_month_totalizer_1"] = payload["values"]["month_totalizer_1"] + resetPayload["values"]["last_month_totalizer_2"] = payload["values"]["month_totalizer_2"] + resetPayload["values"]["last_month_totalizer_3"] = payload["values"]["month_totalizer_3"] + resetPayload["values"]["month_totalizer_1"] = 0 + resetPayload["values"]["month_totalizer_2"] = 0 + resetPayload["values"]["month_totalizer_3"] = 0 + if yearReset: + resetPayload["values"]["last_year_totalizer_1"] = payload["values"]["year_totalizer_1"] + resetPayload["values"]["last_year_totalizer_2"] = payload["values"]["year_totalizer_2"] + resetPayload["values"]["last_year_totalizer_3"] = payload["values"]["year_totalizer_3"] + resetPayload["values"]["year_totalizer_1"] = 0 + resetPayload["values"]["year_totalizer_2"] = 0 + resetPayload["values"]["year_totalizer_3"] = 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, totalizer, 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[totalizer + "_rolloverCounter"] * 10000000) - totalizers[totalizer + "_dayHolding"] + + if not int(now.strftime("%d")) == int(totalizers[totalizer + "_day"]): + totalizers[totalizer + "_dayHolding"] = lifetime + totalizers[totalizer + "_rolloverCounter"] * 10000000 + totalizers[totalizer + "_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, totalizer, 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[totalizer + "_rolloverCounter"] * 10000000) - totalizers[totalizer + "_weekHolding"] + if (not now.strftime("%U") == totalizers[totalizer + "_week"] and now.strftime("%a") == "Sun") or totalizers[totalizer + "_week"] == 0: + totalizers[totalizer + "_weekHolding"] = lifetime + totalizers[totalizer + "_rolloverCounter"] * 10000000 + totalizers[totalizer + "_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, totalizer, 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[totalizer + "_rolloverCounter"] * 10000000) - totalizers[totalizer + "_monthHolding"] + if not int(now.strftime("%m")) == int(totalizers[totalizer + "_month"]): + totalizers[totalizer + "_monthHolding"] = lifetime + totalizers[totalizer + "_rolloverCounter"] * 10000000 + totalizers[totalizer + "_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, totalizer, 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() + if not totalizers.get("rolloverCounter"): + totalizers[totalizer + "_rolloverCounter"] = 0 + totalizers[totalizer + "_lastRawLifetime"] = lifetime + now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600) + reset = False + if totalizers[totalizer + "_lastRawLifetime"] > lifetime: + totalizers[totalizer + "_rolloverCounter"] += 1 + totalizers[totalizer + "_lastRawLifetime"] = lifetime + + value = (lifetime + totalizers[totalizer + "_rolloverCounter"] * 10000000) - totalizers[totalizer + "_yearHolding"] + if not int(now.strftime("%Y")) == int(totalizers[totalizer + "_year"]): + totalizers[totalizer + "_yearHolding"] = lifetime + totalizers[totalizer + "_year"] = now.strftime("%Y") + totalizers[totalizer + "_rolloverCounter"] = 0 + + 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) + +def decode_status(value): + drive_status_codes = { + 15: "Reversed", + 14: "REM. Freq", + 13: "REM. R/S", + 12: "Reverse operation command", + 11: "Forward operation command", + 10: "Brake release signal", + 9: "-(Not used)", + 8: "Drive stopped.", + 7: "DC Braking", + 6: "Speed reached", + 5: "Decelerating", + 4: "Accelerating", + 3: "Fault trip", + 2: "Operating in reverse direction", + 1: "Operating in forward direction", + 0: "Stopped", + } + # List to collect the active bits' descriptions + active_bits = [] + + # Iterate through each bit + for bit, description in drive_status_codes.items(): + if value & (1 << bit): # Check if the bit is set + active_bits.append(description) + + return ", ".join(active_bits) + +def convert_int(measure, value): + + totalizer_codes = { + 0: "cm cubed", + 1: "dm cubed", + 2: "m cubed", + 3: "ml", + 4: "l", + 5: "hl", + 6: "Ml Mega", + 8: "af", + 9: "ft cubed", + 10: "fl oz (us)", + 11: "gal (us)", + 12: "Mgal (us)", + 13: "bbl (us;liq.)", + 14: "bbl (us;beer)", + 15: "bbl (us;oil)", + 16: "bbl (us;tank)", + 17: "gal (imp)", + 18: "Mgal (imp)", + 19: "bbl (imp;beer)", + 20: "bbl (imp;oil)", + 22: "kgal (us)", + 23: "Mft cubed", + 50: "g", + 51: "kg", + 52: "t", + 53: "oz", + 54: "lb", + 55: "STon", + 100: "Nl", + 101: "Nm cubed", + 102: "Sm cubed", + 103: "Sft cubed", + 104: "Sl", + 105: "Sgal (us)", + 106: "Sbbl (us;liq.)", + 107: "Sgal (imp)", + 108: "Sbbl (us;oil)", + 109: "MMSft cubed", + 110: "Nhl", + 251: "None" + } + + flow_codes = { + 0: "cm cubed/s", + 1: "cm cubed/min", + 2: "cm cubed/h", + 3: "cm cubed/d", + 4: "dm cubed/s", + 5: "dm cubed/min", + 6: "dm cubed/h", + 7: "dm cubed/d", + 8: "m cubed/s", + 9: "m cubed/min", + 10: "m cubed/h", + 11: "m cubed/d", + 12: "ml/s", + 13: "ml/min", + 14: "ml/h", + 15: "ml/d", + 16: "l/s", + 17: "l/min", + 18: "l/h (+)", + 19: "l/d", + 20: "hl/s", + 21: "hl/min", + 22: "hl/h", + 23: "hl/d", + 24: "Ml/s", + 25: "Ml/min", + 26: "Ml/h", + 27: "Ml/d", + 32: "af/s", + 33: "af/min", + 34: "af/h", + 35: "af/d", + 36: "ft cubed/s", + 37: "ft cubed/min", + 38: "ft cubed/h", + 39: "ft cubed/d", + 40: "fl oz/s (us)", + 41: "fl oz/min (us)", + 42: "fl oz/h (us)", + 43: "fl oz/d (us)", + 44: "gal/s (us)", + 45: "gal/min (us)", + 46: "gal/h (us)", + 47: "gal/d (us)", + 48: "Mgal/s (us)", + 49: "Mgal/min (us)", + 50: "Mgal/h (us)", + 51: "Mgal/d (us)", + 52: "bbl/s (us;liq.)", + 53: "bbl/min (us;liq.)", + 54: "bbl/h (us;liq.)", + 55: "bbl/d (us;liq.)", + 56: "bbl/s (us;beer)", + 57: "bbl/min (us;beer)", + 58: "bbl/h (us;beer)", + 59: "bbl/d (us;beer)", + 60: "bbl/s (us;oil)", + 61: "bbl/min (us;oil)", + 62: "bbl/h (us;oil)", + 63: "bbl/d (us;oil)", + 64: "bbl/s (us;tank)", + 65: "bbl/min (us;tank)", + 66: "bbl/h (us;tank)", + 67: "bbl/d (us;tank)", + 68: "gal/s (imp)", + 69: "gal/min (imp)", + 70: "gal/h (imp)", + 71: "gal/d (imp)", + 72: "Mgal/s (imp)", + 73: "Mgal/min (imp)", + 74: "Mgal/h (imp)", + 75: "Mgal/d (imp)", + 76: "bbl/s (imp;beer)", + 77: "bbl/min (imp;beer)", + 78: "bbl/h (imp;beer)", + 79: "bbl/d (imp;beer)", + 80: "bbl/s (imp;oil)", + 81: "bbl/min (imp;oil)", + 82: "bbl/h (imp;oil)", + 83: "bbl/d (imp;oil)", + 88: "kgal/s (us)", + 89: "kgal/min (us)", + 90: "kgal/h (us)", + 91: "kgal/d (us)", + 92: "MMft cubed/s", + 93: "MMft cubed/min", + 94: "MMft cubed/h", + 96: "Mft cubed/d" + } + + drive_fault_a_codes = { + 0: "Overload Trip", + 1: "Underload Trip", + 2: "Inverter Overload Trip", + 3: "E-Thermal Trip", + 4: "Ground Fault Trip", + 5: "Output Image Trip", + 6: "Inmput Imaging Trip", + 7: "Reserved", + 8: "Reserved", + 9: "NTC Trip", + 10: "Overcurrent Trip", + 11: "Overvoltage Trip", + 12: "External Trip", + 13: "Arm Short", + 14: "Over Heat Trip", + 15: "Fuse Open Trip" + } + drive_fault_b_codes = { + 0: "Reserved", + 1: "Reserved", + 2: "Reserved", + 3: "FAN Trip", + 4: "Reserved", + 5: "Reserved", + 6: "Pre PID Fail", + 7: "Bad contact at basic I/O board", + 8: "External Brake Trip", + 9: "No Motor Trip", + 10: "Bad Option Card", + 11: "Reserved", + 12: "Reserved", + 13: "Reserved", + 14: "Pre Over Heat Trip", + 15: "Reserved" + } + + + piflow = { + "totalizer_1_units": totalizer_codes.get(value, "Invalid Code"), + "totalizer_2_units": totalizer_codes.get(value, "Invalid Code"), + "totalizer_3_units": totalizer_codes.get(value, "Invalid Code"), + "flow_unit": flow_codes.get(value, "Invalid Code"), + "fault_a": drive_fault_a_codes.get(value, "Invalid Code"), + "fault_b": drive_fault_b_codes.get(value, "Invalid Code"), + "run_status": decode_status(value) + } + + return piflow.get(measure, "Invalid Tag") diff --git a/Pub_Sub/rr_facility/thingsboard/alarm.csv b/Pub_Sub/rr_facility/thingsboard/alarm.csv new file mode 100644 index 0000000..a8659cd --- /dev/null +++ b/Pub_Sub/rr_facility/thingsboard/alarm.csv @@ -0,0 +1,92 @@ +AlarmName,ControllerName,MeasuringPointName,AlarmLevel,Condition1,Operand1,CombineMethod,Condition2,Operand2,AlarmContent,AlarmTag +pond_level_input_alm,rr_facility,pond_level_input_alm,5,eq,1,none,eq,,pond level input failure alarm,default +tp_1_charge_pump_fail_to_start_alm,rr_facility,tp_1_charge_pump_fail_to_start_alm,5,eq,1,none,eq,,tp 1 charge pump failure,default +tp_1_hi_a_winding_alm,rr_facility,tp_1_hi_a_winding_alm,5,eq,1,none,eq,,tp 1 hi a winding failure,default +tp_1_hi_b_winding_alm,rr_facility,tp_1_hi_b_winding_alm,5,eq,1,none,eq,,tp 1 hi b winding failure,default +tp_1_hi_c_winding_alm,rr_facility,tp_1_hi_c_winding_alm,5,eq,1,none,eq,,tp 1 hi c winding failure,default +tp_1_hi_discharge_alm,rr_facility,tp_1_hi_discharge_alm,5,eq,1,none,eq,,tp 1 hi discharge failure,default +tp_1_hi_inboard_temp_alm,rr_facility,tp_1_hi_inboard_temp_alm,5,eq,1,none,eq,,Failure,default +tp_1_hi_outboard_temp_alm,rr_facility,tp_1_hi_outboard_temp_alm,5,eq,1,none,eq,,Failure,default +tp_1_hi_vibration_alm,rr_facility,tp_1_hi_vibration_alm,5,eq,1,none,eq,,Failure,default +tp_1_lo_discharge_alm,rr_facility,tp_1_lo_discharge_alm,5,eq,1,none,eq,,Failure,default +tp_1_lo_oil_alm,rr_facility,tp_1_lo_oil_alm,5,eq,1,none,eq,,Failure,default +tp_1_lo_suction_alm,rr_facility,tp_1_lo_suction_alm,5,eq,1,none,eq,,Failure,default +tp_1_oil_cooler_failed_to_start_alm,rr_facility,tp_1_oil_cooler_failed_to_start_alm,5,eq,1,none,eq,,Failure,default +tp_2_charge_pump_fail_to_start_alm,rr_facility,tp_2_charge_pump_fail_to_start_alm,5,eq,1,none,eq,,Failure,default +tp_2_hi_a_winding_alm,rr_facility,tp_2_hi_a_winding_alm,5,eq,1,none,eq,,Failure,default +tp_2_hi_b_winding_alm,rr_facility,tp_2_hi_b_winding_alm,5,eq,1,none,eq,,Failure,default +tp_2_hi_c_winding_alm,rr_facility,tp_2_hi_c_winding_alm,5,eq,1,none,eq,,Failure,default +tp_2_hi_discharge_alm,rr_facility,tp_2_hi_discharge_alm,5,eq,1,none,eq,,Failure,default +tp_2_hi_inboard_temp_alm,rr_facility,tp_2_hi_inboard_temp_alm,5,eq,1,none,eq,,Failure,default +tp_2_hi_outboard_temp_alm,rr_facility,tp_2_hi_outboard_temp_alm,5,eq,1,none,eq,,Failure,default +tp_2_hi_vibration_alm,rr_facility,tp_2_hi_vibration_alm,5,eq,1,none,eq,,Failure,default +tp_2_lo_discharge_alm,rr_facility,tp_2_lo_discharge_alm,5,eq,1,none,eq,,Failure,default +tp_2_lo_oil_alm,rr_facility,tp_2_lo_oil_alm,5,eq,1,none,eq,,Failure,default +tp_2_lo_suction_alm,rr_facility,tp_2_lo_suction_alm,5,eq,1,none,eq,,Failure,default +tp_2_oil_cooler_failed_to_start_alm,rr_facility,tp_2_oil_cooler_failed_to_start_alm,5,eq,1,none,eq,,Failure,default +wtp_1_discharge_alm,rr_facility,wtp_1_discharge_alm,5,eq,1,none,eq,,wtp 1 discharge input failure,default +wtp_1_suction_alm,rr_facility,wtp_1_suction_alm,5,eq,1,none,eq,,wtp 1 suction input failure,default +wtp_1_vibration_alm,rr_facility,wtp_1_vibration_alm,5,eq,1,none,eq,,wtp 1 vibration failure,default +wtp_2_discharge_alm,rr_facility,wtp_2_discharge_alm,5,eq,1,none,eq,,wtp 2 discharge input failure,default +wtp_2_suction_alm,rr_facility,wtp_2_suction_alm,5,eq,1,none,eq,,wtp 2 suction input failure,default +wtp_2_vibration_alm,rr_facility,wtp_2_vibration_alm,5,eq,1,none,eq,,wtp 2 vibration failure,default +ww_1_comms_alm,rr_facility,ww_1_comms_alm,5,eq,1,none,eq,,water well 1 comms failure,default +ww_1_control_power_alm,rr_facility,ww_1_control_power_alm,5,eq,1,none,eq,,Failure,default +ww_1_hi_discharge_alm,rr_facility,ww_1_hi_discharge_alm,5,eq,1,none,eq,,Failure,default +ww_1_hi_flow_alm,rr_facility,ww_1_hi_flow_alm,5,eq,1,none,eq,,Failure,default +ww_1_hoa_in_manual_alm,rr_facility,ww_1_hoa_in_manual_alm,5,eq,1,none,eq,,Failure,default +ww_1_lo_discharge_alm,rr_facility,ww_1_lo_discharge_alm,5,eq,1,none,eq,,Failure,default +ww_1_lo_flow_alm,rr_facility,ww_1_lo_flow_alm,5,eq,1,none,eq,,Failure,default +ww_1_lo_pip_alm,rr_facility,ww_1_lo_pip_alm,5,eq,1,none,eq,,Failure,default +ww_1_master_comm_alm,rr_facility,ww_1_master_comm_alm,5,eq,1,none,eq,,Failure,default +ww_1_vfd_alm,rr_facility,ww_1_vfd_alm,5,eq,1,none,eq,,Failure,default +ww_2_comms_alm,rr_facility,ww_2_comms_alm,5,eq,1,none,eq,,water well 2 comms failure,default +ww_2_control_power_alm,rr_facility,ww_2_control_power_alm,5,eq,1,none,eq,,Failure,default +ww_2_hi_discharge_alm,rr_facility,ww_2_hi_discharge_alm,5,eq,1,none,eq,,Failure,default +ww_2_hi_flow_alm,rr_facility,ww_2_hi_flow_alm,5,eq,1,none,eq,,Failure,default +ww_2_hoa_in_manual_alm,rr_facility,ww_2_hoa_in_manual_alm,5,eq,1,none,eq,,Failure,default +ww_2_lo_discharge_alm,rr_facility,ww_2_lo_discharge_alm,5,eq,1,none,eq,,Failure,default +ww_2_lo_flow_alm,rr_facility,ww_2_lo_flow_alm,5,eq,1,none,eq,,Failure,default +ww_2_lo_pip_alm,rr_facility,ww_2_lo_pip_alm,5,eq,1,none,eq,,Failure,default +ww_2_master_comm_alm,rr_facility,ww_2_master_comm_alm,5,eq,1,none,eq,,Failure,default +ww_2_vfd_alm,rr_facility,ww_2_vfd_alm,5,eq,1,none,eq,,Failure,default +ww_3_comms_alm,rr_facility,ww_3_comms_alm,5,eq,1,none,eq,,water well 3 comms failure,default +ww_3_control_power_alm,rr_facility,ww_3_control_power_alm,5,eq,1,none,eq,,Failure,default +ww_3_hi_discharge_alm,rr_facility,ww_3_hi_discharge_alm,5,eq,1,none,eq,,Failure,default +ww_3_hi_flow_alm,rr_facility,ww_3_hi_flow_alm,5,eq,1,none,eq,,Failure,default +ww_3_hoa_in_manual_alm,rr_facility,ww_3_hoa_in_manual_alm,5,eq,1,none,eq,,Failure,default +ww_3_lo_discharge_alm,rr_facility,ww_3_lo_discharge_alm,5,eq,1,none,eq,,Failure,default +ww_3_lo_flow_alm,rr_facility,ww_3_lo_flow_alm,5,eq,1,none,eq,,Failure,default +ww_3_lo_pip_alm,rr_facility,ww_3_lo_pip_alm,5,eq,1,none,eq,,Failure,default +ww_3_master_comm_alm,rr_facility,ww_3_master_comm_alm,5,eq,1,none,eq,,Failure,default +ww_3_vfd_alm,rr_facility,ww_3_vfd_alm,5,eq,1,none,eq,,Failure,default +ww_4_comms_alm,rr_facility,ww_4_comms_alm,5,eq,1,none,eq,,water well 4 comms failure,default +ww_4_control_power_alm,rr_facility,ww_4_control_power_alm,5,eq,1,none,eq,,Failure,default +ww_4_hi_discharge_alm,rr_facility,ww_4_hi_discharge_alm,5,eq,1,none,eq,,Failure,default +ww_4_hi_flow_alm,rr_facility,ww_4_hi_flow_alm,5,eq,1,none,eq,,Failure,default +ww_4_hoa_in_manual_alm,rr_facility,ww_4_hoa_in_manual_alm,5,eq,1,none,eq,,Failure,default +ww_4_lo_discharge_alm,rr_facility,ww_4_lo_discharge_alm,5,eq,1,none,eq,,Failure,default +ww_4_lo_flow_alm,rr_facility,ww_4_lo_flow_alm,5,eq,1,none,eq,,Failure,default +ww_4_lo_pip_alm,rr_facility,ww_4_lo_pip_alm,5,eq,1,none,eq,,Failure,default +ww_4_master_comm_alm,rr_facility,ww_4_master_comm_alm,5,eq,1,none,eq,,Failure,default +ww_4_vfd_alm,rr_facility,ww_4_vfd_alm,5,eq,1,none,eq,,Failure,default +ww_5_comms_alm,rr_facility,ww_5_comms_alm,5,eq,1,none,eq,,water well 5 comms failure,default +ww_5_control_power_alm,rr_facility,ww_5_control_power_alm,5,eq,1,none,eq,,Failure,default +ww_5_hi_discharge_alm,rr_facility,ww_5_hi_discharge_alm,5,eq,1,none,eq,,Failure,default +ww_5_hi_flow_alm,rr_facility,ww_5_hi_flow_alm,5,eq,1,none,eq,,Failure,default +ww_5_hoa_in_manual_alm,rr_facility,ww_5_hoa_in_manual_alm,5,eq,1,none,eq,,Failure,default +ww_5_lo_discharge_alm,rr_facility,ww_5_lo_discharge_alm,5,eq,1,none,eq,,Failure,default +ww_5_lo_flow_alm,rr_facility,ww_5_lo_flow_alm,5,eq,1,none,eq,,Failure,default +ww_5_lo_pip_alm,rr_facility,ww_5_lo_pip_alm,5,eq,1,none,eq,,Failure,default +ww_5_master_comm_alm,rr_facility,ww_5_master_comm_alm,5,eq,1,none,eq,,Failure,default +ww_5_vfd_alm,rr_facility,ww_5_vfd_alm,5,eq,1,none,eq,,Failure,default +ww_6_comms_alm,rr_facility,ww_6_comms_alm,5,eq,1,none,eq,,water well 6 comms failure,default +ww_6_control_power_alm,rr_facility,ww_6_control_power_alm,5,eq,1,none,eq,,Failure,default +ww_6_hi_discharge_alm,rr_facility,ww_6_hi_discharge_alm,5,eq,1,none,eq,,Failure,default +ww_6_hi_flow_alm,rr_facility,ww_6_hi_flow_alm,5,eq,1,none,eq,,Failure,default +ww_6_hoa_in_manual_alm,rr_facility,ww_6_hoa_in_manual_alm,5,eq,1,none,eq,,Failure,default +ww_6_lo_discharge_alm,rr_facility,ww_6_lo_discharge_alm,5,eq,1,none,eq,,Failure,default +ww_6_lo_flow_alm,rr_facility,ww_6_lo_flow_alm,5,eq,1,none,eq,,Failure,default +ww_6_lo_pip_alm,rr_facility,ww_6_lo_pip_alm,5,eq,1,none,eq,,Failure,default +ww_6_master_comm_alm,rr_facility,ww_6_master_comm_alm,5,eq,1,none,eq,,Failure,default +ww_6_vfd_alm,rr_facility,ww_6_vfd_alm,5,eq,1,none,eq,,Failure,default \ No newline at end of file diff --git a/Pub_Sub/rr_facility/thingsboard/pub/sendData.py b/Pub_Sub/rr_facility/thingsboard/pub/sendData.py new file mode 100644 index 0000000..8d68b35 --- /dev/null +++ b/Pub_Sub/rr_facility/thingsboard/pub/sendData.py @@ -0,0 +1,262 @@ +import json, os, time +from datetime import datetime as dt +from common.Logger import logger +from quickfaas.remotebus import publish +from quickfaas.global_dict import get as get_params +from quickfaas.global_dict import _set_global_args +from mobiuspi_lib.gps import GPS + +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 + +def getGPS(): + # Create a gps instance + gps = GPS() + + # Retrieve GPS information + position_status = gps.get_position_status() + logger.debug("position_status: ") + logger.debug(position_status) + latitude = position_status["latitude"].split(" ") + longitude = position_status["longitude"].split(" ") + lat_dec = int(latitude[0][:-1]) + (float(latitude[1][:-1])/60) + lon_dec = int(longitude[0][:-1]) + (float(longitude[1][:-1])/60) + if latitude[2] == "S": + lat_dec = lat_dec * -1 + if longitude[2] == "W": + lon_dec = lon_dec * -1 + #lat_dec = round(lat_dec, 7) + #lon_dec = round(lon_dec, 7) + logger.info("HERE IS THE GPS COORDS") + logger.info(f"LATITUDE: {lat_dec}, LONGITUDE: {lon_dec}") + speedKnots = position_status["speed"].split(" ") + speedMPH = float(speedKnots[0]) * 1.151 + return (f"{lat_dec:.8f}",f"{lon_dec:.8f}",f"{speedMPH:.2f}") + +def chunk_payload(payload, chunk_size=20): + if "values" in payload: + # Original format: {"ts": ..., "values": {...}} + 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]) + } + else: + # New format: {"key1": "value1", "key2": "value2"} + chunked_keys = list(payload.keys()) + for i in range(0, len(chunked_keys), chunk_size): + yield {k: payload[k] for k in chunked_keys[i:i+chunk_size]} + +def chunk_payload_gateway(payload, chunk_size=20, is_attributes_payload=False): + if is_attributes_payload: + # For attributes payload, chunk the controllers + controllers = list(payload.items()) + for i in range(0, len(controllers), chunk_size): + yield dict(controllers[i:i + chunk_size]) + else: + # For data payload, chunk the values within each controller + for controller, data in payload.items(): + for entry in data: + ts = entry['ts'] + values = entry['values'] + chunked_values = list(values.items()) + for i in range(0, len(chunked_values), chunk_size): + yield { + controller: [{ + "ts": ts, + "values": dict(chunked_values[i:i + chunk_size]) + }] + } + +def controlName(name): + params = convertDStoJSON(get_params()) + nameMap = { + "tp_1": f"{params['facilityName']} Transfer Pump #1", + "tp_2": f"{params['facilityName']} Transfer Pump #2", + "ww_1": f"{params['facilityName']} Water Well #1", + "ww_2": f"{params['facilityName']} Water Well #2", + "ww_3": f"{params['facilityName']} Water Well #3", + "ww_4": f"{params['facilityName']} Water Well #4", + "ww_5": f"{params['facilityName']} Water Well #5", + "ww_6": f"{params['facilityName']} Water Well #6" + } + parts = "_".join(name.split("_")[:2]) + return nameMap.get(parts, "Gateway") + +def sendData(message): + #logger.info(message) + grouped_data = {} + grouped_attributes = {} + now = (round(dt.timestamp(dt.now())/600)*600)*1000 + payload = {"ts": now, "values": {}} + attributes_payload = {} + for measure in message["measures"]: + try: + logger.debug(measure) + ctrlName = controlName(measure["name"]) + if ctrlName == "Gateway": + #send to gateway with v1/devices/me/telemetry + if measure["health"] == 1: + if "_spt" in measure["name"]: + attributes_payload[measure["name"]] = measure["value"] + else: + payload["values"][measure["name"]] = measure["value"] + else: + name = "_".join(measure['name'].split("_")[2:]) + value = measure['value'] + health = measure['health'] + #Add controller for telemetry if it doesn't exist + if ctrlName not in grouped_data: + grouped_data[ctrlName] = {} + #Add controller for attributes if it doesn't exist + if ctrlName not in grouped_attributes: + grouped_attributes[ctrlName] = {} + grouped_attributes[ctrlName]["latestReportTime"] = now + #Add data to temp payload if datapoint health is good + if health: + if "_spt" in name: + grouped_attributes[ctrlName][name] = value + else: + grouped_data[ctrlName][name] = value + except Exception as e: + logger.error(e) + + # Transform the grouped data to desired structure + payload_gateway = {} + + for key, value in grouped_data.items(): + if value: + payload_gateway[key] = [{"ts": now ,"values": value}] + + attributes_payload_gateway = {} + for key, value in grouped_attributes.items(): + if value: + attributes_payload_gateway[key] = value + + #Send data belonging to Gateway + for chunk in chunk_payload(payload=payload): + publish(__topic__, json.dumps(chunk), __qos__) + time.sleep(2) + + attributes_payload["latestReportTime"] = (round(dt.timestamp(dt.now())/600)*600)*1000 + for chunk in chunk_payload(payload=attributes_payload): + publish("v1/devices/me/attributes", json.dumps(chunk), __qos__) + time.sleep(2) + + #Send gateway devices data + for chunk in chunk_payload_gateway(payload=payload_gateway): + publish("v1/gateway/telemetry", json.dumps(chunk), __qos__) + time.sleep(2) + + for chunk in chunk_payload_gateway(payload=attributes_payload_gateway, is_attributes_payload=True): + publish("v1/gateway/attributes", json.dumps(attributes_payload_gateway), __qos__) + time.sleep(2) + \ No newline at end of file diff --git a/Pub_Sub/rr_facility/thingsboard/rr_facility.cfg b/Pub_Sub/rr_facility/thingsboard/rr_facility.cfg new file mode 100644 index 0000000..2cc7f75 --- /dev/null +++ b/Pub_Sub/rr_facility/thingsboard/rr_facility.cfg @@ -0,0 +1,8537 @@ +{ + "controllers": [ + { + "_id": "00006750773e79af", + "enable": 1, + "protocol": "AllenBradley MicroCip", + "name": "rr_facility", + "samplePeriod": 60, + "enablepollCycle": 0, + "desc": "", + "expired": 1000, + "args": { + "connectTimeOut": 10000 + }, + "enableDebug": 0, + "endpoint": "192.168.1.12:44818", + "samplePeriod2": 10 + } + ], + "measures": [ + { + "name": "pond_level_input_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_Pond_Level_Input_Failure", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "000067585a635a25" + }, + { + "name": "tp_1_charge_pump_fail_to_start_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_TP1_Charge_Pump_Failed_To_Start", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "000167585a63f266" + }, + { + "name": "tp_1_hi_a_winding_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_TP1_High_A_Winding_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "000267585a638fb6" + }, + { + "name": "tp_1_hi_b_winding_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_TP1_High_B_Winding_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "000367585a63e430" + }, + { + "name": "tp_1_hi_c_winding_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_TP1_High_C_Winding_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "000467585a630d40" + }, + { + "name": "tp_1_hi_discharge_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_TP1_High_Discharge_PSI", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "000567585a63ce27" + }, + { + "name": "tp_1_hi_inboard_temp_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_TP1_High_Inboard_Temp_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "000667585a6300dc" + }, + { + "name": "tp_1_hi_outboard_temp_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_TP1_High_Outboard_Temp_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "000767585a63e0f9" + }, + { + "name": "tp_1_hi_vibration_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_TP1_High_Vibration_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "000867585a636693" + }, + { + "name": "tp_1_lo_discharge_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_TP1_Low_Discharge_PSI", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "000967585a6381af" + }, + { + "name": "tp_1_lo_oil_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_TP1_Low_Oil_Level_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "000a67585a632d19" + }, + { + "name": "tp_1_lo_suction_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_TP1_Low_Suction_Pressure", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "000b67585a634095" + }, + { + "name": "tp_1_oil_cooler_failed_to_start_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_TP1_Oil_Cooler_Failed_To_Start", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "000c67585a63f639" + }, + { + "name": "tp_2_charge_pump_fail_to_start_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_TP2_Charge_Pump_Failed_To_Start", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "000d67585a63dfaf" + }, + { + "name": "tp_2_hi_a_winding_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_TP2_High_A_Winding_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "000e67585a63b4ef" + }, + { + "name": "tp_2_hi_b_winding_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_TP2_High_B_Winding_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "000f67585a637589" + }, + { + "name": "tp_2_hi_c_winding_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_TP2_High_C_Winding_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "001067585a630a99" + }, + { + "name": "tp_2_hi_discharge_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_TP2_High_Discharge_PSI", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "001167585a63e1a5" + }, + { + "name": "tp_2_hi_inboard_temp_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_TP2_High_Inboard_Temp_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "001267585a63af5f" + }, + { + "name": "tp_2_hi_outboard_temp_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_TP2_High_Outboard_Temp_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "001367585a63d3a0" + }, + { + "name": "tp_2_hi_vibration_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_TP2_High_Vibration_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "001467585a633031" + }, + { + "name": "tp_2_lo_discharge_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_TP2_Low_Discharge_PSI", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "001567585a63ef89" + }, + { + "name": "tp_2_lo_oil_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_TP2_Low_Oil_Level_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "001667585a63528b" + }, + { + "name": "tp_2_lo_suction_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_TP2_Low_Suction_Pressure", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "001767585a63f80d" + }, + { + "name": "tp_2_oil_cooler_failed_to_start_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_TP2_Oil_Cooler_Failed_To_Start", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "001867585a6322db" + }, + { + "name": "ww_1_comms_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_Water_Well_1_Communication_Failure", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "001967585a63c974" + }, + { + "name": "ww_2_comms_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_Water_Well_2_Communication_Failure", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "001a67585a632364" + }, + { + "name": "ww_3_comms_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_Water_Well_3_Communication_Failure", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "001b67585a63e6ba" + }, + { + "name": "ww_4_comms_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_Water_Well_4_Communication_Failure", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "001c67585a6370a9" + }, + { + "name": "ww_5_comms_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_Water_Well_5_Communication_Failure", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "001d67585a63634a" + }, + { + "name": "ww_6_comms_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_Water_Well_6_Communication_Failure", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "001e67585a63fe6d" + }, + { + "name": "wtp_1_discharge_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WTP_1_Discharge_Input_Failure", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "001f67585a63b8e0" + }, + { + "name": "wtp_1_suction_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WTP_1_Suction_Input_Failure", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "002067585a6324f2" + }, + { + "name": "wtp_1_vibration_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WTP_1_Vibration_Failure", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "002167585a63b3ff" + }, + { + "name": "wtp_2_discharge_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WTP_2_Discharge_Input_Failure", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "002267585a635e0e" + }, + { + "name": "wtp_2_suction_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WTP_2_Suction_Input_Failure", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "002367585a633dbd" + }, + { + "name": "wtp_2_vibration_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WTP_2_Vibration_Failure", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "002467585a633851" + }, + { + "name": "ww_1_control_power_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW1_Control_Power_Failure", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "002567585a6320e3" + }, + { + "name": "ww_1_hi_discharge_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW1_Hi_Discharge_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "002667585a63caeb" + }, + { + "name": "ww_1_hi_flow_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW1_Hi_Flow_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "002767585a636d9b" + }, + { + "name": "ww_1_hoa_in_manual_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW1_HOA_In_Manual", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "002867585a6341dd" + }, + { + "name": "ww_1_lo_discharge_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW1_Lo_Discharge_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "002967585a63cb80" + }, + { + "name": "ww_1_lo_flow_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW1_Lo_Flow_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "002a67585a633eee" + }, + { + "name": "ww_1_lo_pip_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW1_Lo_PIP_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "002b67585a630418" + }, + { + "name": "ww_1_master_comm_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW1_Master_Communication_Failure", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "002c67585a6355ee" + }, + { + "name": "ww_1_vfd_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW1_VFD_Faulted", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "002d67585a63c141" + }, + { + "name": "ww_2_control_power_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW2_Control_Power_Failure", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "002e67585a6326b5" + }, + { + "name": "ww_2_hi_discharge_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW2_Hi_Discharge_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "002f67585a63c90b" + }, + { + "name": "ww_2_hi_flow_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW2_Hi_Flow_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "003067585a634740" + }, + { + "name": "ww_2_hoa_in_manual_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW2_HOA_In_Manual", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "003167585a635017" + }, + { + "name": "ww_2_lo_discharge_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW2_Lo_Discharge_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "003267585a63c0ed" + }, + { + "name": "ww_2_lo_flow_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW2_Lo_Flow_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "003367585a6343de" + }, + { + "name": "ww_2_lo_pip_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW2_Lo_PIP_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "003467585a63f16b" + }, + { + "name": "ww_2_master_comm_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW2_Master_Communication_Failure", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "003567585a630184" + }, + { + "name": "ww_2_vfd_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW2_VFD_Faulted", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "003667585a6335a3" + }, + { + "name": "ww_3_control_power_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW3_Control_Power_Failure", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "003767585a63c5b0" + }, + { + "name": "ww_3_hi_discharge_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW3_Hi_Discharge_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "003867585a63ce67" + }, + { + "name": "ww_3_hi_flow_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW3_Hi_Flow_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "003967585a639e0e" + }, + { + "name": "ww_3_hoa_in_manual_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW3_HOA_In_Manual", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "003a67585a6396de" + }, + { + "name": "ww_3_lo_discharge_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW3_Lo_Discharge_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "003b67585a63fcd8" + }, + { + "name": "ww_3_lo_flow_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW3_Lo_Flow_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "003c67585a6388d1" + }, + { + "name": "ww_3_lo_pip_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW3_Lo_PIP_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "003d67585a634a73" + }, + { + "name": "ww_3_master_comm_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW3_Master_Communication_Failure", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "003e67585a633c6c" + }, + { + "name": "ww_3_vfd_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW3_VFD_Faulted", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "003f67585a6366e4" + }, + { + "name": "ww_4_control_power_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW4_Control_Power_Failure", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "004067585a633827" + }, + { + "name": "ww_4_hi_discharge_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW4_Hi_Discharge_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "004167585a636ea6" + }, + { + "name": "ww_4_hi_flow_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW4_Hi_Flow_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "004267585a633c46" + }, + { + "name": "ww_4_hoa_in_manual_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW4_HOA_In_Manual", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "004367585a63896a" + }, + { + "name": "ww_4_lo_discharge_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW4_Lo_Discharge_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "004467585a6339c7" + }, + { + "name": "ww_4_lo_flow_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW4_Lo_Flow_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "004567585a63c3e8" + }, + { + "name": "ww_4_lo_pip_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW4_Lo_PIP_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "004667585a632ec8" + }, + { + "name": "ww_4_master_comm_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW4_Master_Communication_Failure", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "004767585a63a858" + }, + { + "name": "ww_4_vfd_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW4_VFD_Faulted", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "004867585a633667" + }, + { + "name": "ww_5_control_power_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW5_Control_Power_Failure", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "004967585a636b76" + }, + { + "name": "ww_5_hi_discharge_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW5_Hi_Discharge_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "004a67585a6346f1" + }, + { + "name": "ww_5_hi_flow_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW5_Hi_Flow_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "004b67585a63a46c" + }, + { + "name": "ww_5_hoa_in_manual_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW5_HOA_In_Manual", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "004c67585a637ce9" + }, + { + "name": "ww_5_lo_discharge_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW5_Lo_Discharge_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "004d67585a637d0c" + }, + { + "name": "ww_5_lo_flow_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW5_Lo_Flow_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "004e67585a63ef3f" + }, + { + "name": "ww_5_lo_pip_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW5_Lo_PIP_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "004f67585a634896" + }, + { + "name": "ww_5_master_comm_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW5_Master_Communication_Failure", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "005067585a63450f" + }, + { + "name": "ww_5_vfd_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW5_VFD_Faulted", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "005167585a638d2a" + }, + { + "name": "ww_6_control_power_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW6_Control_Power_Failure", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "005267585a631ec1" + }, + { + "name": "ww_6_hi_discharge_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW6_Hi_Discharge_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "005367585a63836d" + }, + { + "name": "ww_6_hi_flow_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW6_Hi_Flow_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "005467585a636fd7" + }, + { + "name": "ww_6_hoa_in_manual_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW6_HOA_In_Manual", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "005567585a63bdbb" + }, + { + "name": "ww_6_lo_discharge_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW6_Lo_Discharge_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "005667585a638eb0" + }, + { + "name": "ww_6_lo_flow_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW6_Lo_Flow_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "005767585a63959a" + }, + { + "name": "ww_6_lo_pip_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW6_Lo_PIP_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "005867585a634b3a" + }, + { + "name": "ww_6_master_comm_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW6_Master_Communication_Failure", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "005967585a63ae3f" + }, + { + "name": "ww_6_vfd_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "AL0_WW6_VFD_Faulted", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "005a67585a63d804" + }, + { + "name": "tp_1_vfd_run_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_Run_TP1_VFD", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "005b67585a63ce34" + }, + { + "name": "tp_2_vfd_run_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_Run_TP2_VFD", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "005c67585a630a94" + }, + { + "name": "tp_1_hi_a_winding_bypass_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_TP1_High_A_Winding_Temp_Alarm_Bypass", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "005d67585a637b0a" + }, + { + "name": "tp_1_hi_b_winding_bypass_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_TP1_High_B_Winding_Temp_Alarm_Bypass", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "005e67585a632820" + }, + { + "name": "tp_1_hi_c_winding_bypass_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_TP1_High_C_Winding_Temp_Alarm_Bypass", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "005f67585a63b46e" + }, + { + "name": "tp_1_hi_discharge_bypass_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_TP1_High_Discharge_Alarm_Bypass", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "006067585a639728" + }, + { + "name": "tp_1_hi_inboard_temp_bypass_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_TP1_High_Inboard_Temp_Alarm_Bypass", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "006167585a632238" + }, + { + "name": "tp_1_hi_outboard_temp_bypass_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_TP1_High_Outboard_Temp_Alarm_Bypass", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "006267585a636b35" + }, + { + "name": "tp_1_hi_vibration_bypass_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_TP1_High_Vibration_Alarm_Bypass", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "006367585a63663b" + }, + { + "name": "tp_1_lo_discharge_bypass_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_TP1_Low_Discharge_Alarm_Bypass", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "006467585a634f02" + }, + { + "name": "tp_1_master_bypass_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_TP1_Master_Alarm_Bypass", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "006567585a6329e2" + }, + { + "name": "tp_1_master_fault_clear_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_TP1_Master_Fault_Clear", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "006667585a63c38c" + }, + { + "name": "tp_1_oil_cooler_bypass_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_TP1_Oil_Cooler_Bypass", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "006767585a638ef5" + }, + { + "name": "tp_1_oil_bypass_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_TP1_Oil_Level_Alarm_Bypass", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "006867585a63b605" + }, + { + "name": "tp_1_pid_auto_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_TP1_PID_Auto", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "006967585a63c0ee" + }, + { + "name": "tp_2_hi_a_winding_bypass_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_TP2_High_A_Winding_Temp_Alarm_Bypass", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "006a67585a638928" + }, + { + "name": "tp_2_hi_b_winding_bypass_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_TP2_High_B_Winding_Temp_Alarm_Bypass", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "006b67585a6324dd" + }, + { + "name": "tp_2_hi_c_winding_bypass_alm", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_TP2_High_C_Winding_Temp_Alarm_Bypass", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "006c67585a633e31" + }, + { + "name": "tp_2_hi_discharge_bypass_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_TP2_High_Discharge_Alarm_Bypass", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "006d67585a63dff6" + }, + { + "name": "tp_2_hi_inboard_temp_bypass_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_TP2_High_Inboard_Temp_Alarm_Bypass", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "006e67585a632303" + }, + { + "name": "tp_2_hi_outboard_temp_bypass_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_TP2_High_Outboard_Temp_Alarm_Bypass", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "006f67585a6392b0" + }, + { + "name": "tp_2_hi_vibration_bypass_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_TP2_High_Vibration_Alarm_Bypass", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "007067585a63c3b8" + }, + { + "name": "tp_2_lo_discharge_bypass_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_TP2_Low_Discharge_Alarm_Bypass", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "007167585a63c705" + }, + { + "name": "tp_2_master_bypass_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_TP2_Master_Alarm_Bypass", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "007267585a63cee6" + }, + { + "name": "tp_2_master_fault_clear_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_TP2_Master_Fault_Clear", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "007367585a638599" + }, + { + "name": "tp_2_oil_cooler_bypass_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_TP2_Oil_Cooler_Bypass", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "007467585a63808a" + }, + { + "name": "tp_2_oil_bypass_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_TP2_Oil_Level_Alarm_Bypass", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "007567585a63085b" + }, + { + "name": "tp_2_pid_auto_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_TP2_PID_Auto", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "007667585a63992d" + }, + { + "name": "ww_all_start_stop_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW_Start_Stop_Together", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "007767585a63fd90" + }, + { + "name": "ww_1_auto_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW1_Auto", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "007867585a63ccb6" + }, + { + "name": "ww_1_comms_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW1_Communication_Check", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "007967585a63694a" + }, + { + "name": "ww_1_hi_discharge_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW1_Enable_Hi_Disch_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "007a67585a633d2c" + }, + { + "name": "ww_1_hi_flow_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW1_Enable_Hi_Flow_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "007b67585a63fc8b" + }, + { + "name": "ww_1_lo_discharge_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW1_Enable_Lo_Disch_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "007c67585a63ef4b" + }, + { + "name": "ww_1_lo_flow_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW1_Enable_Lo_Flow_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "007d67585a6322a1" + }, + { + "name": "ww_1_lo_pip_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW1_Enable_Lo_PIP_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "007e67585a6343ad" + }, + { + "name": "ww_1_manual_run_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW1_Manual_Run", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "007f67585a636bb4" + }, + { + "name": "ww_1_pid_auto_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW1_PID_Auto", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "008067585a6321fd" + }, + { + "name": "ww_1_run_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW1_Run", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "008167585a6392a0" + }, + { + "name": "ww_2_auto_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW2_Auto", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "008267585a63a425" + }, + { + "name": "ww_2_comms_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW2_Communication_Check", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "008367585a63c38f" + }, + { + "name": "ww_2_hi_discharge_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW2_Enable_Hi_Disch_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "008467585a6381d5" + }, + { + "name": "ww_2_hi_flow_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW2_Enable_Hi_Flow_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "008567585a6330ad" + }, + { + "name": "ww_2_lo_discharge_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW2_Enable_Lo_Disch_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "008667585a63cb88" + }, + { + "name": "ww_2_lo_flow_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW2_Enable_Lo_Flow_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "008767585a63ac02" + }, + { + "name": "ww_2_lo_pip_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW2_Enable_Lo_PIP_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "008867585a63bd77" + }, + { + "name": "ww_2_manual_run_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW2_Manual_Run", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "008967585a63d50b" + }, + { + "name": "ww_2_pid_auto_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW2_PID_Auto", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "008a67585a6332fc" + }, + { + "name": "ww_2_run_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW2_Run", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "008b67585a63d20c" + }, + { + "name": "ww_3_auto_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW3_Auto", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "008c67585a6352a5" + }, + { + "name": "ww_3_comms_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW3_Communication_Check", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "008d67585a63b780" + }, + { + "name": "ww_3_hi_discharge_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW3_Enable_Hi_Disch_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "008e67585a6312b0" + }, + { + "name": "ww_3_hi_flow_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW3_Enable_Hi_Flow_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "008f67585a633af3" + }, + { + "name": "ww_3_lo_discharge_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW3_Enable_Lo_Disch_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "009067585a639b86" + }, + { + "name": "ww_3_lo_flow_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW3_Enable_Lo_Flow_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "009167585a63eacc" + }, + { + "name": "ww_3_lo_pip_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW3_Enable_Lo_PIP_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "009267585a63f53e" + }, + { + "name": "ww_3_manual_run_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW3_Manual_Run", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "009367585a63a73e" + }, + { + "name": "ww_3_pid_auto_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW3_PID_Auto", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "009467585a632ee5" + }, + { + "name": "ww_3_run_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW3_Run", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "009567585a630b92" + }, + { + "name": "ww_4_auto_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW4_Auto", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "009667585a63a59e" + }, + { + "name": "ww_4_comms_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW4_Communication_Check", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "009767585a63653c" + }, + { + "name": "ww_4_hi_discharge_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW4_Enable_Hi_Disch_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "009867585a637450" + }, + { + "name": "ww_4_hi_flow_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW4_Enable_Hi_Flow_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "009967585a638ba5" + }, + { + "name": "ww_4_lo_discharge_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW4_Enable_Lo_Disch_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "009a67585a63ab73" + }, + { + "name": "ww_4_lo_flow_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW4_Enable_Lo_Flow_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "009b67585a635f56" + }, + { + "name": "ww_4_lo_pip_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW4_Enable_Lo_PIP_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "009c67585a633463" + }, + { + "name": "ww_4_manual_run_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW4_Manual_Run", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "009d67585a63f6b9" + }, + { + "name": "ww_4_pid_auto_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW4_PID_Auto", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "009e67585a634ac9" + }, + { + "name": "ww_4_run_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW4_Run", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "009f67585a631b3b" + }, + { + "name": "ww_5_auto_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW5_Auto", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00a067585a635423" + }, + { + "name": "ww_5_comms_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW5_Communication_Check", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00a167585a63a862" + }, + { + "name": "ww_5_hi_discharge_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW5_Enable_Hi_Disch_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00a267585a63a4d5" + }, + { + "name": "ww_5_hi_flow_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW5_Enable_Hi_Flow_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00a367585a636506" + }, + { + "name": "ww_5_lo_discharge_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW5_Enable_Lo_Disch_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00a467585a63b938" + }, + { + "name": "ww_5_lo_flow_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW5_Enable_Lo_Flow_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00a567585a638cf7" + }, + { + "name": "ww_5_lo_pip_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW5_Enable_Lo_PIP_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00a667585a63e245" + }, + { + "name": "ww_5_manual_run_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW5_Manual_Run", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00a767585a63fc0a" + }, + { + "name": "ww_5_pid_auto_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW5_PID_Auto", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00a867585a63169b" + }, + { + "name": "ww_5_run_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW5_Run", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00a967585a6314ac" + }, + { + "name": "ww_6_auto_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW6_Auto", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00aa67585a63b7b4" + }, + { + "name": "ww_6_comms_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW6_Communication_Check", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00ab67585a63e611" + }, + { + "name": "ww_6_hi_discharge_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW6_Enable_Hi_Disch_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00ac67585a63027e" + }, + { + "name": "ww_6_hi_flow_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW6_Enable_Hi_Flow_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00ad67585a63a665" + }, + { + "name": "ww_6_lo_discharge_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW6_Enable_Lo_Disch_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00ae67585a6318e7" + }, + { + "name": "ww_6_lo_flow_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW6_Enable_Lo_Flow_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00af67585a6328cc" + }, + { + "name": "ww_6_lo_pip_enable_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW6_Enable_Lo_PIP_Alarm", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00b067585a6349e8" + }, + { + "name": "ww_6_manual_run_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW6_Manual_Run", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00b167585a637048" + }, + { + "name": "ww_6_pid_auto_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW6_PID_Auto", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00b267585a630937" + }, + { + "name": "ww_6_run_cmd", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "CMD_WW6_Run", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00b367585a63a6d6" + }, + { + "name": "current_day", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "INT", + "addr": "Current_Day", + "enableRequestCount": 0, + "enableBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00b467585a639f7c" + }, + { + "name": "current_hour", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "INT", + "addr": "Current_Hour", + "enableRequestCount": 0, + "enableBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00b567585a637bbb" + }, + { + "name": "current_minute", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "INT", + "addr": "Current_Minute", + "enableRequestCount": 0, + "enableBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00b667585a63be14" + }, + { + "name": "current_second", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "INT", + "addr": "Current_Second", + "enableRequestCount": 0, + "enableBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00b767585a6374ea" + }, + { + "name": "tp_1_charge_pump_running", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "FBK_TP1_Charge_Pump_Running", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00b867585a63d9fc" + }, + { + "name": "tp_1_lo_oil", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "FBK_TP1_Low_Oil_Level", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00b967585a6346db" + }, + { + "name": "tp_1_oil_cooler_running", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "FBK_TP1_Oil_Cooler_Running", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00ba67585a63f531" + }, + { + "name": "tp_1_vfd_running", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "FBK_TP1_VFD_Running", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00bb67585a637685" + }, + { + "name": "tp_2_charge_pump_running", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "FBK_TP2_Charge_Pump_Running", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00bc67585a63b549" + }, + { + "name": "tp_2_lo_oil", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "FBK_TP2_Low_Oil_Level", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00bd67585a63976e" + }, + { + "name": "tp_2_oil_cooler_running", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "FBK_TP2_Oil_Cooler_Running", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00be67585a63096b" + }, + { + "name": "tp_2_vfd_running", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "FBK_TP2_VFD_Running", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00bf67585a631729" + }, + { + "name": "ww_1_vfd_running", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "FBK_WW1_VFD_Running", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00c067585a63f0a0" + }, + { + "name": "ww_2_vfd_running", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "FBK_WW2_VFD_Running", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00c167585a633b3a" + }, + { + "name": "ww_3_vfd_running", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "FBK_WW3_VFD_Running", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00c267585a637c9d" + }, + { + "name": "ww_4_vfd_running", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "FBK_WW4_VFD_Running", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00c367585a633a37" + }, + { + "name": "ww_5_vfd_running", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "FBK_WW5_VFD_Running", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00c467585a633204" + }, + { + "name": "ww_6_vfd_running", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "FBK_WW6_VFD_Running", + "enableRequestCount": 0, + "bitMap": 0, + "reverseBit": 0, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00c567585a63a763" + }, + { + "name": "pond_level_start_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_Pond_Level_Start", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00c667585a631a39" + }, + { + "name": "ww_1_pond_level_start_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_Pond_Level_Start_WW1", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00c767585a631f0f" + }, + { + "name": "ww_2_pond_level_start_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_Pond_Level_Start_WW2", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00c867585a63c0bd" + }, + { + "name": "ww_3_pond_level_start_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_Pond_Level_Start_WW3", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00c967585a63e49c" + }, + { + "name": "ww_4_pond_level_start_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_Pond_Level_Start_WW4", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00ca67585a63642e" + }, + { + "name": "ww_5_pond_level_start_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_Pond_Level_Start_WW5", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00cb67585a63e8bb" + }, + { + "name": "ww_6_pond_level_start_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_Pond_Level_Start_WW6", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00cc67585a631d2e" + }, + { + "name": "pond_level_stop_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_Pond_Level_Stop", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00cd67585a63c4dd" + }, + { + "name": "ww_1_pond_level_stop_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_Pond_Level_Stop_WW1", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00ce67585a630058" + }, + { + "name": "ww_2_pond_level_stop_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_Pond_Level_Stop_WW2", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00cf67585a63e3a8" + }, + { + "name": "ww_3_pond_level_stop_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_Pond_Level_Stop_WW3", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00d067585a638633" + }, + { + "name": "ww_4_pond_level_stop_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_Pond_Level_Stop_WW4", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00d167585a63bc3e" + }, + { + "name": "ww_5_pond_level_stop_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_Pond_Level_Stop_WW5", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00d267585a631882" + }, + { + "name": "ww_6_pond_level_stop_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_Pond_Level_Stop_WW6", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00d367585a63d73a" + }, + { + "name": "suction_permissive_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_Suction_PSI_Permissive", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00d467585a633691" + }, + { + "name": "tp_1_hi_a_winding_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_TP1_A_Winding_High", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00d567585a63922e" + }, + { + "name": "tp_1_hi_b_winding_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_TP1_B_Winding_High", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00d667585a638d5f" + }, + { + "name": "tp_1_hi_c_winding_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_TP1_C_Winding_High", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00d767585a639748" + }, + { + "name": "tp_1_hi_discharge_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_TP1_High_Discharge_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00d867585a6369b7" + }, + { + "name": "tp_1_hi_vibration_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_TP1_High_Vibration_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00d967585a63b3a2" + }, + { + "name": "tp_1_hi_inboard_temp_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_TP1_Inboard_High", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00da67585a637666" + }, + { + "name": "tp_1_lo_discharge_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_TP1_Low_Discharge_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00db67585a6368c6" + }, + { + "name": "tp_1_hi_outboard_temp_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_TP1_Outboard_High", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00dc67585a6336bc" + }, + { + "name": "tp_1_pid_manual_frequency_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_TP1_PID_Manual_Freq", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00dd67585a63e5b2" + }, + { + "name": "tp_1_pid_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_TP1_PID_Setpoint", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00de67585a635bc5" + }, + { + "name": "tp_2_hi_a_winding_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_TP2_A_Winding_High", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00df67585a63895f" + }, + { + "name": "tp_2_hi_b_winding_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_TP2_B_Winding_High", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00e067585a631542" + }, + { + "name": "tp_2_hi_c_winding_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_TP2_C_Winding_High", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00e167585a63c7b4" + }, + { + "name": "tp_2_hi_discharge_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_TP2_High_Discharge_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00e267585a6324a6" + }, + { + "name": "tp_2_hi_vibration_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_TP2_High_Vibration_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00e367585a63083f" + }, + { + "name": "tp_2_hi_inboard_temp_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_TP2_Inboard_High", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00e467585a638905" + }, + { + "name": "tp_2_lo_discharge_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_TP2_Low_Discharge_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00e567585a6344d0" + }, + { + "name": "tp_2_hi_outboard_temp_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_TP2_Outboard_High", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00e667585a63708c" + }, + { + "name": "tp_2_pid_manual_frequency_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_TP2_PID_Manual_Freq", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00e767585a63c10e" + }, + { + "name": "tp_2_pid_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_TP2_PID_Setpoint", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00e867585a63f5fb" + }, + { + "name": "ww_1_hand_frequency_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW1_Hand_Freq", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00e967585a63276e" + }, + { + "name": "ww_1_hi_discharge_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW1_Hi_Disch_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00ea67585a636693" + }, + { + "name": "ww_1_hi_flow_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW1_Hi_Flow_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00eb67585a63571f" + }, + { + "name": "ww_1_lo_discharge_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW1_Lo_Disch_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00ec67585a6334d2" + }, + { + "name": "ww_1_lo_flow_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW1_Lo_Flow_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00ed67585a63f193" + }, + { + "name": "ww_1_lo_pip_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW1_Lo_PIP_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00ee67585a63e633" + }, + { + "name": "ww_1_pid_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW1_PID_Setpoint", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00ef67585a639d6e" + }, + { + "name": "ww_2_hand_frequency_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW2_Hand_Freq", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00f067585a636729" + }, + { + "name": "ww_2_hi_discharge_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW2_Hi_Disch_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00f167585a637e63" + }, + { + "name": "ww_2_hi_flow_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW2_Hi_Flow_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00f267585a630a21" + }, + { + "name": "ww_2_lo_discharge_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW2_Lo_Disch_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00f367585a637607" + }, + { + "name": "ww_2_lo_flow_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW2_Lo_Flow_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00f467585a63594c" + }, + { + "name": "ww_2_lo_pip_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW2_Lo_PIP_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00f567585a635e3c" + }, + { + "name": "ww_2_pid_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW2_PID_Setpoint", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00f667585a637fda" + }, + { + "name": "ww_3_hand_frequency_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW3_Hand_Freq", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00f767585a634798" + }, + { + "name": "ww_3_hi_discharge_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW3_Hi_Disch_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00f867585a639b2c" + }, + { + "name": "ww_3_hi_flow_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW3_Hi_Flow_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00f967585a63ec09" + }, + { + "name": "ww_3_lo_discharge_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW3_Lo_Disch_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00fa67585a633f83" + }, + { + "name": "ww_3_lo_flow_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW3_Lo_Flow_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00fb67585a639d93" + }, + { + "name": "ww_3_lo_pip_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW3_Lo_PIP_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00fc67585a63af71" + }, + { + "name": "ww_3_pid_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW3_PID_Setpoint", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00fd67585a6345fd" + }, + { + "name": "ww_4_hand_frequency_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW4_Hand_Freq", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00fe67585a63b586" + }, + { + "name": "ww_4_hi_discharge_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW4_Hi_Disch_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "00ff67585a63ba89" + }, + { + "name": "ww_4_hi_flow_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW4_Hi_Flow_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "010067585a63bb75" + }, + { + "name": "ww_4_lo_discharge_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW4_Lo_Disch_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "010167585a639164" + }, + { + "name": "ww_4_lo_flow_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW4_Lo_Flow_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "010267585a63343c" + }, + { + "name": "ww_4_lo_pip_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW4_Lo_PIP_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "010367585a639bbc" + }, + { + "name": "ww_4_pid_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW4_PID_Setpoint", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "010467585a637d6c" + }, + { + "name": "ww_5_hand_frequency_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW5_Hand_Freq", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "010567585a631596" + }, + { + "name": "ww_5_hi_discharge_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW5_Hi_Disch_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "010667585a6307be" + }, + { + "name": "ww_5_hi_flow_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW5_Hi_Flow_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "010767585a639621" + }, + { + "name": "ww_5_lo_discharge_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW5_Lo_Disch_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "010867585a63aca3" + }, + { + "name": "ww_5_lo_flow_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW5_Lo_Flow_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "010967585a633fd9" + }, + { + "name": "ww_5_lo_pip_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW5_Lo_PIP_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "010a67585a63e749" + }, + { + "name": "ww_5_pid_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW5_PID_Setpoint", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "010b67585a634a47" + }, + { + "name": "ww_6_hand_frequency_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW6_Hand_Freq", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "010c67585a630698" + }, + { + "name": "ww_6_hi_discharge_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW6_Hi_Disch_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "010d67585a6366c9" + }, + { + "name": "ww_6_hi_flow_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW6_Hi_Flow_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "010e67585a6301bd" + }, + { + "name": "ww_6_lo_discharge_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW6_Lo_Disch_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "010f67585a630ba6" + }, + { + "name": "ww_6_lo_flow_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW6_Lo_Flow_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "011067585a636a57" + }, + { + "name": "ww_6_lo_pip_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW6_Lo_PIP_Alarm", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "011167585a630daa" + }, + { + "name": "ww_6_pid_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "SPT_WW6_PID_Setpoint", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "011267585a6376ee" + }, + { + "name": "tp_1_charge_pump_run", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "TP1_Charge_Pump_Run", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "011367585a635ab1" + }, + { + "name": "tp_1_oil_cooler_run", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "TP1_Oil_Cooler_Run", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "011467585a635c63" + }, + { + "name": "tp_2_charge_pump_run", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "TP2_Charge_Pump_Run", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "011567585a632034" + }, + { + "name": "tp_2_oil_cooler_run", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "TP2_Oil_Cooler_Run", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "011667585a6358f1" + }, + { + "name": "pond_level", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_Pond_Level_Scaled", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "011767585a6324b1" + }, + { + "name": "tp_1_a_winding_temp", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP_1_A_Winding_Temp_Scaled", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "011867585a632027" + }, + { + "name": "tp_1_b_winding_temp", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP_1_B_Winding_Temp_Scaled", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "011967585a633fe8" + }, + { + "name": "tp_1_c_winding_temp", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP_1_C_Winding_Temp_Scaled", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "011a67585a63a4cd" + }, + { + "name": "tp_1_discharge", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP_1_Discharge_PSI_Scaled", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "011b67585a635418" + }, + { + "name": "tp_1_inboard_temp", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP_1_Inboard_Temp_Scaled", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "011c67585a63b706" + }, + { + "name": "tp_1_outboard_temp", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP_1_Outboard_Temp_Scaled", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "011d67585a63cea8" + }, + { + "name": "tp_1_suction", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP_1_Suction_PSI_Scaled", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "011e67585a63a6ac" + }, + { + "name": "tp_1_vibration", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP_1_Vibration_Scaled", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "011f67585a63a069" + }, + { + "name": "tp_2_a_winding_temp", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP_2_A_Winding_Temp_Scaled", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "012067585a63b8ef" + }, + { + "name": "tp_2_b_winding_temp", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP_2_B_Winding_Temp_Scaled", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "012167585a63c4aa" + }, + { + "name": "tp_2_c_winding_temp", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP_2_C_Winding_Temp_Scaled", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "012267585a63de0e" + }, + { + "name": "tp_2_discharge", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP_2_Discharge_PSI_Scaled", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "012367585a63f201" + }, + { + "name": "tp_2_inboard_temp", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP_2_Inboard_Temp_Scaled", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "012467585a63eedc" + }, + { + "name": "tp_2_outboard_temp", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP_2_Outboard_Temp_Scaled", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "012567585a63fa1c" + }, + { + "name": "tp_2_suction", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP_2_Suction_PSI_Scaled", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "012667585a63e93d" + }, + { + "name": "tp_2_vibration", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP_2_Vibration_Scaled", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "012767585a6399c3" + }, + { + "name": "tp_flow_rate", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP_FlowRate", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "012867585a634adc" + }, + { + "name": "tp_yesterday_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP_FM_Yest_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "012967585a635bbd" + }, + { + "name": "tp_last_month_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP_LastMonth_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "012a67585a63aece" + }, + { + "name": "tp_lifetime_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP_Lifetime_Flow_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "012b67585a6390e6" + }, + { + "name": "tp_month_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP_Monthly_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "012c67585a63fa5a" + }, + { + "name": "tp_today_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP_Today_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "012d67585a638eb1" + }, + { + "name": "tp_1_vfd_frequency", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP1_VFD_Frequency_Setpoint", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "012e67585a63f56d" + }, + { + "name": "tp_1_vfd_output_current", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP1_VFD_Output_Current", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "012f67585a636547" + }, + { + "name": "tp_1_vfd_output_frequency", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP1_VFD_Output_Frequency", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "013067585a638478" + }, + { + "name": "tp_1_vfd_output_voltage", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP1_VFD_Output_Voltage", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "013167585a63e924" + }, + { + "name": "tp_2_vfd_frequency", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP2_VFD_Frequency_Setpoint", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "013267585a631f99" + }, + { + "name": "tp_2_vfd_output_current", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP2_VFD_Output_Current", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "013367585a63cc25" + }, + { + "name": "tp_2_vfd_output_frequency", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP2_VFD_Output_Frequency", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "013467585a630eb5" + }, + { + "name": "tp_2_vfd_output_voltage", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_TP2_VFD_Output_Voltage", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "013567585a639976" + }, + { + "name": "wtp_1_discharge", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WTP_1_Discharge_PSI_Scaled", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "013667585a6339ff" + }, + { + "name": "wtp_1_suction", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WTP_1_Suction_PSI_Scaled", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "013767585a636dd1" + }, + { + "name": "wtp_1_vibration", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WTP_1_Vibration_Scaled", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "013867585a63981c" + }, + { + "name": "wtp_2_discharge", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WTP_2_Discharge_PSI_Scaled", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "013967585a638f8a" + }, + { + "name": "wtp_2_suction", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WTP_2_Suction_PSI_Scaled", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "013a67585a6380f5" + }, + { + "name": "wtp_2_vibration", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WTP_2_Vibration_Scaled", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "013b67585a634574" + }, + { + "name": "wtp_flow_rate", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WTP_FlowRate", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "013c67585a630309" + }, + { + "name": "wtp_yesterday_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WTP_FM_Yest_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "013d67585a63efbe" + }, + { + "name": "wtp_last_month_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WTP_LastMonth_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "013e67585a6374ff" + }, + { + "name": "wtp_lifetime_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WTP_Lifetime_Flow_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "013f67585a63c89a" + }, + { + "name": "wtp_month_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WTP_Monthly_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "014067585a639cec" + }, + { + "name": "wtp_today_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WTP_Today_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "014167585a63adc6" + }, + { + "name": "ww_1_discharge", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW1_Discharge_PSI", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "014267585a63f4c3" + }, + { + "name": "ww_1_downhole", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW1_Downhole_PSI", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "014367585a634423" + }, + { + "name": "ww_1_flow_rate", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW1_Flowmeter_FR", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "014467585a639186" + }, + { + "name": "ww_1_last_month_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW1_Flowmeter_LastMonth_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "014567585a6335ad" + }, + { + "name": "ww_1_month_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW1_Flowmeter_Month_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "014667585a635570" + }, + { + "name": "ww_1_today_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW1_Flowmeter_Todays_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "014767585a635343" + }, + { + "name": "ww_1_lifetime_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW1_Flowmeter_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "014867585a635749" + }, + { + "name": "ww_1_yesterday_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW1_Flowmeter_Yest_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "014967585a639c56" + }, + { + "name": "ww_1_vfd_frequency_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW1_VFD_Frequency_Setpoint", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "014a67585a632519" + }, + { + "name": "ww_1_vfd_current", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW1_VFD_Output_Current", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "014b67585a6314e3" + }, + { + "name": "ww_1_vfd_frequency", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW1_VFD_Output_Frequency", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "014c67585a632898" + }, + { + "name": "ww_1_vfd_voltage", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW1_VFD_Output_Voltage", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "014d67585a63a89a" + }, + { + "name": "ww_2_discharge", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW2_Discharge_PSI", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "014e67585a63532b" + }, + { + "name": "ww_2_downhole", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW2_Downhole_PSI", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "014f67585a6390cb" + }, + { + "name": "ww_2_flow_rate", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW2_Flowmeter_FR", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "015067585a637729" + }, + { + "name": "ww_2_last_month_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW2_Flowmeter_LastMonth_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "015167585a630f2e" + }, + { + "name": "ww_2_month_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW2_Flowmeter_Month_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "015267585a63e331" + }, + { + "name": "ww_2_today_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW2_Flowmeter_Todays_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "015367585a634769" + }, + { + "name": "ww_2_lifetime_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW2_Flowmeter_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "015467585a6301df" + }, + { + "name": "ww_2_yesterday_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW2_Flowmeter_Yest_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "015567585a630a18" + }, + { + "name": "ww_2_vfd_frequency_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW2_VFD_Frequency_Setpoint", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "015667585a631d08" + }, + { + "name": "ww_2_vfd_current", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW2_VFD_Output_Current", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "015767585a633fc6" + }, + { + "name": "ww_2_vfd_frequency", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW2_VFD_Output_Frequency", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "015867585a6393a1" + }, + { + "name": "ww_2_vfd_voltage", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW2_VFD_Output_Voltage", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "015967585a63184b" + }, + { + "name": "ww_3_discharge", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW3_Discharge_PSI", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "015a67585a6349db" + }, + { + "name": "ww_3_downhole", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW3_Downhole_PSI", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "015b67585a634b2d" + }, + { + "name": "ww_3_flow_rate", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW3_Flowmeter_FR", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "015c67585a63e330" + }, + { + "name": "ww_3_last_month_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW3_Flowmeter_LastMonth_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "015d67585a63f159" + }, + { + "name": "ww_3_month_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW3_Flowmeter_Month_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "015e67585a63c2e1" + }, + { + "name": "ww_3_today_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW3_Flowmeter_Todays_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "015f67585a636f30" + }, + { + "name": "ww_3_lifetime_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW3_Flowmeter_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "016067585a63b1f6" + }, + { + "name": "ww_3_yesterday_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW3_Flowmeter_Yest_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "016167585a63ac1c" + }, + { + "name": "ww_3_vfd_frequency_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW3_VFD_Frequency_Setpoint", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "016267585a637b53" + }, + { + "name": "ww_3_vfd_current", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW3_VFD_Output_Current", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "016367585a63226d" + }, + { + "name": "ww_3_vfd_frequency", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW3_VFD_Output_Frequency", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "016467585a637df1" + }, + { + "name": "ww_3_vfd_voltage", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW3_VFD_Output_Voltage", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "016567585a63f5f3" + }, + { + "name": "ww_4_discharge", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW4_Discharge_PSI", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "016667585a6323aa" + }, + { + "name": "ww_4_downhole", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW4_Downhole_PSI", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "016767585a63a2c4" + }, + { + "name": "ww_4_flow_rate", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW4_Flowmeter_FR", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "016867585a63b971" + }, + { + "name": "ww_4_last_month_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW4_Flowmeter_LastMonth_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "016967585a6389f6" + }, + { + "name": "ww_4_month_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW4_Flowmeter_Month_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "016a67585a634229" + }, + { + "name": "ww_4_today_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW4_Flowmeter_Todays_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "016b67585a63b01b" + }, + { + "name": "ww_4_lifetime_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW4_Flowmeter_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "016c67585a635894" + }, + { + "name": "ww_4_yesterday_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW4_Flowmeter_Yest_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "016d67585a6313d2" + }, + { + "name": "ww_4_vfd_frequency_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW4_VFD_Frequency_Setpoint", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "016e67585a634ae9" + }, + { + "name": "ww_4_vfd_current", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW4_VFD_Output_Current", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "016f67585a63c7c8" + }, + { + "name": "ww_4_vfd_frequency", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW4_VFD_Output_Frequency", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "017067585a637ac4" + }, + { + "name": "ww_4_vfd_voltage", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW4_VFD_Output_Voltage", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "017167585a637e02" + }, + { + "name": "ww_5_discharge", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW5_Discharge_PSI", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "017267585a636f89" + }, + { + "name": "ww_5_downhole", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW5_Downhole_PSI", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "017367585a637466" + }, + { + "name": "ww_5_flow_rate", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW5_Flowmeter_FR", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "017467585a63fee6" + }, + { + "name": "ww_5_last_month_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW5_Flowmeter_LastMonth_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "017567585a63b367" + }, + { + "name": "ww_5_month_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW5_Flowmeter_Month_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "017667585a6324a7" + }, + { + "name": "ww_5_today_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW5_Flowmeter_Todays_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "017767585a638de2" + }, + { + "name": "ww_5_lifetime_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW5_Flowmeter_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "017867585a636138" + }, + { + "name": "ww_5_yesterday_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW5_Flowmeter_Yest_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "017967585a63c904" + }, + { + "name": "ww_5_vfd_frequency_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW5_VFD_Frequency_Setpoint", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "017a67585a63bbe3" + }, + { + "name": "ww_5_vfd_current", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW5_VFD_Output_Current", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "017b67585a63ae4d" + }, + { + "name": "ww_5_vfd_frequency", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW5_VFD_Output_Frequency", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "017c67585a63fcd4" + }, + { + "name": "ww_5_vfd_voltage", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW5_VFD_Output_Voltage", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "017d67585a63b5f9" + }, + { + "name": "ww_6_discharge", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW6_Discharge_PSI", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "017e67585a63eb8f" + }, + { + "name": "ww_6_downhole", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW6_Downhole_PSI", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "017f67585a63b430" + }, + { + "name": "ww_6_flow_rate", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW6_Flowmeter_FR", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "018067585a6365cb" + }, + { + "name": "ww_6_last_month_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW6_Flowmeter_LastMonth_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "018167585a6309e6" + }, + { + "name": "ww_6_month_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW6_Flowmeter_Month_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "018267585a638086" + }, + { + "name": "ww_6_today_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW6_Flowmeter_Todays_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "018367585a637c1f" + }, + { + "name": "ww_6_lifetime_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW6_Flowmeter_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "018467585a63a963" + }, + { + "name": "ww_6_yesterday_total", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW6_Flowmeter_Yest_Total", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "018567585a63a39d" + }, + { + "name": "ww_6_vfd_frequency_spt", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW6_VFD_Frequency_Setpoint", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "rw", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "018667585a63a845" + }, + { + "name": "ww_6_vfd_current", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW6_VFD_Output_Current", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "018767585a631ae1" + }, + { + "name": "ww_6_vfd_frequency", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW6_VFD_Output_Frequency", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "018867585a63f97b" + }, + { + "name": "ww_6_vfd_voltage", + "ctrlName": "rr_facility", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Val_WW6_VFD_Output_Voltage", + "enableRequestCount": 0, + "decimal": 2, + "readWrite": "ro", + "unit": "", + "desc": "", + "storageLwTSDB": 1, + "transformType": 0, + "_id": "018967585a631bf9" + } + ], + "alarmLables": [ + "default" + ], + "alarms": [ + { + "name": "pond_level_input_alm", + "ctrlName": "rr_facility", + "measureName": "pond_level_input_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "pond level input failure alarm", + "alarmLable": "default", + "_id": "0000675862ed5bfd" + }, + { + "name": "tp_1_charge_pump_fail_to_start_alm", + "ctrlName": "rr_facility", + "measureName": "tp_1_charge_pump_fail_to_start_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "tp 1 charge pump failure", + "alarmLable": "default", + "_id": "0001675862edaa82" + }, + { + "name": "tp_1_hi_a_winding_alm", + "ctrlName": "rr_facility", + "measureName": "tp_1_hi_a_winding_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "tp 1 hi a winding failure", + "alarmLable": "default", + "_id": "0002675862ed279a" + }, + { + "name": "tp_1_hi_b_winding_alm", + "ctrlName": "rr_facility", + "measureName": "tp_1_hi_b_winding_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "tp 1 hi b winding failure", + "alarmLable": "default", + "_id": "0003675862eddb69" + }, + { + "name": "tp_1_hi_c_winding_alm", + "ctrlName": "rr_facility", + "measureName": "tp_1_hi_c_winding_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "tp 1 hi c winding failure", + "alarmLable": "default", + "_id": "0004675862ed4e82" + }, + { + "name": "tp_1_hi_discharge_alm", + "ctrlName": "rr_facility", + "measureName": "tp_1_hi_discharge_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "tp 1 hi discharge failure", + "alarmLable": "default", + "_id": "0005675862ed558a" + }, + { + "name": "tp_1_hi_inboard_temp_alm", + "ctrlName": "rr_facility", + "measureName": "tp_1_hi_inboard_temp_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0006675862ed3438" + }, + { + "name": "tp_1_hi_outboard_temp_alm", + "ctrlName": "rr_facility", + "measureName": "tp_1_hi_outboard_temp_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0007675862ed4757" + }, + { + "name": "tp_1_hi_vibration_alm", + "ctrlName": "rr_facility", + "measureName": "tp_1_hi_vibration_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0008675862ed1974" + }, + { + "name": "tp_1_lo_discharge_alm", + "ctrlName": "rr_facility", + "measureName": "tp_1_lo_discharge_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0009675862ed08f5" + }, + { + "name": "tp_1_lo_oil_alm", + "ctrlName": "rr_facility", + "measureName": "tp_1_lo_oil_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "000a675862ede843" + }, + { + "name": "tp_1_lo_suction_alm", + "ctrlName": "rr_facility", + "measureName": "tp_1_lo_suction_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "000b675862ed3fc1" + }, + { + "name": "tp_1_oil_cooler_failed_to_start_alm", + "ctrlName": "rr_facility", + "measureName": "tp_1_oil_cooler_failed_to_start_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "000c675862ed4e58" + }, + { + "name": "tp_2_charge_pump_fail_to_start_alm", + "ctrlName": "rr_facility", + "measureName": "tp_2_charge_pump_fail_to_start_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "000d675862eda433" + }, + { + "name": "tp_2_hi_a_winding_alm", + "ctrlName": "rr_facility", + "measureName": "tp_2_hi_a_winding_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "000e675862edc719" + }, + { + "name": "tp_2_hi_b_winding_alm", + "ctrlName": "rr_facility", + "measureName": "tp_2_hi_b_winding_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "000f675862eddd03" + }, + { + "name": "tp_2_hi_c_winding_alm", + "ctrlName": "rr_facility", + "measureName": "tp_2_hi_c_winding_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0010675862ed83fc" + }, + { + "name": "tp_2_hi_discharge_alm", + "ctrlName": "rr_facility", + "measureName": "tp_2_hi_discharge_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0011675862edcb4f" + }, + { + "name": "tp_2_hi_inboard_temp_alm", + "ctrlName": "rr_facility", + "measureName": "tp_2_hi_inboard_temp_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0012675862edfb7c" + }, + { + "name": "tp_2_hi_outboard_temp_alm", + "ctrlName": "rr_facility", + "measureName": "tp_2_hi_outboard_temp_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0013675862ede92a" + }, + { + "name": "tp_2_hi_vibration_alm", + "ctrlName": "rr_facility", + "measureName": "tp_2_hi_vibration_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0014675862edb06a" + }, + { + "name": "tp_2_lo_discharge_alm", + "ctrlName": "rr_facility", + "measureName": "tp_2_lo_discharge_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0015675862ed539f" + }, + { + "name": "tp_2_lo_oil_alm", + "ctrlName": "rr_facility", + "measureName": "tp_2_lo_oil_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0016675862ed0fb2" + }, + { + "name": "tp_2_lo_suction_alm", + "ctrlName": "rr_facility", + "measureName": "tp_2_lo_suction_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0017675862ed57af" + }, + { + "name": "tp_2_oil_cooler_failed_to_start_alm", + "ctrlName": "rr_facility", + "measureName": "tp_2_oil_cooler_failed_to_start_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0018675862ed234b" + }, + { + "name": "wtp_1_discharge_alm", + "ctrlName": "rr_facility", + "measureName": "wtp_1_discharge_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "wtp 1 discharge input failure", + "alarmLable": "default", + "_id": "0019675862ed4ffb" + }, + { + "name": "wtp_1_suction_alm", + "ctrlName": "rr_facility", + "measureName": "wtp_1_suction_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "wtp 1 suction input failure", + "alarmLable": "default", + "_id": "001a675862eddb41" + }, + { + "name": "wtp_1_vibration_alm", + "ctrlName": "rr_facility", + "measureName": "wtp_1_vibration_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "wtp 1 vibration failure", + "alarmLable": "default", + "_id": "001b675862ede3be" + }, + { + "name": "wtp_2_discharge_alm", + "ctrlName": "rr_facility", + "measureName": "wtp_2_discharge_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "wtp 2 discharge input failure", + "alarmLable": "default", + "_id": "001c675862ed1797" + }, + { + "name": "wtp_2_suction_alm", + "ctrlName": "rr_facility", + "measureName": "wtp_2_suction_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "wtp 2 suction input failure", + "alarmLable": "default", + "_id": "001d675862edab08" + }, + { + "name": "wtp_2_vibration_alm", + "ctrlName": "rr_facility", + "measureName": "wtp_2_vibration_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "wtp 2 vibration failure", + "alarmLable": "default", + "_id": "001e675862ed1ed0" + }, + { + "name": "ww_1_comms_alm", + "ctrlName": "rr_facility", + "measureName": "ww_1_comms_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "water well 1 comms failure", + "alarmLable": "default", + "_id": "001f675862ed9fe2" + }, + { + "name": "ww_1_control_power_alm", + "ctrlName": "rr_facility", + "measureName": "ww_1_control_power_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0020675862ed7cd7" + }, + { + "name": "ww_1_hi_discharge_alm", + "ctrlName": "rr_facility", + "measureName": "ww_1_hi_discharge_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0021675862edc99d" + }, + { + "name": "ww_1_hi_flow_alm", + "ctrlName": "rr_facility", + "measureName": "ww_1_hi_flow_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0022675862ed339f" + }, + { + "name": "ww_1_hoa_in_manual_alm", + "ctrlName": "rr_facility", + "measureName": "ww_1_hoa_in_manual_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0023675862edc3f0" + }, + { + "name": "ww_1_lo_discharge_alm", + "ctrlName": "rr_facility", + "measureName": "ww_1_lo_discharge_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0024675862ed0bfa" + }, + { + "name": "ww_1_lo_flow_alm", + "ctrlName": "rr_facility", + "measureName": "ww_1_lo_flow_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0025675862edce1a" + }, + { + "name": "ww_1_lo_pip_alm", + "ctrlName": "rr_facility", + "measureName": "ww_1_lo_pip_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0026675862eddc73" + }, + { + "name": "ww_1_master_comm_alm", + "ctrlName": "rr_facility", + "measureName": "ww_1_master_comm_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0027675862ed0a8f" + }, + { + "name": "ww_1_vfd_alm", + "ctrlName": "rr_facility", + "measureName": "ww_1_vfd_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0028675862ed2233" + }, + { + "name": "ww_2_comms_alm", + "ctrlName": "rr_facility", + "measureName": "ww_2_comms_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "water well 2 comms failure", + "alarmLable": "default", + "_id": "0029675862ed731a" + }, + { + "name": "ww_2_control_power_alm", + "ctrlName": "rr_facility", + "measureName": "ww_2_control_power_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "002a675862ed6b2d" + }, + { + "name": "ww_2_hi_discharge_alm", + "ctrlName": "rr_facility", + "measureName": "ww_2_hi_discharge_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "002b675862edadd1" + }, + { + "name": "ww_2_hi_flow_alm", + "ctrlName": "rr_facility", + "measureName": "ww_2_hi_flow_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "002c675862ed6555" + }, + { + "name": "ww_2_hoa_in_manual_alm", + "ctrlName": "rr_facility", + "measureName": "ww_2_hoa_in_manual_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "002d675862ed31db" + }, + { + "name": "ww_2_lo_discharge_alm", + "ctrlName": "rr_facility", + "measureName": "ww_2_lo_discharge_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "002e675862eda771" + }, + { + "name": "ww_2_lo_flow_alm", + "ctrlName": "rr_facility", + "measureName": "ww_2_lo_flow_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "002f675862ed130c" + }, + { + "name": "ww_2_lo_pip_alm", + "ctrlName": "rr_facility", + "measureName": "ww_2_lo_pip_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0030675862edb787" + }, + { + "name": "ww_2_master_comm_alm", + "ctrlName": "rr_facility", + "measureName": "ww_2_master_comm_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0031675862ed575d" + }, + { + "name": "ww_2_vfd_alm", + "ctrlName": "rr_facility", + "measureName": "ww_2_vfd_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0032675862edc598" + }, + { + "name": "ww_3_comms_alm", + "ctrlName": "rr_facility", + "measureName": "ww_3_comms_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "water well 3 comms failure", + "alarmLable": "default", + "_id": "0033675862edf1f4" + }, + { + "name": "ww_3_control_power_alm", + "ctrlName": "rr_facility", + "measureName": "ww_3_control_power_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0034675862edc61d" + }, + { + "name": "ww_3_hi_discharge_alm", + "ctrlName": "rr_facility", + "measureName": "ww_3_hi_discharge_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0035675862ed171b" + }, + { + "name": "ww_3_hi_flow_alm", + "ctrlName": "rr_facility", + "measureName": "ww_3_hi_flow_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0036675862edddb8" + }, + { + "name": "ww_3_hoa_in_manual_alm", + "ctrlName": "rr_facility", + "measureName": "ww_3_hoa_in_manual_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0037675862eda2c1" + }, + { + "name": "ww_3_lo_discharge_alm", + "ctrlName": "rr_facility", + "measureName": "ww_3_lo_discharge_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0038675862ed9e5f" + }, + { + "name": "ww_3_lo_flow_alm", + "ctrlName": "rr_facility", + "measureName": "ww_3_lo_flow_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0039675862ed071e" + }, + { + "name": "ww_3_lo_pip_alm", + "ctrlName": "rr_facility", + "measureName": "ww_3_lo_pip_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "003a675862eda917" + }, + { + "name": "ww_3_master_comm_alm", + "ctrlName": "rr_facility", + "measureName": "ww_3_master_comm_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "003b675862ed29a6" + }, + { + "name": "ww_3_vfd_alm", + "ctrlName": "rr_facility", + "measureName": "ww_3_vfd_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "003c675862ed9637" + }, + { + "name": "ww_4_comms_alm", + "ctrlName": "rr_facility", + "measureName": "ww_4_comms_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "water well 4 comms failure", + "alarmLable": "default", + "_id": "003d675862edfeb1" + }, + { + "name": "ww_4_control_power_alm", + "ctrlName": "rr_facility", + "measureName": "ww_4_control_power_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "003e675862ed6c49" + }, + { + "name": "ww_4_hi_discharge_alm", + "ctrlName": "rr_facility", + "measureName": "ww_4_hi_discharge_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "003f675862ed6041" + }, + { + "name": "ww_4_hi_flow_alm", + "ctrlName": "rr_facility", + "measureName": "ww_4_hi_flow_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0040675862ed8dec" + }, + { + "name": "ww_4_hoa_in_manual_alm", + "ctrlName": "rr_facility", + "measureName": "ww_4_hoa_in_manual_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0041675862edb8fa" + }, + { + "name": "ww_4_lo_discharge_alm", + "ctrlName": "rr_facility", + "measureName": "ww_4_lo_discharge_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0042675862ed1f01" + }, + { + "name": "ww_4_lo_flow_alm", + "ctrlName": "rr_facility", + "measureName": "ww_4_lo_flow_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0043675862ed4ffe" + }, + { + "name": "ww_4_lo_pip_alm", + "ctrlName": "rr_facility", + "measureName": "ww_4_lo_pip_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0044675862ed774d" + }, + { + "name": "ww_4_master_comm_alm", + "ctrlName": "rr_facility", + "measureName": "ww_4_master_comm_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0045675862ed0196" + }, + { + "name": "ww_4_vfd_alm", + "ctrlName": "rr_facility", + "measureName": "ww_4_vfd_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0046675862ed1de9" + }, + { + "name": "ww_5_comms_alm", + "ctrlName": "rr_facility", + "measureName": "ww_5_comms_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "water well 5 comms failure", + "alarmLable": "default", + "_id": "0047675862ed6a3b" + }, + { + "name": "ww_5_control_power_alm", + "ctrlName": "rr_facility", + "measureName": "ww_5_control_power_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0048675862edf8aa" + }, + { + "name": "ww_5_hi_discharge_alm", + "ctrlName": "rr_facility", + "measureName": "ww_5_hi_discharge_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0049675862ed6cbf" + }, + { + "name": "ww_5_hi_flow_alm", + "ctrlName": "rr_facility", + "measureName": "ww_5_hi_flow_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "004a675862edce19" + }, + { + "name": "ww_5_hoa_in_manual_alm", + "ctrlName": "rr_facility", + "measureName": "ww_5_hoa_in_manual_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "004b675862edac25" + }, + { + "name": "ww_5_lo_discharge_alm", + "ctrlName": "rr_facility", + "measureName": "ww_5_lo_discharge_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "004c675862ed7be9" + }, + { + "name": "ww_5_lo_flow_alm", + "ctrlName": "rr_facility", + "measureName": "ww_5_lo_flow_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "004d675862ed5685" + }, + { + "name": "ww_5_lo_pip_alm", + "ctrlName": "rr_facility", + "measureName": "ww_5_lo_pip_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "004e675862ed7978" + }, + { + "name": "ww_5_master_comm_alm", + "ctrlName": "rr_facility", + "measureName": "ww_5_master_comm_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "004f675862ed8d35" + }, + { + "name": "ww_5_vfd_alm", + "ctrlName": "rr_facility", + "measureName": "ww_5_vfd_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0050675862edfd5b" + }, + { + "name": "ww_6_comms_alm", + "ctrlName": "rr_facility", + "measureName": "ww_6_comms_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "water well 6 comms failure", + "alarmLable": "default", + "_id": "0051675862ed0cea" + }, + { + "name": "ww_6_control_power_alm", + "ctrlName": "rr_facility", + "measureName": "ww_6_control_power_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0052675862ed21c4" + }, + { + "name": "ww_6_hi_discharge_alm", + "ctrlName": "rr_facility", + "measureName": "ww_6_hi_discharge_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0053675862ed66c6" + }, + { + "name": "ww_6_hi_flow_alm", + "ctrlName": "rr_facility", + "measureName": "ww_6_hi_flow_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0054675862ed57fb" + }, + { + "name": "ww_6_hoa_in_manual_alm", + "ctrlName": "rr_facility", + "measureName": "ww_6_hoa_in_manual_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0055675862ed56e7" + }, + { + "name": "ww_6_lo_discharge_alm", + "ctrlName": "rr_facility", + "measureName": "ww_6_lo_discharge_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0056675862ed9c04" + }, + { + "name": "ww_6_lo_flow_alm", + "ctrlName": "rr_facility", + "measureName": "ww_6_lo_flow_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0057675862edefe5" + }, + { + "name": "ww_6_lo_pip_alm", + "ctrlName": "rr_facility", + "measureName": "ww_6_lo_pip_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0058675862ed8bc2" + }, + { + "name": "ww_6_master_comm_alm", + "ctrlName": "rr_facility", + "measureName": "ww_6_master_comm_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "0059675862edaba7" + }, + { + "name": "ww_6_vfd_alm", + "ctrlName": "rr_facility", + "measureName": "ww_6_vfd_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Failure", + "alarmLable": "default", + "_id": "005a675862edfd9c" + } + ], + "groups": [ + { + "name": "default", + "uploadInterval": 600, + "LwTSDBSize": 150000, + "strategy": 1, + "historyDataPath": "/var/user/data/dbhome/device_supervisor/LwTSDB", + "historyDataMode": "gateway", + "enablePerOnchange": 0, + "_id": "group59b64649c93" + } + ], + "misc": { + "maxAlarmRecordSz": 2000, + "logLvl": "INFO", + "coms": [ + { + "name": "rs232", + "baud": 9600, + "bits": 8, + "stopbits": 1, + "parityChk": "n" + }, + { + "name": "rs485", + "baud": 9600, + "bits": 8, + "stopbits": 1, + "parityChk": "n" + } + ], + "cachePath": "/var/user/data/dbhome/device_supervisor/offlinedata", + "cacheSize": 10000, + "debugLogPath": "/var/user/data/dbhome/device_supervisor/debugLog", + "debugLogSize": 2000, + "cacheMode": "gateway", + "debugLogMode": "gateway", + "logNum": 2, + "logSize": 1, + "cacheUploadPeriod": 200, + "cacheStrategy": 0, + "pubTimeout": 1000, + "pubRepeatNum": 3, + "cacheUploadStrategy": 0 + }, + "clouds": [ + { + "cacheSize": 10000, + "enable": 0, + "name": "default", + "type": "Standard MQTT", + "args": { + "host": "hp.henrypump.cloud", + "port": 1883, + "clientId": "rrig-1", + "auth": 1, + "tls": 0, + "cleanSession": 0, + "mqttVersion": "v3.1.1", + "keepalive": 60, + "key": "", + "cert": "", + "rootCA": "", + "verifyServer": 0, + "verifyClient": 0, + "username": "qqn5qwnjzmxnxe883k73", + "passwd": "", + "willQos": 0, + "willRetain": 0, + "willTopic": "", + "willPayload": "", + "tlsAuth": "caSelfSigned" + }, + "uploadRules": [], + "_id": "cloud59b6464bd03" + } + ], + "quickfaas": { + "genericFuncs": [], + "uploadFuncs": [ + { + "qos": 1, + "funcName": "sendAlarm", + "script": "import json, time\nfrom common.Logger import logger\nfrom quickfaas.remotebus import publish\n\n\ndef sendAlarm(message, wizard_api, cloudName):\n logger.info(message)\n payload = {\"ts\": round(time.time() * 1000), \"values\": {}}\n for key, value in message[\"values\"].items():\n payload[\"values\"][value[\"measureName\"]] = value[\"value\"]\n logger.info(json.dumps(payload, indent=4))\n publish(__topic__, json.dumps(payload), __qos__, cloud_name=cloudName)", + "name": "sendAlarm", + "trigger": "warning_event", + "topic": "v1/devices/me/telemetry", + "cloudName": "default", + "alarms": [ + "default" + ], + "msgType": 0, + "hideOfflineData": 0 + }, + { + "hideOfflineData": 1, + "qos": 1, + "funcName": "sendData", + "script": "import json, os, time\nfrom datetime import datetime as dt\nfrom common.Logger import logger\nfrom quickfaas.remotebus import publish\nfrom quickfaas.global_dict import get as get_params\nfrom quickfaas.global_dict import _set_global_args\nfrom mobiuspi_lib.gps import GPS\n\ndef reboot():\n #basic = Basic()\n logger.info(\"!\" * 10 + \"REBOOTING DEVICE\" + \"!\"*10)\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 if not os.path.exists(path):\n logger.info(\"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 if not os.path.exists(path + \"/\" + filename):\n logger.info(\"no creds file making creds file\")\n with open(path + \"/\" + filename, \"a\") as f:\n json.dump({}, f)\n\ndef convertDStoJSON(ds):\n j = dict()\n for x in ds:\n j[x[\"key\"]] = x[\"value\"]\n return j\n\ndef convertJSONtoDS(j):\n d = []\n for key in j.keys():\n d.append({\"key\": key, \"value\": j[key]})\n return d\n\ndef checkCredentialConfig():\n logger.info(\"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 cfg = json.load(f)\n clouds = cfg.get(\"clouds\")\n logger.info(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 checkFileExist(\"creds.json\")\n with open(credspath, \"r\") as c:\n creds = json.load(c)\n if creds:\n logger.info(\"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 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.info(\"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\ndef checkParameterConfig(cfg):\n logger.info(\"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.info(\"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.info(\"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.info(\"initializing param file with params in memory\")\n json.dump(convertDStoJSON(get_params()), p)\n cfg[\"labels\"] = get_params()\n \n return cfg\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 chunk_payload(payload, chunk_size=20):\n if \"values\" in payload:\n # Original format: {\"ts\": ..., \"values\": {...}}\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 else:\n # New format: {\"key1\": \"value1\", \"key2\": \"value2\"}\n chunked_keys = list(payload.keys())\n for i in range(0, len(chunked_keys), chunk_size):\n yield {k: payload[k] for k in chunked_keys[i:i+chunk_size]}\n\ndef sendData(message):\n #logger.debug(message)\n try:\n checkCredentialConfig()\n except Exception as e:\n logger.error(e)\n payload = {\"ts\": (round(dt.timestamp(dt.now())/600)*600)*1000, \"values\": {}}\n attributes_payload = {}\n for measure in message[\"measures\"]:\n try:\n logger.debug(measure)\n if measure[\"health\"] == 1:\n if \"_spt\" in measure[\"name\"]:\n attributes_payload[measure[\"name\"]] = measure[\"value\"]\n payload[\"values\"][measure[\"name\"]] = measure[\"value\"] \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\n for chunk in chunk_payload(payload=payload):\n publish(__topic__, json.dumps(chunk), __qos__)\n time.sleep(2)\n \n attributes_payload[\"latestReportTime\"] = (round(dt.timestamp(dt.now())/600)*600)*1000\n for chunk in chunk_payload(payload=attributes_payload):\n publish(\"v1/devices/me/attributes\", json.dumps(chunk), __qos__)\n time.sleep(2)\n ", + "name": "sendData", + "trigger": "measure_event", + "topic": "v1/devices/me/telemetry", + "msgType": 0, + "cloudName": "default", + "groups": [ + "default" + ] + } + ], + "downloadFuncs": [ + { + "payload_type": "Plaintext", + "name": "receiveCommand", + "topic": "v1/devices/me/rpc/request/+", + "qos": 1, + "funcName": "receiveCommand", + "script": "import json, time\nfrom datetime import datetime as dt\nfrom quickfaas.measure import recall, write\nfrom quickfaas.remotebus import publish\nfrom common.Logger import logger\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\ndef sync():\n #get new values and send\n payload = {\"ts\": round(dt.timestamp(dt.now()))*1000, \"values\": {}}\n topic = \"v1/devices/me/telemetry\"\n try:\n data = recall()#json.loads(recall().decode(\"utf-8\"))\n except Exception as e:\n logger.error(e)\n logger.debug(data)\n for controller in data:\n for measure in controller[\"measures\"]:\n #publish measure\n payload[\"values\"][measure[\"name\"]] = measure[\"value\"]\n logger.debug(\"Sending on topic: {}\".format(topic))\n logger.debug(\"Sending value: {}\".format(payload))\n for chunk in chunk_payload(payload=payload):\n publish(topic, json.dumps(chunk), 1)\n time.sleep(2)\n\ndef writeplctag(value):\n #value in the form {\"measurement\": , \"value\": }\n try:\n #value = json.loads(value.replace(\"'\",'\"'))\n logger.info(value)\n #payload format: [{\"name\": \"advvfdipp\", \"measures\": [{\"name\": \"manualfrequencysetpoint\", \"value\": 49}]}]\n message = [{\"name\": \"rr_facility\", \"measures\":[{\"name\":value[\"measurement\"], \"value\": value[\"value\"]}]}]\n resp = write(message) \n logger.info(\"RETURN FROM WRITE: {}\".format(resp))\n return True\n except Exception as e:\n logger.error(e)\n return False\n \ndef receiveCommand(topic, payload, wizard_api):\n try:\n logger.debug(topic)\n logger.info(json.loads(payload))\n p = json.loads(payload)\n command = p[\"method\"]\n commands = {\n \"sync\": sync,\n \"writeplctag\": writeplctag,\n } \n if command == \"setPLCTag\":\n result = commands[\"writeplctag\"](p[\"params\"])\n if result:\n sync()\n #commands[command](p[\"mac\"].lower(),p[\"payload\"][\"value\"], wizard_api)\n #logger.debug(command)\n ack(topic.split(\"/\")[-1], wizard_api)\n except Exception as e:\n logger.error(e)\n \n\ndef ack(msgid, wizard_api):\n #logger.debug(msgid)\n #logger.debug(mac)\n #logger.debug(name)\n #logger.debug(value)\n wizard_api.mqtt_publish(\"v1/devices/me/rpc/response/\" + str(msgid), json.dumps({\"msg\": {\"time\": time.time()}, \"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": "GF5022424052845", + "_id": "000066e059ed3166" + }, + { + "key": "MAC", + "value": "ec:6e:79:05:ce:9b", + "_id": "000166e059ed5bde" + } + ], + "serverList": [], + "modbusSlave": { + "enable": 0, + "protocol": "Modbus-TCP", + "port": 1502, + "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, + "asduLen": 2, + "connectMode": "tcpServer", + "enableSpontaneous": 1, + "uploadPeriod": 0, + "mapping_table": [] + }, + "iec101Server": { + "enable": 0, + "coms": "rs485", + "mode": "UnBalance", + "linkLen": 2, + "linkAddr": 1, + "asduLen": 2, + "ioaLen": 3, + "cotLen": 2, + "serverList": [ + { + "asduAddr": 1 + } + ], + "linkTimeOut": 2000, + "timeSet": 1, + "idleTimeOut": 10000, + "byteOrder": "abcd", + "useRawvalue": 1, + "protocolMode": 0, + "enableSpontaneous": 1, + "uploadPeriod": 0, + "mappingTable": { + "YX": [], + "YC": [], + "YK": [] + } + }, + "iec104Client": { + "enable": 0, + "connectType": 2, + "serverAddr": "ipower.inhandcloud.cn", + "serverPort": 2406, + "communicationCode": "", + "protocol": 1, + "asduAddr": 1, + "tls": 1, + "verification": 1, + "mapping_table": { + "YX": [], + "YC": [], + "YK": [] + } + }, + "opcuaServer": { + "enable": 0, + "port": 4840, + "maximumLink": 5, + "securityMode": 0, + "identifierType": "String", + "pubsub": 0, + "certificate": "None", + "privateKey": "None", + "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": 1, + "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": {}, + "bindConfig": { + "enable": 0, + "bind": { + "modelId": "", + "modelName": "", + "srcId": "", + "srcName": "", + "devId": "", + "devName": "" + }, + "varGroups": [], + "variables": [], + "alerts": [] + }, + "templates": {}, + "version": "3.1.10" +} \ No newline at end of file diff --git a/Pub_Sub/rr_facility/thingsboard/rr_facility.csv b/Pub_Sub/rr_facility/thingsboard/rr_facility.csv new file mode 100644 index 0000000..205295f --- /dev/null +++ b/Pub_Sub/rr_facility/thingsboard/rr_facility.csv @@ -0,0 +1,383 @@ +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 +pond_level_input_alm,rr_facility,default,periodic,BIT,,,0,AL0_Pond_Level_Input_Failure,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_charge_pump_fail_to_start_alm,rr_facility,default,periodic,BIT,,,0,AL0_TP1_Charge_Pump_Failed_To_Start,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_hi_a_winding_alm,rr_facility,default,periodic,BIT,,,0,AL0_TP1_High_A_Winding_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_hi_b_winding_alm,rr_facility,default,periodic,BIT,,,0,AL0_TP1_High_B_Winding_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_hi_c_winding_alm,rr_facility,default,periodic,BIT,,,0,AL0_TP1_High_C_Winding_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_hi_discharge_alm,rr_facility,default,periodic,BIT,,,0,AL0_TP1_High_Discharge_PSI,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_hi_inboard_temp_alm,rr_facility,default,periodic,BIT,,,0,AL0_TP1_High_Inboard_Temp_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_hi_outboard_temp_alm,rr_facility,default,periodic,BIT,,,0,AL0_TP1_High_Outboard_Temp_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_hi_vibration_alm,rr_facility,default,periodic,BIT,,,0,AL0_TP1_High_Vibration_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_lo_discharge_alm,rr_facility,default,periodic,BIT,,,0,AL0_TP1_Low_Discharge_PSI,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_lo_oil_alm,rr_facility,default,periodic,BIT,,,0,AL0_TP1_Low_Oil_Level_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_lo_suction_alm,rr_facility,default,periodic,BIT,,,0,AL0_TP1_Low_Suction_Pressure,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_oil_cooler_failed_to_start_alm,rr_facility,default,periodic,BIT,,,0,AL0_TP1_Oil_Cooler_Failed_To_Start,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_charge_pump_fail_to_start_alm,rr_facility,default,periodic,BIT,,,0,AL0_TP2_Charge_Pump_Failed_To_Start,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_hi_a_winding_alm,rr_facility,default,periodic,BIT,,,0,AL0_TP2_High_A_Winding_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_hi_b_winding_alm,rr_facility,default,periodic,BIT,,,0,AL0_TP2_High_B_Winding_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_hi_c_winding_alm,rr_facility,default,periodic,BIT,,,0,AL0_TP2_High_C_Winding_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_hi_discharge_alm,rr_facility,default,periodic,BIT,,,0,AL0_TP2_High_Discharge_PSI,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_hi_inboard_temp_alm,rr_facility,default,periodic,BIT,,,0,AL0_TP2_High_Inboard_Temp_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_hi_outboard_temp_alm,rr_facility,default,periodic,BIT,,,0,AL0_TP2_High_Outboard_Temp_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_hi_vibration_alm,rr_facility,default,periodic,BIT,,,0,AL0_TP2_High_Vibration_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_lo_discharge_alm,rr_facility,default,periodic,BIT,,,0,AL0_TP2_Low_Discharge_PSI,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_lo_oil_alm,rr_facility,default,periodic,BIT,,,0,AL0_TP2_Low_Oil_Level_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_lo_suction_alm,rr_facility,default,periodic,BIT,,,0,AL0_TP2_Low_Suction_Pressure,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_oil_cooler_failed_to_start_alm,rr_facility,default,periodic,BIT,,,0,AL0_TP2_Oil_Cooler_Failed_To_Start,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_1_comms_alm,rr_facility,default,periodic,BIT,,,0,AL0_Water_Well_1_Communication_Failure,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_2_comms_alm,rr_facility,default,periodic,BIT,,,0,AL0_Water_Well_2_Communication_Failure,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_3_comms_alm,rr_facility,default,periodic,BIT,,,0,AL0_Water_Well_3_Communication_Failure,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_4_comms_alm,rr_facility,default,periodic,BIT,,,0,AL0_Water_Well_4_Communication_Failure,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_5_comms_alm,rr_facility,default,periodic,BIT,,,0,AL0_Water_Well_5_Communication_Failure,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_6_comms_alm,rr_facility,default,periodic,BIT,,,0,AL0_Water_Well_6_Communication_Failure,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_discharge_alm,rr_facility,default,periodic,BIT,,,0,AL0_WTP_1_Discharge_Input_Failure,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_suction_alm,rr_facility,default,periodic,BIT,,,0,AL0_WTP_1_Suction_Input_Failure,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_vibration_alm,rr_facility,default,periodic,BIT,,,0,AL0_WTP_1_Vibration_Failure,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_discharge_alm,rr_facility,default,periodic,BIT,,,0,AL0_WTP_2_Discharge_Input_Failure,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_suction_alm,rr_facility,default,periodic,BIT,,,0,AL0_WTP_2_Suction_Input_Failure,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_vibration_alm,rr_facility,default,periodic,BIT,,,0,AL0_WTP_2_Vibration_Failure,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_1_control_power_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW1_Control_Power_Failure,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_1_hi_discharge_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW1_Hi_Discharge_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_1_hi_flow_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW1_Hi_Flow_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_1_hoa_in_manual_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW1_HOA_In_Manual,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_1_lo_discharge_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW1_Lo_Discharge_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_1_lo_flow_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW1_Lo_Flow_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_1_lo_pip_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW1_Lo_PIP_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_1_master_comm_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW1_Master_Communication_Failure,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_1_vfd_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW1_VFD_Faulted,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_2_control_power_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW2_Control_Power_Failure,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_2_hi_discharge_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW2_Hi_Discharge_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_2_hi_flow_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW2_Hi_Flow_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_2_hoa_in_manual_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW2_HOA_In_Manual,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_2_lo_discharge_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW2_Lo_Discharge_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_2_lo_flow_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW2_Lo_Flow_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_2_lo_pip_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW2_Lo_PIP_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_2_master_comm_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW2_Master_Communication_Failure,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_2_vfd_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW2_VFD_Faulted,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_3_control_power_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW3_Control_Power_Failure,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_3_hi_discharge_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW3_Hi_Discharge_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_3_hi_flow_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW3_Hi_Flow_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_3_hoa_in_manual_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW3_HOA_In_Manual,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_3_lo_discharge_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW3_Lo_Discharge_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_3_lo_flow_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW3_Lo_Flow_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_3_lo_pip_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW3_Lo_PIP_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_3_master_comm_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW3_Master_Communication_Failure,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_3_vfd_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW3_VFD_Faulted,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_4_control_power_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW4_Control_Power_Failure,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_4_hi_discharge_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW4_Hi_Discharge_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_4_hi_flow_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW4_Hi_Flow_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_4_hoa_in_manual_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW4_HOA_In_Manual,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_4_lo_discharge_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW4_Lo_Discharge_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_4_lo_flow_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW4_Lo_Flow_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_4_lo_pip_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW4_Lo_PIP_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_4_master_comm_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW4_Master_Communication_Failure,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_4_vfd_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW4_VFD_Faulted,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_5_control_power_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW5_Control_Power_Failure,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_5_hi_discharge_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW5_Hi_Discharge_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_5_hi_flow_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW5_Hi_Flow_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_5_hoa_in_manual_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW5_HOA_In_Manual,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_5_lo_discharge_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW5_Lo_Discharge_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_5_lo_flow_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW5_Lo_Flow_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_5_lo_pip_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW5_Lo_PIP_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_5_master_comm_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW5_Master_Communication_Failure,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_5_vfd_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW5_VFD_Faulted,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_6_control_power_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW6_Control_Power_Failure,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_6_hi_discharge_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW6_Hi_Discharge_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_6_hi_flow_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW6_Hi_Flow_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_6_hoa_in_manual_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW6_HOA_In_Manual,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_6_lo_discharge_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW6_Lo_Discharge_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_6_lo_flow_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW6_Lo_Flow_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_6_lo_pip_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW6_Lo_PIP_Alarm,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_6_master_comm_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW6_Master_Communication_Failure,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_6_vfd_alm,rr_facility,default,periodic,BIT,,,0,AL0_WW6_VFD_Faulted,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_vfd_run_cmd,rr_facility,default,periodic,BIT,,,0,CMD_Run_TP1_VFD,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_vfd_run_cmd,rr_facility,default,periodic,BIT,,,0,CMD_Run_TP2_VFD,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_hi_a_winding_bypass_cmd,rr_facility,default,periodic,BIT,,,0,CMD_TP1_High_A_Winding_Temp_Alarm_Bypass,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_hi_b_winding_bypass_cmd,rr_facility,default,periodic,BIT,,,0,CMD_TP1_High_B_Winding_Temp_Alarm_Bypass,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_hi_c_winding_bypass_alm,rr_facility,default,periodic,BIT,,,0,CMD_TP1_High_C_Winding_Temp_Alarm_Bypass,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_hi_discharge_bypass_cmd,rr_facility,default,periodic,BIT,,,0,CMD_TP1_High_Discharge_Alarm_Bypass,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_hi_inboard_temp_bypass_cmd,rr_facility,default,periodic,BIT,,,0,CMD_TP1_High_Inboard_Temp_Alarm_Bypass,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_hi_outboard_temp_bypass_cmd,rr_facility,default,periodic,BIT,,,0,CMD_TP1_High_Outboard_Temp_Alarm_Bypass,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_hi_vibration_bypass_cmd,rr_facility,default,periodic,BIT,,,0,CMD_TP1_High_Vibration_Alarm_Bypass,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_lo_discharge_bypass_cmd,rr_facility,default,periodic,BIT,,,0,CMD_TP1_Low_Discharge_Alarm_Bypass,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_master_bypass_cmd,rr_facility,default,periodic,BIT,,,0,CMD_TP1_Master_Alarm_Bypass,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_master_fault_clear_cmd,rr_facility,default,periodic,BIT,,,0,CMD_TP1_Master_Fault_Clear,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_oil_cooler_bypass_cmd,rr_facility,default,periodic,BIT,,,0,CMD_TP1_Oil_Cooler_Bypass,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_oil_bypass_cmd,rr_facility,default,periodic,BIT,,,0,CMD_TP1_Oil_Level_Alarm_Bypass,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_pid_auto_cmd,rr_facility,default,periodic,BIT,,,0,CMD_TP1_PID_Auto,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_hi_a_winding_bypass_cmd,rr_facility,default,periodic,BIT,,,0,CMD_TP2_High_A_Winding_Temp_Alarm_Bypass,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_hi_b_winding_bypass_cmd,rr_facility,default,periodic,BIT,,,0,CMD_TP2_High_B_Winding_Temp_Alarm_Bypass,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_hi_c_winding_bypass_alm,rr_facility,default,periodic,BIT,,,0,CMD_TP2_High_C_Winding_Temp_Alarm_Bypass,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_hi_discharge_bypass_cmd,rr_facility,default,periodic,BIT,,,0,CMD_TP2_High_Discharge_Alarm_Bypass,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_hi_inboard_temp_bypass_cmd,rr_facility,default,periodic,BIT,,,0,CMD_TP2_High_Inboard_Temp_Alarm_Bypass,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_hi_outboard_temp_bypass_cmd,rr_facility,default,periodic,BIT,,,0,CMD_TP2_High_Outboard_Temp_Alarm_Bypass,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_hi_vibration_bypass_cmd,rr_facility,default,periodic,BIT,,,0,CMD_TP2_High_Vibration_Alarm_Bypass,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_lo_discharge_bypass_cmd,rr_facility,default,periodic,BIT,,,0,CMD_TP2_Low_Discharge_Alarm_Bypass,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_master_bypass_cmd,rr_facility,default,periodic,BIT,,,0,CMD_TP2_Master_Alarm_Bypass,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_master_fault_clear_cmd,rr_facility,default,periodic,BIT,,,0,CMD_TP2_Master_Fault_Clear,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_oil_cooler_bypass_cmd,rr_facility,default,periodic,BIT,,,0,CMD_TP2_Oil_Cooler_Bypass,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_oil_bypass_cmd,rr_facility,default,periodic,BIT,,,0,CMD_TP2_Oil_Level_Alarm_Bypass,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_pid_auto_cmd,rr_facility,default,periodic,BIT,,,0,CMD_TP2_PID_Auto,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_all_start_stop_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW_Start_Stop_Together,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_1_auto_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW1_Auto,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_1_comms_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW1_Communication_Check,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_1_hi_discharge_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW1_Enable_Hi_Disch_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_1_hi_flow_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW1_Enable_Hi_Flow_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_1_lo_discharge_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW1_Enable_Lo_Disch_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_1_lo_flow_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW1_Enable_Lo_Flow_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_1_lo_pip_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW1_Enable_Lo_PIP_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_1_manual_run_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW1_Manual_Run,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_1_pid_auto_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW1_PID_Auto,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_1_run_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW1_Run,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_2_auto_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW2_Auto,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_2_comms_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW2_Communication_Check,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_2_hi_discharge_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW2_Enable_Hi_Disch_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_2_hi_flow_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW2_Enable_Hi_Flow_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_2_lo_discharge_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW2_Enable_Lo_Disch_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_2_lo_flow_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW2_Enable_Lo_Flow_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_2_lo_pip_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW2_Enable_Lo_PIP_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_2_manual_run_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW2_Manual_Run,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_2_pid_auto_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW2_PID_Auto,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_2_run_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW2_Run,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_3_auto_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW3_Auto,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_3_comms_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW3_Communication_Check,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_3_hi_discharge_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW3_Enable_Hi_Disch_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_3_hi_flow_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW3_Enable_Hi_Flow_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_3_lo_discharge_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW3_Enable_Lo_Disch_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_3_lo_flow_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW3_Enable_Lo_Flow_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_3_lo_pip_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW3_Enable_Lo_PIP_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_3_manual_run_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW3_Manual_Run,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_3_pid_auto_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW3_PID_Auto,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_3_run_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW3_Run,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_4_auto_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW4_Auto,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_4_comms_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW4_Communication_Check,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_4_hi_discharge_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW4_Enable_Hi_Disch_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_4_hi_flow_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW4_Enable_Hi_Flow_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_4_lo_discharge_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW4_Enable_Lo_Disch_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_4_lo_flow_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW4_Enable_Lo_Flow_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_4_lo_pip_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW4_Enable_Lo_PIP_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_4_manual_run_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW4_Manual_Run,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_4_pid_auto_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW4_PID_Auto,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_4_run_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW4_Run,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_5_auto_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW5_Auto,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_5_comms_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW5_Communication_Check,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_5_hi_discharge_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW5_Enable_Hi_Disch_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_5_hi_flow_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW5_Enable_Hi_Flow_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_5_lo_discharge_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW5_Enable_Lo_Disch_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_5_lo_flow_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW5_Enable_Lo_Flow_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_5_lo_pip_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW5_Enable_Lo_PIP_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_5_manual_run_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW5_Manual_Run,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_5_pid_auto_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW5_PID_Auto,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_5_run_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW5_Run,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_6_auto_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW6_Auto,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_6_comms_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW6_Communication_Check,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_6_hi_discharge_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW6_Enable_Hi_Disch_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_6_hi_flow_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW6_Enable_Hi_Flow_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_6_lo_discharge_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW6_Enable_Lo_Disch_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_6_lo_flow_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW6_Enable_Lo_Flow_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_6_lo_pip_enable_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW6_Enable_Lo_PIP_Alarm,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_6_manual_run_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW6_Manual_Run,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_6_pid_auto_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW6_PID_Auto,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_6_run_cmd,rr_facility,default,periodic,BIT,,,0,CMD_WW6_Run,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,1 +current_day,rr_facility,default,periodic,INT,0,,,Current_Day,,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +current_hour,rr_facility,default,periodic,INT,0,,,Current_Hour,,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +current_minute,rr_facility,default,periodic,INT,0,,,Current_Minute,,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +current_second,rr_facility,default,periodic,INT,0,,,Current_Second,,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_1_charge_pump_running,rr_facility,default,periodic,BIT,,,0,FBK_TP1_Charge_Pump_Running,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_lo_oil,rr_facility,default,periodic,BIT,,,0,FBK_TP1_Low_Oil_Level,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_oil_cooler_running,rr_facility,default,periodic,BIT,,,0,FBK_TP1_Oil_Cooler_Running,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_1_vfd_running,rr_facility,default,periodic,BIT,,,0,FBK_TP1_VFD_Running,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_charge_pump_running,rr_facility,default,periodic,BIT,,,0,FBK_TP2_Charge_Pump_Running,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_lo_oil,rr_facility,default,periodic,BIT,,,0,FBK_TP2_Low_Oil_Level,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_oil_cooler_running,rr_facility,default,periodic,BIT,,,0,FBK_TP2_Oil_Cooler_Running,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +tp_2_vfd_running,rr_facility,default,periodic,BIT,,,0,FBK_TP2_VFD_Running,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_1_vfd_running,rr_facility,default,periodic,BIT,,,0,FBK_WW1_VFD_Running,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_2_vfd_running,rr_facility,default,periodic,BIT,,,0,FBK_WW2_VFD_Running,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_3_vfd_running,rr_facility,default,periodic,BIT,,,0,FBK_WW3_VFD_Running,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_4_vfd_running,rr_facility,default,periodic,BIT,,,0,FBK_WW4_VFD_Running,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_5_vfd_running,rr_facility,default,periodic,BIT,,,0,FBK_WW5_VFD_Running,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +ww_6_vfd_running,rr_facility,default,periodic,BIT,,,0,FBK_WW6_VFD_Running,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,1 +pond_level_start_spt,rr_facility,default,periodic,FLOAT,,,,SPT_Pond_Level_Start,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_1_pond_level_start_spt,rr_facility,default,periodic,FLOAT,,,,SPT_Pond_Level_Start_WW1,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_2_pond_level_start_spt,rr_facility,default,periodic,FLOAT,,,,SPT_Pond_Level_Start_WW2,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_3_pond_level_start_spt,rr_facility,default,periodic,FLOAT,,,,SPT_Pond_Level_Start_WW3,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_4_pond_level_start_spt,rr_facility,default,periodic,FLOAT,,,,SPT_Pond_Level_Start_WW4,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_5_pond_level_start_spt,rr_facility,default,periodic,FLOAT,,,,SPT_Pond_Level_Start_WW5,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_6_pond_level_start_spt,rr_facility,default,periodic,FLOAT,,,,SPT_Pond_Level_Start_WW6,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +pond_level_stop_spt,rr_facility,default,periodic,FLOAT,,,,SPT_Pond_Level_Stop,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_1_pond_level_stop_spt,rr_facility,default,periodic,FLOAT,,,,SPT_Pond_Level_Stop_WW1,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_2_pond_level_stop_spt,rr_facility,default,periodic,FLOAT,,,,SPT_Pond_Level_Stop_WW2,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_3_pond_level_stop_spt,rr_facility,default,periodic,FLOAT,,,,SPT_Pond_Level_Stop_WW3,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_4_pond_level_stop_spt,rr_facility,default,periodic,FLOAT,,,,SPT_Pond_Level_Stop_WW4,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_5_pond_level_stop_spt,rr_facility,default,periodic,FLOAT,,,,SPT_Pond_Level_Stop_WW5,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_6_pond_level_stop_spt,rr_facility,default,periodic,FLOAT,,,,SPT_Pond_Level_Stop_WW6,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +suction_permissive_spt,rr_facility,default,periodic,FLOAT,,,,SPT_Suction_PSI_Permissive,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_1_hi_a_winding_spt,rr_facility,default,periodic,FLOAT,,,,SPT_TP1_A_Winding_High,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_1_hi_b_winding_spt,rr_facility,default,periodic,FLOAT,,,,SPT_TP1_B_Winding_High,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_1_hi_c_winding_spt,rr_facility,default,periodic,FLOAT,,,,SPT_TP1_C_Winding_High,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_1_hi_discharge_spt,rr_facility,default,periodic,FLOAT,,,,SPT_TP1_High_Discharge_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_1_hi_vibration_spt,rr_facility,default,periodic,FLOAT,,,,SPT_TP1_High_Vibration_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_1_hi_inboard_temp_spt,rr_facility,default,periodic,FLOAT,,,,SPT_TP1_Inboard_High,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_1_lo_discharge_spt,rr_facility,default,periodic,FLOAT,,,,SPT_TP1_Low_Discharge_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_1_hi_outboard_temp_spt,rr_facility,default,periodic,FLOAT,,,,SPT_TP1_Outboard_High,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_1_pid_manual_frequency_spt,rr_facility,default,periodic,FLOAT,,,,SPT_TP1_PID_Manual_Freq,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_1_pid_spt,rr_facility,default,periodic,FLOAT,,,,SPT_TP1_PID_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_2_hi_a_winding_spt,rr_facility,default,periodic,FLOAT,,,,SPT_TP2_A_Winding_High,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_2_hi_b_winding_spt,rr_facility,default,periodic,FLOAT,,,,SPT_TP2_B_Winding_High,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_2_hi_c_winding_spt,rr_facility,default,periodic,FLOAT,,,,SPT_TP2_C_Winding_High,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_2_hi_discharge_spt,rr_facility,default,periodic,FLOAT,,,,SPT_TP2_High_Discharge_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_2_hi_vibration_spt,rr_facility,default,periodic,FLOAT,,,,SPT_TP2_High_Vibration_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_2_hi_inboard_temp_spt,rr_facility,default,periodic,FLOAT,,,,SPT_TP2_Inboard_High,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_2_lo_discharge_spt,rr_facility,default,periodic,FLOAT,,,,SPT_TP2_Low_Discharge_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_2_hi_outboard_temp_spt,rr_facility,default,periodic,FLOAT,,,,SPT_TP2_Outboard_High,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_2_pid_manual_frequency_spt,rr_facility,default,periodic,FLOAT,,,,SPT_TP2_PID_Manual_Freq,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_2_pid_spt,rr_facility,default,periodic,FLOAT,,,,SPT_TP2_PID_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_1_hand_frequency_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW1_Hand_Freq,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_1_hi_discharge_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW1_Hi_Disch_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_1_hi_flow_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW1_Hi_Flow_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_1_lo_discharge_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW1_Lo_Disch_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_1_lo_flow_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW1_Lo_Flow_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_1_lo_pip_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW1_Lo_PIP_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_1_pid_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW1_PID_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_2_hand_frequency_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW2_Hand_Freq,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_2_hi_discharge_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW2_Hi_Disch_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_2_hi_flow_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW2_Hi_Flow_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_2_lo_discharge_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW2_Lo_Disch_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_2_lo_flow_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW2_Lo_Flow_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_2_lo_pip_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW2_Lo_PIP_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_2_pid_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW2_PID_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_3_hand_frequency_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW3_Hand_Freq,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_3_hi_discharge_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW3_Hi_Disch_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_3_hi_flow_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW3_Hi_Flow_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_3_lo_discharge_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW3_Lo_Disch_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_3_lo_flow_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW3_Lo_Flow_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_3_lo_pip_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW3_Lo_PIP_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_3_pid_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW3_PID_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_4_hand_frequency_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW4_Hand_Freq,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_4_hi_discharge_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW4_Hi_Disch_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_4_hi_flow_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW4_Hi_Flow_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_4_lo_discharge_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW4_Lo_Disch_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_4_lo_flow_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW4_Lo_Flow_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_4_lo_pip_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW4_Lo_PIP_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_4_pid_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW4_PID_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_5_hand_frequency_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW5_Hand_Freq,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_5_hi_discharge_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW5_Hi_Disch_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_5_hi_flow_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW5_Hi_Flow_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_5_lo_discharge_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW5_Lo_Disch_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_5_lo_flow_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW5_Lo_Flow_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_5_lo_pip_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW5_Lo_PIP_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_5_pid_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW5_PID_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_6_hand_frequency_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW6_Hand_Freq,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_6_hi_discharge_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW6_Hi_Disch_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_6_hi_flow_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW6_Hi_Flow_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_6_lo_discharge_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW6_Lo_Disch_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_6_lo_flow_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW6_Lo_Flow_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_6_lo_pip_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW6_Lo_PIP_Alarm,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_6_pid_spt,rr_facility,default,periodic,FLOAT,,,,SPT_WW6_PID_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_1_charge_pump_run,rr_facility,default,periodic,FLOAT,,,,TP1_Charge_Pump_Run,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_1_oil_cooler_run,rr_facility,default,periodic,FLOAT,,,,TP1_Oil_Cooler_Run,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_2_charge_pump_run,rr_facility,default,periodic,FLOAT,,,,TP2_Charge_Pump_Run,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_2_oil_cooler_run,rr_facility,default,periodic,FLOAT,,,,TP2_Oil_Cooler_Run,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +pond_level,rr_facility,default,periodic,FLOAT,,,,Val_Pond_Level_Scaled,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_1_a_winding_temp,rr_facility,default,periodic,FLOAT,,,,Val_TP_1_A_Winding_Temp_Scaled,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_1_b_winding_temp,rr_facility,default,periodic,FLOAT,,,,Val_TP_1_B_Winding_Temp_Scaled,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_1_c_winding_temp,rr_facility,default,periodic,FLOAT,,,,Val_TP_1_C_Winding_Temp_Scaled,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_1_discharge,rr_facility,default,periodic,FLOAT,,,,Val_TP_1_Discharge_PSI_Scaled,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_1_inboard_temp,rr_facility,default,periodic,FLOAT,,,,Val_TP_1_Inboard_Temp_Scaled,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_1_outboard_temp,rr_facility,default,periodic,FLOAT,,,,Val_TP_1_Outboard_Temp_Scaled,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_1_suction,rr_facility,default,periodic,FLOAT,,,,Val_TP_1_Suction_PSI_Scaled,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_1_vibration,rr_facility,default,periodic,FLOAT,,,,Val_TP_1_Vibration_Scaled,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_2_a_winding_temp,rr_facility,default,periodic,FLOAT,,,,Val_TP_2_A_Winding_Temp_Scaled,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_2_b_winding_temp,rr_facility,default,periodic,FLOAT,,,,Val_TP_2_B_Winding_Temp_Scaled,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_2_c_winding_temp,rr_facility,default,periodic,FLOAT,,,,Val_TP_2_C_Winding_Temp_Scaled,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_2_discharge,rr_facility,default,periodic,FLOAT,,,,Val_TP_2_Discharge_PSI_Scaled,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_2_inboard_temp,rr_facility,default,periodic,FLOAT,,,,Val_TP_2_Inboard_Temp_Scaled,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_2_outboard_temp,rr_facility,default,periodic,FLOAT,,,,Val_TP_2_Outboard_Temp_Scaled,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_2_suction,rr_facility,default,periodic,FLOAT,,,,Val_TP_2_Suction_PSI_Scaled,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_2_vibration,rr_facility,default,periodic,FLOAT,,,,Val_TP_2_Vibration_Scaled,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_flow_rate,rr_facility,default,periodic,FLOAT,,,,Val_TP_FlowRate,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_yesterday_total,rr_facility,default,periodic,FLOAT,,,,Val_TP_FM_Yest_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_last_month_total,rr_facility,default,periodic,FLOAT,,,,Val_TP_LastMonth_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_lifetime_total,rr_facility,default,periodic,FLOAT,,,,Val_TP_Lifetime_Flow_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_month_total,rr_facility,default,periodic,FLOAT,,,,Val_TP_Monthly_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_today_total,rr_facility,default,periodic,FLOAT,,,,Val_TP_Today_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_1_vfd_frequency,rr_facility,default,periodic,FLOAT,,,,Val_TP1_VFD_Frequency_Setpoint,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_1_vfd_output_current,rr_facility,default,periodic,FLOAT,,,,Val_TP1_VFD_Output_Current,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_1_vfd_output_frequency,rr_facility,default,periodic,FLOAT,,,,Val_TP1_VFD_Output_Frequency,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_1_vfd_output_voltage,rr_facility,default,periodic,FLOAT,,,,Val_TP1_VFD_Output_Voltage,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_2_vfd_frequency,rr_facility,default,periodic,FLOAT,,,,Val_TP2_VFD_Frequency_Setpoint,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_2_vfd_output_current,rr_facility,default,periodic,FLOAT,,,,Val_TP2_VFD_Output_Current,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_2_vfd_output_frequency,rr_facility,default,periodic,FLOAT,,,,Val_TP2_VFD_Output_Frequency,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +tp_2_vfd_output_voltage,rr_facility,default,periodic,FLOAT,,,,Val_TP2_VFD_Output_Voltage,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_1_discharge,rr_facility,default,periodic,FLOAT,,,,Val_WW1_Discharge_PSI,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_1_downhole,rr_facility,default,periodic,FLOAT,,,,Val_WW1_Downhole_PSI,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_1_flow_rate,rr_facility,default,periodic,FLOAT,,,,Val_WW1_Flowmeter_FR,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_1_last_month_total,rr_facility,default,periodic,FLOAT,,,,Val_WW1_Flowmeter_LastMonth_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_1_month_total,rr_facility,default,periodic,FLOAT,,,,Val_WW1_Flowmeter_Month_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_1_today_total,rr_facility,default,periodic,FLOAT,,,,Val_WW1_Flowmeter_Todays_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_1_lifetime_total,rr_facility,default,periodic,FLOAT,,,,Val_WW1_Flowmeter_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_1_yesterday_total,rr_facility,default,periodic,FLOAT,,,,Val_WW1_Flowmeter_Yest_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_1_vfd_frequency_spt,rr_facility,default,periodic,FLOAT,,,,Val_WW1_VFD_Frequency_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_1_vfd_current,rr_facility,default,periodic,FLOAT,,,,Val_WW1_VFD_Output_Current,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_1_vfd_frequency,rr_facility,default,periodic,FLOAT,,,,Val_WW1_VFD_Output_Frequency,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_1_vfd_voltage,rr_facility,default,periodic,FLOAT,,,,Val_WW1_VFD_Output_Voltage,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_2_discharge,rr_facility,default,periodic,FLOAT,,,,Val_WW2_Discharge_PSI,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_2_downhole,rr_facility,default,periodic,FLOAT,,,,Val_WW2_Downhole_PSI,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_2_flow_rate,rr_facility,default,periodic,FLOAT,,,,Val_WW2_Flowmeter_FR,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_2_last_month_total,rr_facility,default,periodic,FLOAT,,,,Val_WW2_Flowmeter_LastMonth_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_2_month_total,rr_facility,default,periodic,FLOAT,,,,Val_WW2_Flowmeter_Month_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_2_today_total,rr_facility,default,periodic,FLOAT,,,,Val_WW2_Flowmeter_Todays_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_2_lifetime_total,rr_facility,default,periodic,FLOAT,,,,Val_WW2_Flowmeter_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_2_yesterday_total,rr_facility,default,periodic,FLOAT,,,,Val_WW2_Flowmeter_Yest_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_2_vfd_frequency_spt,rr_facility,default,periodic,FLOAT,,,,Val_WW2_VFD_Frequency_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_2_vfd_current,rr_facility,default,periodic,FLOAT,,,,Val_WW2_VFD_Output_Current,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_2_vfd_frequency,rr_facility,default,periodic,FLOAT,,,,Val_WW2_VFD_Output_Frequency,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_2_vfd_voltage,rr_facility,default,periodic,FLOAT,,,,Val_WW2_VFD_Output_Voltage,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_3_discharge,rr_facility,default,periodic,FLOAT,,,,Val_WW3_Discharge_PSI,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_3_downhole,rr_facility,default,periodic,FLOAT,,,,Val_WW3_Downhole_PSI,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_3_flow_rate,rr_facility,default,periodic,FLOAT,,,,Val_WW3_Flowmeter_FR,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_3_last_month_total,rr_facility,default,periodic,FLOAT,,,,Val_WW3_Flowmeter_LastMonth_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_3_month_total,rr_facility,default,periodic,FLOAT,,,,Val_WW3_Flowmeter_Month_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_3_today_total,rr_facility,default,periodic,FLOAT,,,,Val_WW3_Flowmeter_Todays_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_3_lifetime_total,rr_facility,default,periodic,FLOAT,,,,Val_WW3_Flowmeter_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_3_yesterday_total,rr_facility,default,periodic,FLOAT,,,,Val_WW3_Flowmeter_Yest_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_3_vfd_frequency_spt,rr_facility,default,periodic,FLOAT,,,,Val_WW3_VFD_Frequency_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_3_vfd_current,rr_facility,default,periodic,FLOAT,,,,Val_WW3_VFD_Output_Current,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_3_vfd_frequency,rr_facility,default,periodic,FLOAT,,,,Val_WW3_VFD_Output_Frequency,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_3_vfd_voltage,rr_facility,default,periodic,FLOAT,,,,Val_WW3_VFD_Output_Voltage,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_4_discharge,rr_facility,default,periodic,FLOAT,,,,Val_WW4_Discharge_PSI,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_4_downhole,rr_facility,default,periodic,FLOAT,,,,Val_WW4_Downhole_PSI,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_4_flow_rate,rr_facility,default,periodic,FLOAT,,,,Val_WW4_Flowmeter_FR,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_4_last_month_total,rr_facility,default,periodic,FLOAT,,,,Val_WW4_Flowmeter_LastMonth_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_4_month_total,rr_facility,default,periodic,FLOAT,,,,Val_WW4_Flowmeter_Month_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_4_today_total,rr_facility,default,periodic,FLOAT,,,,Val_WW4_Flowmeter_Todays_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_4_lifetime_total,rr_facility,default,periodic,FLOAT,,,,Val_WW4_Flowmeter_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_4_yesterday_total,rr_facility,default,periodic,FLOAT,,,,Val_WW4_Flowmeter_Yest_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_4_vfd_frequency_spt,rr_facility,default,periodic,FLOAT,,,,Val_WW4_VFD_Frequency_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_4_vfd_current,rr_facility,default,periodic,FLOAT,,,,Val_WW4_VFD_Output_Current,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_4_vfd_frequency,rr_facility,default,periodic,FLOAT,,,,Val_WW4_VFD_Output_Frequency,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_4_vfd_voltage,rr_facility,default,periodic,FLOAT,,,,Val_WW4_VFD_Output_Voltage,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_5_discharge,rr_facility,default,periodic,FLOAT,,,,Val_WW5_Discharge_PSI,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_5_downhole,rr_facility,default,periodic,FLOAT,,,,Val_WW5_Downhole_PSI,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_5_flow_rate,rr_facility,default,periodic,FLOAT,,,,Val_WW5_Flowmeter_FR,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_5_last_month_total,rr_facility,default,periodic,FLOAT,,,,Val_WW5_Flowmeter_LastMonth_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_5_month_total,rr_facility,default,periodic,FLOAT,,,,Val_WW5_Flowmeter_Month_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_5_today_total,rr_facility,default,periodic,FLOAT,,,,Val_WW5_Flowmeter_Todays_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_5_lifetime_total,rr_facility,default,periodic,FLOAT,,,,Val_WW5_Flowmeter_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_5_yesterday_total,rr_facility,default,periodic,FLOAT,,,,Val_WW5_Flowmeter_Yest_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_5_vfd_frequency_spt,rr_facility,default,periodic,FLOAT,,,,Val_WW5_VFD_Frequency_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_5_vfd_current,rr_facility,default,periodic,FLOAT,,,,Val_WW5_VFD_Output_Current,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_5_vfd_frequency,rr_facility,default,periodic,FLOAT,,,,Val_WW5_VFD_Output_Frequency,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_5_vfd_voltage,rr_facility,default,periodic,FLOAT,,,,Val_WW5_VFD_Output_Voltage,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_6_discharge,rr_facility,default,periodic,FLOAT,,,,Val_WW6_Discharge_PSI,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_6_downhole,rr_facility,default,periodic,FLOAT,,,,Val_WW6_Downhole_PSI,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_6_flow_rate,rr_facility,default,periodic,FLOAT,,,,Val_WW6_Flowmeter_FR,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_6_last_month_total,rr_facility,default,periodic,FLOAT,,,,Val_WW6_Flowmeter_LastMonth_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_6_month_total,rr_facility,default,periodic,FLOAT,,,,Val_WW6_Flowmeter_Month_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_6_today_total,rr_facility,default,periodic,FLOAT,,,,Val_WW6_Flowmeter_Todays_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_6_lifetime_total,rr_facility,default,periodic,FLOAT,,,,Val_WW6_Flowmeter_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_6_yesterday_total,rr_facility,default,periodic,FLOAT,,,,Val_WW6_Flowmeter_Yest_Total,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_6_vfd_frequency_spt,rr_facility,default,periodic,FLOAT,,,,Val_WW6_VFD_Frequency_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_6_vfd_current,rr_facility,default,periodic,FLOAT,,,,Val_WW6_VFD_Output_Current,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_6_vfd_frequency,rr_facility,default,periodic,FLOAT,,,,Val_WW6_VFD_Output_Frequency,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 +ww_6_vfd_voltage,rr_facility,default,periodic,FLOAT,,,,Val_WW6_VFD_Output_Voltage,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,1 \ No newline at end of file diff --git a/Pub_Sub/rr_facility/thingsboard/sub/receiveCommand.py b/Pub_Sub/rr_facility/thingsboard/sub/receiveCommand.py new file mode 100644 index 0000000..d7bf6c6 --- /dev/null +++ b/Pub_Sub/rr_facility/thingsboard/sub/receiveCommand.py @@ -0,0 +1,75 @@ +import json, time +from datetime import datetime as dt +from quickfaas.measure import recall, write +from quickfaas.remotebus import publish +from common.Logger import logger + +# 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 sync(): + #get new values and send + payload = {"ts": round(dt.timestamp(dt.now()))*1000, "values": {}} + topic = "v1/devices/me/telemetry" + try: + data = recall()#json.loads(recall().decode("utf-8")) + except Exception as e: + logger.error(e) + logger.debug(data) + for controller in data: + for measure in controller["measures"]: + #publish measure + payload["values"][measure["name"]] = measure["value"] + logger.debug("Sending on topic: {}".format(topic)) + logger.debug("Sending value: {}".format(payload)) + for chunk in chunk_payload(payload=payload): + publish(topic, json.dumps(chunk), 1) + time.sleep(2) + +def writeplctag(value): + #value in the form {"measurement": , "value": } + try: + #value = json.loads(value.replace("'",'"')) + logger.info(value) + #payload format: [{"name": "advvfdipp", "measures": [{"name": "manualfrequencysetpoint", "value": 49}]}] + message = [{"name": "rr_facility", "measures":[{"name":value["measurement"], "value": value["value"]}]}] + resp = write(message) + logger.info("RETURN FROM WRITE: {}".format(resp)) + return True + except Exception as e: + logger.error(e) + return False + +def receiveCommand(topic, payload, wizard_api): + try: + logger.debug(topic) + logger.info(json.loads(payload)) + p = json.loads(payload) + command = p["method"] + commands = { + "sync": sync, + "writeplctag": writeplctag, + } + if command == "setPLCTag": + result = commands["writeplctag"](p["params"]) + if result: + sync() + #commands[command](p["mac"].lower(),p["payload"]["value"], wizard_api) + #logger.debug(command) + ack(topic.split("/")[-1], wizard_api) + except Exception as e: + logger.error(e) + + +def ack(msgid, wizard_api): + #logger.debug(msgid) + #logger.debug(mac) + #logger.debug(name) + #logger.debug(value) + wizard_api.mqtt_publish("v1/devices/me/rpc/response/" + str(msgid), json.dumps({"msg": {"time": time.time()}, "metadata": "", "msgType": ""})) \ No newline at end of file diff --git a/Pub_Sub/tankalarms/thingsboard/fee-bm.cfg b/Pub_Sub/tankalarms/thingsboard/fee-bm.cfg new file mode 100644 index 0000000..eab6cf5 --- /dev/null +++ b/Pub_Sub/tankalarms/thingsboard/fee-bm.cfg @@ -0,0 +1,933 @@ +{ + "controllers": [ + { + "protocol": "AllenBradley MicroCip", + "name": "tankalarms", + "args": { + "connectTimeOut": 2000, + "slot": 0 + }, + "samplePeriod": 10, + "expired": 10000, + "endpoint": "192.168.1.20:44818", + "desc": "", + "enable": 1, + "enableDebug": 0, + "enablepollCycle": 0, + "samplePeriod2": 60, + "_id": "0000674f338664ad" + } + ], + "measures": [ + { + "name": "water_level", + "ctrlName": "tankalarms", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "WaterTxLevel", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "pollCycle": 0, + "storageLwTSDB": 0, + "_id": "0000674f33862f3a" + }, + { + "name": "water_batt_volts", + "ctrlName": "tankalarms", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "WaterTxBatVolts", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "pollCycle": 0, + "storageLwTSDB": 0, + "_id": "0001674f33862351" + }, + { + "name": "water_rssi", + "ctrlName": "tankalarms", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "WaterTxRSSI", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "pollCycle": 0, + "storageLwTSDB": 0, + "_id": "0002674f33869b82" + }, + { + "name": "water_hihi_spt", + "ctrlName": "tankalarms", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "WaterTx_HHSP", + "decimal": 2, + "len": 1, + "readWrite": "rw", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "pollCycle": 0, + "storageLwTSDB": 0, + "_id": "0003674f338670be" + }, + { + "name": "water_hi_spt", + "ctrlName": "tankalarms", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "WaterTx_HSp", + "decimal": 2, + "len": 1, + "readWrite": "rw", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "1.0", + "offset": "0.0", + "pollCycle": 0, + "storageLwTSDB": 0, + "_id": "0004674f3386c74f" + }, + { + "name": "water_hihi_alm", + "ctrlName": "tankalarms", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "WaterTx_HHAlrm", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "pollCycle": 0, + "bitMap": 0, + "reverseBit": 0, + "storageLwTSDB": 0, + "_id": "0005674f3386ef72" + }, + { + "name": "water_hi_alm", + "ctrlName": "tankalarms", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "WaterTx_HAlrm", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "pollCycle": 0, + "bitMap": 0, + "reverseBit": 0, + "storageLwTSDB": 0, + "_id": "0006674f3386dd97" + }, + { + "name": "water_batt_lolo_alm", + "ctrlName": "tankalarms", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "WaterTxBatVolts_LLAlrm", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "pollCycle": 0, + "bitMap": 0, + "reverseBit": 0, + "storageLwTSDB": 0, + "_id": "0007674f3386ef6a" + }, + { + "name": "water_comm_fail_alm", + "ctrlName": "tankalarms", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "WaterTx_RF_CommFail", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "pollCycle": 0, + "bitMap": 0, + "reverseBit": 0, + "storageLwTSDB": 0, + "_id": "0008674f33860c33" + }, + { + "name": "oil_level", + "ctrlName": "tankalarms", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "OilTxLevel", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "pollCycle": 0, + "storageLwTSDB": 0, + "_id": "0009674f3386f84f" + }, + { + "name": "oil_batt_volts", + "ctrlName": "tankalarms", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "OilTxBatVolts", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "pollCycle": 0, + "storageLwTSDB": 0, + "_id": "000a674f3386f123" + }, + { + "name": "oil_rssi", + "ctrlName": "tankalarms", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "OilTxRSSI", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "pollCycle": 0, + "storageLwTSDB": 0, + "_id": "000b674f338617ef" + }, + { + "name": "oil_hihi_spt", + "ctrlName": "tankalarms", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "OilTx_HHSP", + "decimal": 2, + "len": 1, + "readWrite": "rw", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "pollCycle": 0, + "storageLwTSDB": 0, + "_id": "000c674f3386d216" + }, + { + "name": "oil_hi_spt", + "ctrlName": "tankalarms", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "OilTx_HSp", + "decimal": 2, + "len": 1, + "readWrite": "rw", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "1.0", + "offset": "0.0", + "pollCycle": 0, + "storageLwTSDB": 0, + "_id": "000d674f3386fb35" + }, + { + "name": "oil_hihi_alm", + "ctrlName": "tankalarms", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "OilTx_HHAlrm", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "pollCycle": 0, + "bitMap": 0, + "reverseBit": 0, + "storageLwTSDB": 0, + "_id": "000e674f3386d44b" + }, + { + "name": "oil_hi_alm", + "ctrlName": "tankalarms", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "OilTx_HAlrm", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "pollCycle": 0, + "bitMap": 0, + "reverseBit": 0, + "storageLwTSDB": 0, + "_id": "000f674f33864f85" + }, + { + "name": "oil_batt_lolo_alm", + "ctrlName": "tankalarms", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "OilTxBatVolts_LLAlrm", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "pollCycle": 0, + "bitMap": 0, + "reverseBit": 0, + "storageLwTSDB": 0, + "_id": "0010674f33869677" + }, + { + "name": "oil_comm_fail_alm", + "ctrlName": "tankalarms", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "OilTx_RF_CommFail", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "pollCycle": 0, + "bitMap": 0, + "reverseBit": 0, + "storageLwTSDB": 0, + "_id": "0011674f3386e6a2" + }, + { + "name": "alarmreset", + "ctrlName": "tankalarms", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "Reset", + "decimal": 2, + "len": 1, + "readWrite": "rw", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "pollCycle": 0, + "bitMap": 0, + "reverseBit": 0, + "storageLwTSDB": 0, + "_id": "0012674f33866e4e" + } + ], + "alarmLables": [ + "default" + ], + "alarms": [ + { + "name": "water_hihi_alm", + "ctrlName": "tankalarms", + "measureName": "water_hihi_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Water Tank HiHi", + "alarmLable": "default", + "_id": "0000674f3386b1d1" + }, + { + "name": "water_hi_alm", + "ctrlName": "tankalarms", + "measureName": "water_hi_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Water Tank Hi", + "alarmLable": "default", + "_id": "0001674f33862f1f" + }, + { + "name": "water_batt_lolo_alm", + "ctrlName": "tankalarms", + "measureName": "water_batt_lolo_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Water Tank Battery LoLo", + "alarmLable": "default", + "_id": "0002674f33864ec5" + }, + { + "name": "water_comm_fail_alm", + "ctrlName": "tankalarms", + "measureName": "water_comm_fail_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Water Tank Comms Fail", + "alarmLable": "default", + "_id": "0003674f3386df5f" + }, + { + "name": "oil_hihi_alm", + "ctrlName": "tankalarms", + "measureName": "oil_hihi_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Oil Tank HiHi", + "alarmLable": "default", + "_id": "0004674f338600c5" + }, + { + "name": "oil_hi_alm", + "ctrlName": "tankalarms", + "measureName": "oil_hi_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Oil Tank Hi", + "alarmLable": "default", + "_id": "0005674f3386dbaa" + }, + { + "name": "oil_batt_lolo_alm", + "ctrlName": "tankalarms", + "measureName": "oil_batt_lolo_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Oil Tank Battery LoLo", + "alarmLable": "default", + "_id": "0006674f3386740e" + }, + { + "name": "oil_comm_fail_alm", + "ctrlName": "tankalarms", + "measureName": "oil_comm_fail_alm", + "alarmLevel": 5, + "cond1": { + "op": "eq", + "value": "1.0" + }, + "condOp": "none", + "cond2": { + "op": "eq", + "value": "" + }, + "content": "Oil Tank Comms Fail", + "alarmLable": "default", + "_id": "0007674f3386a6ba" + } + ], + "groups": [ + { + "name": "default", + "uploadInterval": 600, + "LwTSDBSize": 1000, + "strategy": 1, + "historyDataMode": "gateway", + "historyDataPath": "/var/user/data/dbhome/device_supervisor/LwTSDB", + "enablePerOnchange": 0, + "_id": "0000674f3386c809" + } + ], + "misc": { + "maxAlarmRecordSz": 2000, + "logLvl": "INFO", + "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, + "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": "faskens-fee-bm", + "auth": 1, + "tls": 0, + "cleanSession": 0, + "mqttVersion": "v3.1.1", + "keepalive": 60, + "key": "", + "cert": "", + "rootCA": "", + "verifyServer": 0, + "verifyClient": 0, + "username": "faskensmqtt", + "passwd": "faskensmqtt@1903", + "authType": 1, + "willQos": 0, + "willRetain": 0, + "willTopic": "", + "willPayload": "", + "tlsAuth": "caSelfSigned" + }, + "uploadRules": [], + "_id": "0000674f338649b5" + } + ], + "quickfaas": { + "genericFuncs": [], + "uploadFuncs": [ + { + "qos": 1, + "funcName": "sendData", + "script": "# Enter your python code.\nimport json, os\nfrom datetime import datetime as dt\nfrom common.Logger import logger\nfrom quickfaas.remotebus import publish\nfrom quickfaas.global_dict import get as get_params\nfrom quickfaas.global_dict import _set_global_args\n\ndef reboot():\n #basic = Basic()\n logger.info(\"!\" * 10 + \"REBOOTING DEVICE\" + \"!\"*10)\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 if not os.path.exists(path):\n logger.info(\"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 if not os.path.exists(path + \"/\" + filename):\n logger.info(\"no creds file making creds file\")\n with open(path + \"/\" + filename, \"a\") as f:\n json.dump({}, f)\n\ndef convertDStoJSON(ds):\n j = dict()\n for x in ds:\n j[x[\"key\"]] = x[\"value\"]\n return j\n\ndef convertJSONtoDS(j):\n d = []\n for key in j.keys():\n d.append({\"key\": key, \"value\": j[key]})\n return d\n\ndef checkCredentialConfig():\n logger.info(\"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 cfg = json.load(f)\n clouds = cfg.get(\"clouds\")\n logger.info(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 checkFileExist(\"creds.json\")\n with open(credspath, \"r\") as c:\n creds = json.load(c)\n if creds:\n logger.info(\"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 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.info(\"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\ndef checkParameterConfig(cfg):\n logger.info(\"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.info(\"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.info(\"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.info(\"initializing param file with params in memory\")\n json.dump(convertDStoJSON(get_params()), p)\n cfg[\"labels\"] = get_params()\n \n return cfg\n\n\n\n\ndef sendData(message):\n payload = {}\n payload[\"ts\"] = (round(dt.timestamp(dt.now())/600)*600)*1000\n payload[\"values\"] = {}\n try:\n checkCredentialConfig()\n except Exception as e:\n logger.error(e)\n for measure in message[\"measures\"]:\n try:\n logger.debug(measure)\n payload[\"values\"][measure[\"name\"]] = measure[\"value\"]\n except Exception as e:\n logger.error(e)\n publish(__topic__, json.dumps(payload), __qos__)", + "name": "sendData", + "trigger": "measure_event", + "topic": "v1/devices/me/telemetry", + "cloudName": "default", + "groups": [ + "default" + ], + "msgType": 0 + }, + { + "name": "sendAlarms", + "trigger": "warning_event", + "topic": "v1/devices/me/telemetry", + "qos": 1, + "funcName": "sendAlarm", + "script": "# Enter your python code.\nimport json, time\nfrom common.Logger import logger\nfrom quickfaas.remotebus import publish\n\n\ndef sendAlarm(message):\n logger.info(message)\n payload = {}\n payload[\"ts\"] = time.time()*1000\n payload[\"values\"] = {message[\"measureName\"]: message[\"value\"]}\n publish(__topic__, json.dumps(payload), __qos__)", + "alarms": [ + "water_hihi_alm", + "water_hi_alm", + "water_batt_lolo_alm", + "water_comm_fail_alm", + "oil_hihi_alm", + "oil_hi_alm", + "oil_batt_lolo_alm", + "oil_comm_fail_alm" + ], + "msgType": 0, + "cloudName": "default" + } + ], + "downloadFuncs": [ + { + "name": "Receive Command", + "topic": "v1/devices/me/rpc/request/+", + "qos": 1, + "funcName": "receiveCommand", + "payload_type": "JSON", + "script": "import json, time\nfrom quickfaas.measure import recall, write\nfrom quickfaas.remotebus import publish\nfrom common.Logger import logger\n\ndef sync():\n #get new values and send\n payload = {}\n topic = \"v1/devices/me/telemetry\"\n try:\n data = recall()#json.loads(recall().decode(\"utf-8\"))\n except Exception as e:\n logger.error(e)\n logger.debug(data)\n for controller in data:\n for measure in controller[\"measures\"]:\n #publish measure\n payload[measure[\"name\"]] = measure[\"value\"]\n logger.debug(\"Sending on topic: {}\".format(topic))\n logger.debug(\"Sending value: {}\".format(payload))\n publish(topic, json.dumps(payload), 1)\ndef writeplctag(value):\n #value in the form {\"measurement\": , \"value\": }\n try:\n #value = json.loads(value.replace(\"'\",'\"'))\n logger.debug(value)\n #payload format: [{\"name\": \"tankalarms\", \"measures\": [{\"name\": \"manualfrequencysetpoint\", \"value\": 49}]}]\n message = [{\"name\": \"tankalarms\", \"measures\":[{\"name\":value[\"measurement\"], \"value\": value[\"value\"]}]}]\n resp = write(message) \n logger.debug(\"RETURN FROM WRITE: {}\".format(resp))\n return True\n except Exception as e:\n logger.debug(e)\n return False\n \ndef receiveCommand(topic, payload):\n try:\n logger.debug(topic)\n logger.debug(json.loads(payload))\n p = json.loads(payload)\n command = p[\"method\"]\n commands = {\n \"sync\": sync,\n \"writeplctag\": writeplctag,\n } \n if command == \"setPLCTag\":\n try:\n result = commands[\"writeplctag\"](p[\"params\"])\n logger.debug(result)\n except Exception as e:\n logger.error(e)\n #logger.debug(command)\n ack(topic.split(\"/\")[-1])\n time.sleep(5)\n sync()\n except Exception as e:\n logger.debug(e)\n \n\ndef ack(msgid):\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\": time.time()}, \"metadata\": \"\", \"msgType\": \"\"}), 1)\n\n\n", + "msgType": 0, + "cloudName": "default", + "trigger": "command_event" + }, + { + "name": "receiveAttributes", + "topic": "v1/devices/me/attributes", + "qos": 1, + "funcName": "receiveAttributes", + "payload_type": "Plaintext", + "script": "# Enter your python code.\nfrom common.Logger import logger\nimport json, time\nfrom quickfaas.measure import recall, write\nfrom quickfaas.remotebus import publish\n\ndef writeplctag(value):\n #value in the form {\"measurement\": , \"value\": }\n try:\n #value = json.loads(value.replace(\"'\",'\"'))\n logger.debug(value)\n #payload format: [{\"name\": \"advvfdipp\", \"measures\": [{\"name\": \"manualfrequencysetpoint\", \"value\": 49}]}]\n message = [{\"name\": \"tankalarms\", \"measures\":[{\"name\":value[\"measurement\"], \"value\": value[\"value\"]}]}]\n resp = write(message) \n logger.debug(\"RETURN FROM WRITE: {}\".format(resp))\n return True\n except Exception as e:\n logger.debug(e)\n return False\n\ndef receiveAttributes(topic, payload):\n logger.debug(topic)\n logger.debug(json.loads(payload))\n #payload format: {'tankalarms.water_hihi_spt': 12}\n payload = json.loads(payload)\n measures = list(payload.keys())\n logger.debug(measures)\n if \"tankalarms.\" in measures[0]:\n measure = measures[0].split(\".\")[1]\n else:\n measure = measures[0]\n logger.debug(measure)\n writeplctag({\"measurement\": measure, \"value\": payload[measures[0]]})\n \n ", + "msgType": 0, + "cloudName": "default", + "trigger": "command_event" + } + ] + }, + "labels": [ + { + "key": "SN", + "value": "GF5022404048280", + "_id": "0000674f338695da" + }, + { + "key": "MAC", + "value": "ec:6e:79:02:69:4b", + "_id": "0001674f33862af2" + } + ], + "modbusSlave": { + "enable": 0, + "protocol": "Modbus-TCP", + "port": 502, + "slaveAddr": 1, + "int16Ord": "ab", + "int32Ord": "abcd", + "float32Ord": "abcd", + "maxConnection": 5, + "useRawvalue": 1, + "mapping_table": [] + }, + "modbusRTUSlave": { + "enable": 0, + "protocol": "Modbus-RTU", + "coms": "rs485", + "slaveAddr": 1, + "int16Ord": "ab", + "int32Ord": "abcd", + "float32Ord": "abcd", + "useRawvalue": 1, + "mapping_table": [] + }, + "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, + "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, + "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": "None", + "privateKey": "None", + "pubsub": 0, + "useRawvalue": 1, + "mapping_table": [] + }, + "sl651Slave": { + "enable": 0, + "centerAaddr": 1, + "remoteAddr": "", + "addrCode": "", + "password": "", + "platform_list": [], + "useRawvalue": 1, + "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": [] + }, + "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": [] + }, + "southMetadata": {}, + "bindMetadata": { + "version": "", + "timestamp": "" + }, + "bindConfig": { + "enable": 0, + "bind": { + "modelId": "", + "modelName": "", + "srcId": "", + "srcName": "", + "devId": "", + "devName": "" + }, + "varGroups": [], + "variables": [], + "alerts": [] + }, + "templates": {}, + "version": "3.0.1" +} \ No newline at end of file diff --git a/code snippets/setList.ipynb b/code snippets/setList.ipynb new file mode 100644 index 0000000..b9ea808 --- /dev/null +++ b/code snippets/setList.ipynb @@ -0,0 +1,278 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "josh = [\n", + " \"pond_level_input_alm\",\n", + " \"tp_1_charge_pump_fail_to_start_alm\",\n", + " \"tp_1_hi_a_winding_alm\",\n", + " \"tp_1_hi_b_winding_alm\",\n", + " \"tp_1_hi_c_winding_alm\",\n", + " \"tp_1_hi_discharge_alm\",\n", + " \"tp_1_hi_inboard_temp_alm\",\n", + " \"tp_1_hi_outboard_temp_alm\",\n", + " \"tp_1_hi_vibration_alm\",\n", + " \"tp_1_lo_discharge_alm\",\n", + " \"tp_1_lo_oil_alm\",\n", + " \"tp_1_lo_suction_alm\",\n", + " \"tp_1_oil_cooler_failed_to_start_alm\",\n", + " \"tp_2_charge_pump_fail_to_start_alm\",\n", + " \"tp_2_hi_a_winding_alm\",\n", + " \"tp_2_hi_b_winding_alm\",\n", + " \"tp_2_hi_c_winding_alm\",\n", + " \"tp_2_hi_discharge_alm\",\n", + " \"tp_2_hi_inboard_temp_alm\",\n", + " \"tp_2_hi_outboard_temp_alm\",\n", + " \"tp_2_hi_vibration_alm\",\n", + " \"tp_2_lo_discharge_alm\",\n", + " \"tp_2_lo_oil_alm\",\n", + " \"tp_2_lo_suction_alm\",\n", + " \"tp_2_oil_cooler_failed_to_start_alm\",\n", + " \"ww_1_comms_alm\",\n", + " \"ww_2_comms_alm\",\n", + " \"ww_3_comms_alm\",\n", + " \"ww_4_comms_alm\",\n", + " \"ww_5_comms_alm\",\n", + " \"ww_6_comms_alm\",\n", + " \"wtp_1_discharge_alm\",\n", + " \"wtp_1_suction_alm\",\n", + " \"wtp_1_vibration_alm\",\n", + " \"wtp_2_discharge_alm\",\n", + " \"wtp_2_suction_alm\",\n", + " \"wtp_2_vibration_alm\",\n", + " \"ww_1_control_power_alm\",\n", + " \"ww_1_hi_discharge_alm\",\n", + " \"ww_1_hi_flow_alm\",\n", + " \"ww_1_hoa_in_manual_alm\",\n", + " \"ww_1_lo_discharge_alm\",\n", + " \"ww_1_lo_flow_alm\",\n", + " \"ww_1_lo_pip_alm\",\n", + " \"ww_1_master_comm_alm\",\n", + " \"ww_1_vfd_alm\",\n", + " \"ww_2_control_power_alm\",\n", + " \"ww_2_hi_discharge_alm\",\n", + " \"ww_2_hi_flow_alm\",\n", + " \"ww_2_hoa_in_manual_alm\",\n", + " \"ww_2_lo_discharge_alm\",\n", + " \"ww_2_lo_flow_alm\",\n", + " \"ww_2_lo_pip_alm\",\n", + " \"ww_2_master_comm_alm\",\n", + " \"ww_2_vfd_alm\",\n", + " \"ww_3_control_power_alm\",\n", + " \"ww_3_hi_discharge_alm\",\n", + " \"ww_3_hi_flow_alm\",\n", + " \"ww_3_hoa_in_manual_alm\",\n", + " \"ww_3_lo_discharge_alm\",\n", + " \"ww_3_lo_flow_alm\",\n", + " \"ww_3_lo_pip_alm\",\n", + " \"ww_3_master_comm_alm\",\n", + " \"ww_3_vfd_alm\",\n", + " \"ww_4_control_power_alm\",\n", + " \"ww_4_hi_discharge_alm\",\n", + " \"ww_4_hi_flow_alm\",\n", + " \"ww_4_hoa_in_manual_alm\",\n", + " \"ww_4_lo_discharge_alm\",\n", + " \"ww_4_lo_flow_alm\",\n", + " \"ww_4_lo_pip_alm\",\n", + " \"ww_4_master_comm_alm\",\n", + " \"ww_4_vfd_alm\",\n", + " \"ww_5_control_power_alm\",\n", + " \"ww_5_hi_discharge_alm\",\n", + " \"ww_5_hi_flow_alm\",\n", + " \"ww_5_hoa_in_manual_alm\",\n", + " \"ww_5_lo_discharge_alm\",\n", + " \"ww_5_lo_flow_alm\",\n", + " \"ww_5_lo_pip_alm\",\n", + " \"ww_5_master_comm_alm\",\n", + " \"ww_5_vfd_alm\",\n", + " \"ww_6_control_power_alm\",\n", + " \"ww_6_hi_discharge_alm\",\n", + " \"ww_6_hi_flow_alm\",\n", + " \"ww_6_hoa_in_manual_alm\",\n", + " \"ww_6_lo_discharge_alm\",\n", + " \"ww_6_lo_flow_alm\",\n", + " \"ww_6_lo_pip_alm\",\n", + " \"ww_6_master_comm_alm\",\n", + " \"ww_6_vfd_alm\"\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "nico = [\n", + " \"pond_level_input_alm\",\n", + " \"ww_1_comms_alm\",\n", + " \"ww_2_comms_alm\",\n", + " \"ww_3_comms_alm\",\n", + " \"ww_4_comms_alm\",\n", + " \"ww_5_comms_alm\",\n", + " \"ww_6_comms_alm\",\n", + " \"wtp_1_discharge_alm\",\n", + " \"wtp_1_suction_alm\",\n", + " \"wtp_1_vibration_alm\",\n", + " \"wtp_2_discharge_alm\",\n", + " \"wtp_2_suction_alm\",\n", + " \"wtp_2_vibration_alm\"\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "c = list(set(set(josh) - set(nico)))" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "c.sort()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['tp_1_charge_pump_fail_to_start_alm',\n", + " 'tp_1_hi_a_winding_alm',\n", + " 'tp_1_hi_b_winding_alm',\n", + " 'tp_1_hi_c_winding_alm',\n", + " 'tp_1_hi_discharge_alm',\n", + " 'tp_1_hi_inboard_temp_alm',\n", + " 'tp_1_hi_outboard_temp_alm',\n", + " 'tp_1_hi_vibration_alm',\n", + " 'tp_1_lo_discharge_alm',\n", + " 'tp_1_lo_oil_alm',\n", + " 'tp_1_lo_suction_alm',\n", + " 'tp_1_oil_cooler_failed_to_start_alm',\n", + " 'tp_2_charge_pump_fail_to_start_alm',\n", + " 'tp_2_hi_a_winding_alm',\n", + " 'tp_2_hi_b_winding_alm',\n", + " 'tp_2_hi_c_winding_alm',\n", + " 'tp_2_hi_discharge_alm',\n", + " 'tp_2_hi_inboard_temp_alm',\n", + " 'tp_2_hi_outboard_temp_alm',\n", + " 'tp_2_hi_vibration_alm',\n", + " 'tp_2_lo_discharge_alm',\n", + " 'tp_2_lo_oil_alm',\n", + " 'tp_2_lo_suction_alm',\n", + " 'tp_2_oil_cooler_failed_to_start_alm',\n", + " 'ww_1_control_power_alm',\n", + " 'ww_1_hi_discharge_alm',\n", + " 'ww_1_hi_flow_alm',\n", + " 'ww_1_hoa_in_manual_alm',\n", + " 'ww_1_lo_discharge_alm',\n", + " 'ww_1_lo_flow_alm',\n", + " 'ww_1_lo_pip_alm',\n", + " 'ww_1_master_comm_alm',\n", + " 'ww_1_vfd_alm',\n", + " 'ww_2_control_power_alm',\n", + " 'ww_2_hi_discharge_alm',\n", + " 'ww_2_hi_flow_alm',\n", + " 'ww_2_hoa_in_manual_alm',\n", + " 'ww_2_lo_discharge_alm',\n", + " 'ww_2_lo_flow_alm',\n", + " 'ww_2_lo_pip_alm',\n", + " 'ww_2_master_comm_alm',\n", + " 'ww_2_vfd_alm',\n", + " 'ww_3_control_power_alm',\n", + " 'ww_3_hi_discharge_alm',\n", + " 'ww_3_hi_flow_alm',\n", + " 'ww_3_hoa_in_manual_alm',\n", + " 'ww_3_lo_discharge_alm',\n", + " 'ww_3_lo_flow_alm',\n", + " 'ww_3_lo_pip_alm',\n", + " 'ww_3_master_comm_alm',\n", + " 'ww_3_vfd_alm',\n", + " 'ww_4_control_power_alm',\n", + " 'ww_4_hi_discharge_alm',\n", + " 'ww_4_hi_flow_alm',\n", + " 'ww_4_hoa_in_manual_alm',\n", + " 'ww_4_lo_discharge_alm',\n", + " 'ww_4_lo_flow_alm',\n", + " 'ww_4_lo_pip_alm',\n", + " 'ww_4_master_comm_alm',\n", + " 'ww_4_vfd_alm',\n", + " 'ww_5_control_power_alm',\n", + " 'ww_5_hi_discharge_alm',\n", + " 'ww_5_hi_flow_alm',\n", + " 'ww_5_hoa_in_manual_alm',\n", + " 'ww_5_lo_discharge_alm',\n", + " 'ww_5_lo_flow_alm',\n", + " 'ww_5_lo_pip_alm',\n", + " 'ww_5_master_comm_alm',\n", + " 'ww_5_vfd_alm',\n", + " 'ww_6_control_power_alm',\n", + " 'ww_6_hi_discharge_alm',\n", + " 'ww_6_hi_flow_alm',\n", + " 'ww_6_hoa_in_manual_alm',\n", + " 'ww_6_lo_discharge_alm',\n", + " 'ww_6_lo_flow_alm',\n", + " 'ww_6_lo_pip_alm',\n", + " 'ww_6_master_comm_alm',\n", + " 'ww_6_vfd_alm']" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "c" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "tbreport", + "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.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}