added rr facility
This commit is contained in:
743
Pub_Sub/dual_flowmeter/thingsboard/dual_flowmeter_ma_to_tb.cfg
Normal file
743
Pub_Sub/dual_flowmeter/thingsboard/dual_flowmeter_ma_to_tb.cfg
Normal file
File diff suppressed because one or more lines are too long
63
Pub_Sub/dual_flowmeter/thingsboard/pub/sendData.py
Normal file
63
Pub_Sub/dual_flowmeter/thingsboard/pub/sendData.py
Normal file
@@ -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")
|
||||
|
||||
|
||||
111
Pub_Sub/dual_flowmeter/thingsboard/sub/receiveCommand.py
Normal file
111
Pub_Sub/dual_flowmeter/thingsboard/sub/receiveCommand.py
Normal file
@@ -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": <measurement_name>, "value": <value to write>}
|
||||
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")
|
||||
|
||||
|
||||
26
Pub_Sub/fk_plcpond/thingsboard/be-pond-transfer.csv
Normal file
26
Pub_Sub/fk_plcpond/thingsboard/be-pond-transfer.csv
Normal file
@@ -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
|
||||
|
@@ -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():
|
||||
|
||||
278
Pub_Sub/oradvvfdipp/thingsboard/sub/receiveCommand.py
Normal file
278
Pub_Sub/oradvvfdipp/thingsboard/sub/receiveCommand.py
Normal file
@@ -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": <measurement_name>, "value": <value to write>}
|
||||
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")
|
||||
509
Pub_Sub/piflow/thingsboard/pub/sendData.py
Normal file
509
Pub_Sub/piflow/thingsboard/pub/sendData.py
Normal file
@@ -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")
|
||||
92
Pub_Sub/rr_facility/thingsboard/alarm.csv
Normal file
92
Pub_Sub/rr_facility/thingsboard/alarm.csv
Normal file
@@ -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
|
||||
|
262
Pub_Sub/rr_facility/thingsboard/pub/sendData.py
Normal file
262
Pub_Sub/rr_facility/thingsboard/pub/sendData.py
Normal file
@@ -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)
|
||||
|
||||
8537
Pub_Sub/rr_facility/thingsboard/rr_facility.cfg
Normal file
8537
Pub_Sub/rr_facility/thingsboard/rr_facility.cfg
Normal file
File diff suppressed because one or more lines are too long
383
Pub_Sub/rr_facility/thingsboard/rr_facility.csv
Normal file
383
Pub_Sub/rr_facility/thingsboard/rr_facility.csv
Normal file
@@ -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
|
||||
|
75
Pub_Sub/rr_facility/thingsboard/sub/receiveCommand.py
Normal file
75
Pub_Sub/rr_facility/thingsboard/sub/receiveCommand.py
Normal file
@@ -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": <measurement_name>, "value": <value to write>}
|
||||
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": ""}))
|
||||
933
Pub_Sub/tankalarms/thingsboard/fee-bm.cfg
Normal file
933
Pub_Sub/tankalarms/thingsboard/fee-bm.cfg
Normal file
File diff suppressed because one or more lines are too long
278
code snippets/setList.ipynb
Normal file
278
code snippets/setList.ipynb
Normal file
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user