multiple updates to various drivers

This commit is contained in:
Nico Melone
2025-09-18 16:59:08 -05:00
parent f81ec6756b
commit 81d6c39945
15 changed files with 94057 additions and 100 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,19 @@
{
"timestamp": 1758231657,
"group_name": "default",
"timestampMsec": 1758231657817,
"values": {
"test": {
"ctrlName": "testInHand",
"measureName": "Totalizer 1 Unit",
"timestamp": 1758231657,
"timestampMsec": 1758231657804,
"current": "on",
"status": 0,
"value": 16,
"alarm_value": 16,
"alarm_content": "The value is now 16",
"level": 5
}
}
}

View File

@@ -0,0 +1,24 @@
AlarmName,ControllerName,MeasuringPointName,AlarmLevel,Condition1,Operand1,CombineMethod,Condition2,Operand2,AlarmContent,AlarmTag
air_compressor_lo_discharge_alm,Peacemaker_Facility,air_compressor_lo_discharge_alm,5,eq,1,none,eq,,ALARMED,default
lact_2_fault_alm,Peacemaker_Facility,lact_2_fault_alm,5,eq,1,none,eq,,ALARMED,default
lact_faulted_alm,Peacemaker_Facility,lact_faulted_alm,5,eq,1,none,eq,,ALARMED,default
ot_1_check_radar_alm,Peacemaker_Facility,ot_1_check_radar_alm,5,eq,1,none,eq,,ALARMED,default
ot_1_hi_alm,Peacemaker_Facility,ot_1_hi_alm,5,eq,1,none,eq,,ALARMED,default
ot_2_check_radar_alm,Peacemaker_Facility,ot_2_check_radar_alm,5,eq,1,none,eq,,ALARMED,default
ot_2_hi_alm,Peacemaker_Facility,ot_2_hi_alm,5,eq,1,none,eq,,ALARMED,default
power_supply_fault_alm,Peacemaker_Facility,power_supply_fault_alm,5,eq,1,none,eq,,ALARMED,default
st_1_check_radar_alm,Peacemaker_Facility,st_1_check_radar_alm,5,eq,1,none,eq,,ALARMED,default
st_1_hi_alm,Peacemaker_Facility,st_1_hi_alm,5,eq,1,none,eq,,ALARMED,default
ups_fault_alm,Peacemaker_Facility,ups_fault_alm,5,eq,1,none,eq,,ALARMED,default
working_oil_tank_lo_alm,Peacemaker_Facility,working_oil_tank_lo_alm,5,eq,1,none,eq,,ALARMED,default
working_water_tank_lo_alm,Peacemaker_Facility,working_water_tank_lo_alm,5,eq,1,none,eq,,ALARMED,default
wt_1_check_radar_alm,Peacemaker_Facility,wt_1_check_radar_alm,5,eq,1,none,eq,,ALARMED,default
wt_1_hi_alm,Peacemaker_Facility,wt_1_hi_alm,5,eq,1,none,eq,,ALARMED,default
wt_1_possibly_hi_alm,Peacemaker_Facility,wt_1_possibly_hi_alm,5,eq,1,none,eq,,ALARMED,default
wt_2_check_radar_alm,Peacemaker_Facility,wt_2_check_radar_alm,5,eq,1,none,eq,,ALARMED,default
wt_2_hi_alm,Peacemaker_Facility,wt_2_hi_alm,5,eq,1,none,eq,,ALARMED,default
wt_2_possibly_hi_alm,Peacemaker_Facility,wt_2_possibly_hi_alm,5,eq,1,none,eq,,ALARMED,default
wtp_1_alm,Peacemaker_Facility,wtp_1_alm,5,eq,1,none,eq,,ALARMED,default
wtp_1_ss_fault_alm,Peacemaker_Facility,wtp_1_ss_fault_alm,5,eq,1,none,eq,,ALARMED,default
wtp_2_alm,Peacemaker_Facility,wtp_2_alm,5,eq,1,none,eq,,ALARMED,default
wtp_2_ss_fault_alm,Peacemaker_Facility,wtp_2_ss_fault_alm,5,eq,1,none,eq,,ALARMED,default
1 AlarmName ControllerName MeasuringPointName AlarmLevel Condition1 Operand1 CombineMethod Condition2 Operand2 AlarmContent AlarmTag
2 air_compressor_lo_discharge_alm Peacemaker_Facility air_compressor_lo_discharge_alm 5 eq 1 none eq ALARMED default
3 lact_2_fault_alm Peacemaker_Facility lact_2_fault_alm 5 eq 1 none eq ALARMED default
4 lact_faulted_alm Peacemaker_Facility lact_faulted_alm 5 eq 1 none eq ALARMED default
5 ot_1_check_radar_alm Peacemaker_Facility ot_1_check_radar_alm 5 eq 1 none eq ALARMED default
6 ot_1_hi_alm Peacemaker_Facility ot_1_hi_alm 5 eq 1 none eq ALARMED default
7 ot_2_check_radar_alm Peacemaker_Facility ot_2_check_radar_alm 5 eq 1 none eq ALARMED default
8 ot_2_hi_alm Peacemaker_Facility ot_2_hi_alm 5 eq 1 none eq ALARMED default
9 power_supply_fault_alm Peacemaker_Facility power_supply_fault_alm 5 eq 1 none eq ALARMED default
10 st_1_check_radar_alm Peacemaker_Facility st_1_check_radar_alm 5 eq 1 none eq ALARMED default
11 st_1_hi_alm Peacemaker_Facility st_1_hi_alm 5 eq 1 none eq ALARMED default
12 ups_fault_alm Peacemaker_Facility ups_fault_alm 5 eq 1 none eq ALARMED default
13 working_oil_tank_lo_alm Peacemaker_Facility working_oil_tank_lo_alm 5 eq 1 none eq ALARMED default
14 working_water_tank_lo_alm Peacemaker_Facility working_water_tank_lo_alm 5 eq 1 none eq ALARMED default
15 wt_1_check_radar_alm Peacemaker_Facility wt_1_check_radar_alm 5 eq 1 none eq ALARMED default
16 wt_1_hi_alm Peacemaker_Facility wt_1_hi_alm 5 eq 1 none eq ALARMED default
17 wt_1_possibly_hi_alm Peacemaker_Facility wt_1_possibly_hi_alm 5 eq 1 none eq ALARMED default
18 wt_2_check_radar_alm Peacemaker_Facility wt_2_check_radar_alm 5 eq 1 none eq ALARMED default
19 wt_2_hi_alm Peacemaker_Facility wt_2_hi_alm 5 eq 1 none eq ALARMED default
20 wt_2_possibly_hi_alm Peacemaker_Facility wt_2_possibly_hi_alm 5 eq 1 none eq ALARMED default
21 wtp_1_alm Peacemaker_Facility wtp_1_alm 5 eq 1 none eq ALARMED default
22 wtp_1_ss_fault_alm Peacemaker_Facility wtp_1_ss_fault_alm 5 eq 1 none eq ALARMED default
23 wtp_2_alm Peacemaker_Facility wtp_2_alm 5 eq 1 none eq ALARMED default
24 wtp_2_ss_fault_alm Peacemaker_Facility wtp_2_ss_fault_alm 5 eq 1 none eq ALARMED default

View File

@@ -79,14 +79,17 @@ lact_yesterday_total,Peacemaker_Facility,default,periodic,,,FLOAT,,,,,Val_Lact_M
light_cmd,Peacemaker_Facility,default,periodic,,,BIT,,,,0,CMD_Lights,,,,rw,,,none,,,,,,,,,,,,,0,,1,,,,,,,,,0,
oil_tank_selector,Peacemaker_Facility,default,periodic,,,DINT,,0,,,Oil_Tank_Selector,,,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,,,0,
oil_working_tank_level_cmd,Peacemaker_Facility,default,periodic,,,FLOAT,,,,,CMD_Oil_Working_Tank_Level,2,,,rw,,,none,,,,,,,,,,,,,,,1,,,,,,,,,0,
ot_1_check_radar_alm,Peacemaker_Facility,default,periodic,,,BIT,,,,0,AL0_Check_OT1_Radar,,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,,,0,
ot_1_hi_alm,Peacemaker_Facility,default,periodic,,,BIT,,,,0,AL0_OT1_High_Level,,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,,,0,
ot_1_pv,Peacemaker_Facility,default,periodic,,,FLOAT,,,,,Val_OT1_PV,2,,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,,,0,
ot_1_sv,Peacemaker_Facility,default,periodic,,,FLOAT,,,,,Val_OT1_SV,2,,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,,,0,
ot_2_check_radar_alm,Peacemaker_Facility,default,periodic,,,BIT,,,,0,AL0_Check_OT2_Radar,,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,,,0,
ot_2_hi_alm,Peacemaker_Facility,default,periodic,,,BIT,,,,0,AL0_OT2_High_Level,,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,,,0,
ot_2_pv,Peacemaker_Facility,default,periodic,,,FLOAT,,,,,Val_OT2_PV,2,,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,,,0,
ot_2_sv,Peacemaker_Facility,default,periodic,,,FLOAT,,,,,Val_OT2_SV,2,,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,,,0,
power_supply_fault_alm,Peacemaker_Facility,default,periodic,,,BIT,,,,0,AL0_Power_Supply_Failure,,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,,,0,
power_supply_status,Peacemaker_Facility,default,periodic,,,BIT,,,,0,Raw_Power_Supply_Status,,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,,,0,
st_1_check_radar_alm,Peacemaker_Facility,default,periodic,,,BIT,,,,0,AL0_Check_ST1_Radar,,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,,,0,
st_1_hi_alm,Peacemaker_Facility,default,periodic,,,BIT,,,,0,AL0_ST1_High_Level,,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,,,0,
st_1_pv,Peacemaker_Facility,default,periodic,,,FLOAT,,,,,Val_ST1_PV,2,,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,,,0,
st_1_sv,Peacemaker_Facility,default,periodic,,,FLOAT,,,,,Val_ST1_SV,2,,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,,,0,
@@ -136,11 +139,17 @@ well_3_producer_permissive_cmd,Peacemaker_Facility,default,periodic,,,BIT,,,,0,C
well_4_producer_permissive_cmd,Peacemaker_Facility,default,periodic,,,BIT,,,,0,CMD_Well_4_ESP_Producer_Permissive,,,,rw,,,none,,,,,,,,,,,,,0,,1,,,,,,,,,0,
well_5_producer_permissive_cmd,Peacemaker_Facility,default,periodic,,,BIT,,,,0,CMD_Well_5_ESP_Producer_Permissive,,,,rw,,,none,,,,,,,,,,,,,0,,1,,,,,,,,,0,
working_oil_tank_level,Peacemaker_Facility,default,periodic,,,FLOAT,,,,,Working_Oil_Tank_Level,2,,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,,,0,
working_oil_tank_lo_alm,Peacemaker_Facility,default,periodic,,,BIT,,,,0,AL0_Low_Working_Oil_Tank_Level,,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,,,0,
working_water_tank_level,Peacemaker_Facility,default,periodic,,,FLOAT,,,,,Working_Water_Tank_Level,2,,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,,,0,
working_water_tank_lo_alm,Peacemaker_Facility,default,periodic,,,BIT,,,,0,AL0_Low_Working_Water_Tank_Level,,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,,,0,
wt_1_check_radar_alm,Peacemaker_Facility,default,periodic,,,BIT,,,,0,AL0_Check_WT1_Radar,,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,,,0,
wt_1_hi_alm,Peacemaker_Facility,default,periodic,,,BIT,,,,0,AL0_WT1_High_Level,,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,,,0,
wt_1_possibly_hi_alm,Peacemaker_Facility,default,periodic,,,BIT,,,,0,AL0_Water_Tanks_Possibly_High_1,,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,,,0,
wt_1_pv,Peacemaker_Facility,default,periodic,,,FLOAT,,,,,Val_WT1_PV,2,,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,,,0,
wt_1_sv,Peacemaker_Facility,default,periodic,,,FLOAT,,,,,Val_WT1_SV,2,,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,,,0,
wt_2_check_radar_alm,Peacemaker_Facility,default,periodic,,,BIT,,,,0,AL0_Check_WT2_Radar,,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,,,0,
wt_2_hi_alm,Peacemaker_Facility,default,periodic,,,BIT,,,,0,AL0_WT2_High_Level,,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,,,0,
wt_2_possibly_hi_alm,Peacemaker_Facility,default,periodic,,,BIT,,,,0,AL0_Water_Tanks_Possibly_High_2,,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,,,0,
wt_2_pv,Peacemaker_Facility,default,periodic,,,FLOAT,,,,,Val_WT2_PV,2,,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,,,0,
wt_2_sv,Peacemaker_Facility,default,periodic,,,FLOAT,,,,,Val_WT2_SV,2,,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,,,0,
wtp_1_alm,Peacemaker_Facility,default,periodic,,,DINT,,0,,,WTP1_Alarm,,,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,,,0,
1 MeasuringPointName ControllerName GroupName UploadType DeadZoneType DeadZonePercent DataType ArrayIndex EnableBit BitIndex reverseBit Address Decimal Len CodeType ReadWrite Unit Description Transform Type MaxValue MinValue MaxScale MinScale Gain Offset startBit endBit Pt Ct Mapping_table TransDecimal bitMap msecSample storageLwTSDB DataEndianReverse ReadOffset ReadLength WriteOffset WriteLength DataParseMethod BitId pollCycle EnableRequestCount RequestCount
79 light_cmd Peacemaker_Facility default periodic BIT 0 CMD_Lights rw none 0 1 0
80 oil_tank_selector Peacemaker_Facility default periodic DINT 0 Oil_Tank_Selector ro none 1 0
81 oil_working_tank_level_cmd Peacemaker_Facility default periodic FLOAT CMD_Oil_Working_Tank_Level 2 rw none 1 0
82 ot_1_check_radar_alm Peacemaker_Facility default periodic BIT 0 AL0_Check_OT1_Radar ro none 0 1 0
83 ot_1_hi_alm Peacemaker_Facility default periodic BIT 0 AL0_OT1_High_Level ro none 0 1 0
84 ot_1_pv Peacemaker_Facility default periodic FLOAT Val_OT1_PV 2 ro none 1 0
85 ot_1_sv Peacemaker_Facility default periodic FLOAT Val_OT1_SV 2 ro none 1 0
86 ot_2_check_radar_alm Peacemaker_Facility default periodic BIT 0 AL0_Check_OT2_Radar ro none 0 1 0
87 ot_2_hi_alm Peacemaker_Facility default periodic BIT 0 AL0_OT2_High_Level ro none 0 1 0
88 ot_2_pv Peacemaker_Facility default periodic FLOAT Val_OT2_PV 2 ro none 1 0
89 ot_2_sv Peacemaker_Facility default periodic FLOAT Val_OT2_SV 2 ro none 1 0
90 power_supply_fault_alm Peacemaker_Facility default periodic BIT 0 AL0_Power_Supply_Failure ro none 0 1 0
91 power_supply_status Peacemaker_Facility default periodic BIT 0 Raw_Power_Supply_Status ro none 0 1 0
92 st_1_check_radar_alm Peacemaker_Facility default periodic BIT 0 AL0_Check_ST1_Radar ro none 0 1 0
93 st_1_hi_alm Peacemaker_Facility default periodic BIT 0 AL0_ST1_High_Level ro none 0 1 0
94 st_1_pv Peacemaker_Facility default periodic FLOAT Val_ST1_PV 2 ro none 1 0
95 st_1_sv Peacemaker_Facility default periodic FLOAT Val_ST1_SV 2 ro none 1 0
139 well_4_producer_permissive_cmd Peacemaker_Facility default periodic BIT 0 CMD_Well_4_ESP_Producer_Permissive rw none 0 1 0
140 well_5_producer_permissive_cmd Peacemaker_Facility default periodic BIT 0 CMD_Well_5_ESP_Producer_Permissive rw none 0 1 0
141 working_oil_tank_level Peacemaker_Facility default periodic FLOAT Working_Oil_Tank_Level 2 ro none 1 0
142 working_oil_tank_lo_alm Peacemaker_Facility default periodic BIT 0 AL0_Low_Working_Oil_Tank_Level ro none 0 1 0
143 working_water_tank_level Peacemaker_Facility default periodic FLOAT Working_Water_Tank_Level 2 ro none 1 0
144 working_water_tank_lo_alm Peacemaker_Facility default periodic BIT 0 AL0_Low_Working_Water_Tank_Level ro none 0 1 0
145 wt_1_check_radar_alm Peacemaker_Facility default periodic BIT 0 AL0_Check_WT1_Radar ro none 0 1 0
146 wt_1_hi_alm Peacemaker_Facility default periodic BIT 0 AL0_WT1_High_Level ro none 0 1 0
147 wt_1_possibly_hi_alm Peacemaker_Facility default periodic BIT 0 AL0_Water_Tanks_Possibly_High_1 ro none 0 1 0
148 wt_1_pv Peacemaker_Facility default periodic FLOAT Val_WT1_PV 2 ro none 1 0
149 wt_1_sv Peacemaker_Facility default periodic FLOAT Val_WT1_SV 2 ro none 1 0
150 wt_2_check_radar_alm Peacemaker_Facility default periodic BIT 0 AL0_Check_WT2_Radar ro none 0 1 0
151 wt_2_hi_alm Peacemaker_Facility default periodic BIT 0 AL0_WT2_High_Level ro none 0 1 0
152 wt_2_possibly_hi_alm Peacemaker_Facility default periodic BIT 0 AL0_Water_Tanks_Possibly_High_2 ro none 0 1 0
153 wt_2_pv Peacemaker_Facility default periodic FLOAT Val_WT2_PV 2 ro none 1 0
154 wt_2_sv Peacemaker_Facility default periodic FLOAT Val_WT2_SV 2 ro none 1 0
155 wtp_1_alm Peacemaker_Facility default periodic DINT 0 WTP1_Alarm ro none 1 0

View File

@@ -0,0 +1,23 @@
import json, time
from datetime import datetime as dt
from common.Logger import logger
from quickfaas.remotebus import publish
def sendAlarm(message, wizard_api, cloudName):
logger.info(message)
grouped_data = {}
now = (round(dt.timestamp(dt.now())/600)*600)*1000
for key, value in message["values"].items():
ctrlName = " ".join(value['ctrlName'].split("_"))
if ctrlName not in grouped_data:
grouped_data[ctrlName] = {}
grouped_data[ctrlName][value["measureName"]] = value["value"]
payload = {}
for key, value in grouped_data.items():
if value:
payload[key] = [{"ts": now ,"values": value}]
logger.info(json.dumps(payload, indent=4))
publish(__topic__, json.dumps(payload), __qos__, cloud_name=cloudName)

View File

@@ -230,7 +230,7 @@
{
"qos": 1,
"funcName": "sendSnapshot",
"script": "import json, time, requests, base64\nfrom common.Logger import logger\nfrom quickfaas.remotebus import publish\nfrom quickfaas.global_dict import get as get_params\nfrom datetime import datetime as dt\nfrom requests.adapters import HTTPAdapter, Retry\nfrom requests.auth import HTTPBasicAuth\nfrom requests.exceptions import ConnectionError\n\n\n\ndef convertDStoJSON(ds):\n j = dict()\n for x in ds:\n j[x[\"key\"]] = x[\"value\"]\n return j\n\ndef getImage():\n params = convertDStoJSON(get_params())\n camera_ip = params[\"camera_ip\"].replace(\"_\", \".\")\n port = params[\"port\"]\n with open('./snapshot.jpg', 'wb') as handle:\n with requests.Session() as s:\n retries = Retry(total = 10, backoff_factor=0.1, status_forcelist=[404,408, 500, 502, 503, 504])\n s.mount('http://', HTTPAdapter(max_retries=retries))\n resp = s.get(\"http://\" + camera_ip + \":\" + port + \"/cgi-bin/jpg/image.cgi?stream=stream3\", auth=HTTPBasicAuth(\"ASS\", \"amerus@1903\"), stream=True)\n for block in resp.iter_content(1024):\n if not block:\n break\n handle.write(block)\n \n with open('./snapshot.jpg', 'rb') as image_file:\n encoded_string = base64.b64encode(image_file.read())\n publish(__topic__, json.dumps({\"ts\": (round(dt.timestamp(dt.now())/600)*600)*1000, \"values\":{\"snapshot\": encoded_string.decode(\"UTF-8\"), \"camera_error\": \"OK\"}}), __qos__)\n\n\ndef sendSnapshot(message,wizard_api):\n logger.debug(message)\n try:\n getImage()\n except ConnectionError as ce:\n logger.error(\"Could not connect to Camera\")\n logger.error(ce)\n publish(__topic__, json.dumps({\"ts\": (round(dt.timestamp(dt.now())/600)*600)*1000, \"values\":{\"camera_error\": f\"Could not connect to camera (ConnectionError), check camera connection and power\\n\\n{ce}\"}}), __qos__)\n except Exception as e:\n logger.error(\"Could not get image\")\n logger.error(e)\n publish(__topic__, json.dumps({\"ts\": (round(dt.timestamp(dt.now())/600)*600)*1000, \"values\":{\"camera_error\": f\"Could not connect to camera, check camera connection, power, IP Address\\n\\n{e}\"}}), __qos__)\n ",
"script": "import json, time, requests, base64\nfrom common.Logger import logger\nfrom quickfaas.remotebus import publish\nfrom quickfaas.global_dict import get as get_params\nfrom datetime import datetime as dt\nfrom requests.adapters import HTTPAdapter, Retry\nfrom requests.auth import HTTPDigestAuth\nfrom requests.exceptions import ConnectionError\n\n\n\ndef convertDStoJSON(ds):\n j = dict()\n for x in ds:\n j[x[\"key\"]] = x[\"value\"]\n return j\n\ndef getImage():\n params = convertDStoJSON(get_params())\n camera_ip = params[\"camera_ip\"].replace(\"_\", \".\")\n port = params[\"port\"]\n with open('./snapshot.jpg', 'wb') as handle:\n with requests.Session() as s:\n retries = Retry(total = 10, backoff_factor=0.1, status_forcelist=[404,408, 500, 502, 503, 504])\n s.mount('http://', HTTPAdapter(max_retries=retries))\n resp = s.get(\"http://\" + camera_ip + \":\" + port + \"/cgi-bin/jpg/image.cgi?stream=stream3\", auth=HTTPDigestAuth(\"ASS\", \"amerus@1903\"), stream=True)\n for block in resp.iter_content(1024):\n if not block:\n break\n handle.write(block)\n \n with open('./snapshot.jpg', 'rb') as image_file:\n encoded_string = base64.b64encode(image_file.read())\n publish(__topic__, json.dumps({\"ts\": (round(dt.timestamp(dt.now())/600)*600)*1000, \"values\":{\"snapshot\": encoded_string.decode(\"UTF-8\"), \"camera_error\": \"OK\"}}), __qos__)\n\n\ndef sendSnapshot(message,wizard_api):\n logger.debug(message)\n try:\n getImage()\n except ConnectionError as ce:\n logger.error(\"Could not connect to Camera\")\n logger.error(ce)\n publish(__topic__, json.dumps({\"ts\": (round(dt.timestamp(dt.now())/600)*600)*1000, \"values\":{\"camera_error\": f\"Could not connect to camera (ConnectionError), check camera connection and power\\n\\n{ce}\"}}), __qos__)\n except Exception as e:\n logger.error(\"Could not get image\")\n logger.error(e)\n publish(__topic__, json.dumps({\"ts\": (round(dt.timestamp(dt.now())/600)*600)*1000, \"values\":{\"camera_error\": f\"Could not connect to camera, check camera connection, power, IP Address\\n\\n{e}\"}}), __qos__)\n ",
"name": "snapshot",
"trigger": "measure_event",
"topic": "v1/devices/me/telemetry",
@@ -298,7 +298,7 @@
},
{
"key": "port",
"value": "3563",
"value": "80",
"_id": "0003689cb025b0da"
},
{

View File

@@ -1,37 +1,89 @@
import json, time, requests, base64
from common.Logger import logger
from quickfaas.remotebus import publish
from quickfaas.global_dict import get as get_params
import base64
import json
import logging
import time
from datetime import datetime as dt
import requests
from requests.adapters import HTTPAdapter, Retry
from requests.auth import HTTPDigestAuth, HTTPBasicAuth
from requests.auth import HTTPDigestAuth
from requests.exceptions import ConnectionError
from common.Logger import logger # your custom logger
from quickfaas.global_dict import get as get_params
from quickfaas.remotebus import publish
def convertDStoJSON(ds):
j = dict()
for x in ds:
j[x["key"]] = x["value"]
return j
"""Convert the list of key/value dicts returned by get_params()
into a single dictionary."""
return {x["key"]: x["value"] for x in ds}
def _payload_too_big(payload, max_bytes=65535):
"""Return True if the UTF8 encoded payload is larger than max_bytes."""
return len(payload.encode("utf-8")) > max_bytes
def getImage():
# Grab configuration
params = convertDStoJSON(get_params())
camera_ip = params["camera_ip"].replace("_", ".")
port = params["port"]
with open('./snapshot.jpg', 'wb') as handle:
with requests.Session() as s:
retries = Retry(total = 10, backoff_factor=0.1, status_forcelist=[404,408, 500, 502, 503, 504])
s.mount('http://', HTTPAdapter(max_retries=retries))
resp = s.get("http://" + camera_ip + ":" + port + "/cgi-bin/jpg/image.cgi?stream=stream3", auth=HTTPBasicAuth("ASS", "amerus@1903"), stream=True)
# Build the URL and auth
url = f"http://{camera_ip}:{port}/cgi-bin/jpg/image.cgi?stream=stream3"
auth = HTTPDigestAuth("ASS", "amerus@1903")
# Retry policy (10 attempts, backoff 0.1s)
retry_strategy = Retry(
total=10,
backoff_factor=0.1,
status_forcelist=[404, 408, 500, 502, 503, 504],
)
adapter = HTTPAdapter(max_retries=retry_strategy)
with requests.Session() as session:
session.mount("http://", adapter)
# Grab the JPEG as a streaming response
resp = session.get(url, auth=auth, stream=True)
resp.raise_for_status()
# Write the stream to disk (optional keeps your code close to the original)
with open("./snapshot.jpg", "wb") as fh:
for block in resp.iter_content(1024):
if not block:
break
handle.write(block)
fh.write(block)
with open('./snapshot.jpg', 'rb') as image_file:
encoded_string = base64.b64encode(image_file.read())
publish(__topic__, json.dumps({"ts": (round(dt.timestamp(dt.now())/600)*600)*1000, "values":{"snapshot": encoded_string.decode("UTF-8"), "camera_error": "OK"}}), __qos__)
# Read the file we just wrote and base64encode it
with open("./snapshot.jpg", "rb") as fh:
encoded_string = base64.b64encode(fh.read()).decode("utf-8")
# Build the payload
timestamp_ms = int(round(dt.timestamp(dt.now()) / 600) * 600 * 1000)
snapshot_dt = dt.fromtimestamp(timestamp_ms/1000).strftime("%Y %m %d %H:%M")
payload = json.dumps(
{
"ts": timestamp_ms,
"values": {
"snapshot": encoded_string,
"snapshotDT": snapshot_dt,
"camera_error": "OK",
},
},
separators=(",", ":"), # tighter JSON saves a few bytes
)
# Guard against oversized payloads
if _payload_too_big(payload):
logger.warning(
"Payload size (%d bytes) exceeds %d bytes message not sent.",
len(payload.encode("utf-8")),
65535,
)
return # do not publish
publish(__topic__, payload, __qos__)
logger.info("Published snapshot of size %d bytes", len(payload.encode("utf-8")))
def sendSnapshot(message, wizard_api):
@@ -39,11 +91,24 @@ def sendSnapshot(message,wizard_api):
try:
getImage()
except ConnectionError as ce:
logger.error("Could not connect to Camera")
logger.error(ce)
publish(__topic__, json.dumps({"ts": (round(dt.timestamp(dt.now())/600)*600)*1000, "values":{"camera_error": f"Could not connect to camera (ConnectionError), check camera connection and power\n\n{ce}"}}), __qos__)
logger.error("Could not connect to camera")
logger.exception(ce)
error_msg = f"Could not connect to camera (ConnectionError), check camera connection and power\n\n{ce}"
_publish_error(error_msg)
except Exception as e:
logger.error("Could not get image")
logger.error(e)
publish(__topic__, json.dumps({"ts": (round(dt.timestamp(dt.now())/600)*600)*1000, "values":{"camera_error": f"Could not connect to camera, check camera connection, power, IP Address\n\n{e}"}}), __qos__)
logger.exception(e)
error_msg = f"Could not connect to camera, check camera connection, power, IP Address\n\n{e}"
_publish_error(error_msg)
def _publish_error(error_msg):
"""Utility that logs the error and publishes it to the broker."""
payload = json.dumps(
{
"ts": int(round(dt.timestamp(dt.now()) / 600) * 600 * 1000),
"values": {"camera_error": error_msg},
},
separators=(",", ":"),
)
publish(__topic__, payload, __qos__)

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,10 @@
MeasuringPointName,ControllerName,GroupName,UploadType,DeadZonePercent,DataType,ArrayIndex,EnableBit,BitIndex,reverseBit,Address,Decimal,Len,ReadWrite,Unit,Description,Transform Type,MaxValue,MinValue,MaxScale,MinScale,Gain,Offset,startBit,endBit,Pt,Ct,Mapping_table,TransDecimal,bitMap,msecSample,storageLwTSDB,DataEndianReverse,ReadOffset,ReadLength,WriteOffset,WriteLength,DataParseMethod,BitId
frequency,drive,default,periodic,,INT,,0,,,4X0785,,,ro,,,zoom,,,,,0.01,0.0,,,,,,2,,0,0,,,,,,,
current,drive,default,periodic,,INT,,0,,,4X0784,,,ro,,,zoom,,,,,0.1,0.0,,,,,,2,,0,0,,,,,,,
pid_ref,drive,default,periodic,,INT,,0,,,4X0792,,,ro,,,zoom,,,,,0.1,0.0,,,,,,2,,0,0,,,,,,,
pid_feedback,drive,default,periodic,,INT,,0,,,4X0793,,,ro,,,zoom,,,,,0.1,0.0,,,,,,2,,0,0,,,,,,,
motor_rated_current,drive,default,periodic,,INT,,0,,,4X4897,,,ro,,,zoom,,,,,0.1,0.0,,,,,,2,,0,0,,,,,,,
sleep_delay,drive,default,periodic,,INT,,0,,,4X4925,,,ro,,,zoom,,,,,0.1,0.0,,,,,,2,,0,0,,,,,,,
run_status,drive,default,periodic,,INT,,0,,,4X0773,,,ro,,,none,,,,,,,,,,,,,,0,0,,,,,,,
fault_a,drive,default,periodic,,INT,,0,,,4X0816,,,ro,,,none,,,,,,,,,,,,,,0,0,,,,,,,
fault_b,drive,default,periodic,,INT,,0,,,4X0817,,,ro,,,none,,,,,,,,,,,,,,0,0,,,,,,,
1 MeasuringPointName ControllerName GroupName UploadType DeadZonePercent DataType ArrayIndex EnableBit BitIndex reverseBit Address Decimal Len ReadWrite Unit Description Transform Type MaxValue MinValue MaxScale MinScale Gain Offset startBit endBit Pt Ct Mapping_table TransDecimal bitMap msecSample storageLwTSDB DataEndianReverse ReadOffset ReadLength WriteOffset WriteLength DataParseMethod BitId
2 frequency drive default periodic INT 0 4X0785 ro zoom 0.01 0.0 2 0 0
3 current drive default periodic INT 0 4X0784 ro zoom 0.1 0.0 2 0 0
4 pid_ref drive default periodic INT 0 4X0792 ro zoom 0.1 0.0 2 0 0
5 pid_feedback drive default periodic INT 0 4X0793 ro zoom 0.1 0.0 2 0 0
6 motor_rated_current drive default periodic INT 0 4X4897 ro zoom 0.1 0.0 2 0 0
7 sleep_delay drive default periodic INT 0 4X4925 ro zoom 0.1 0.0 2 0 0
8 run_status drive default periodic INT 0 4X0773 ro none 0 0
9 fault_a drive default periodic INT 0 4X0816 ro none 0 0
10 fault_b drive default periodic INT 0 4X0817 ro none 0 0

View File

@@ -0,0 +1,13 @@
MeasuringPointName,ControllerName,GroupName,UploadType,DeadZonePercent,DataType,ArrayIndex,EnableBit,BitIndex,reverseBit,Address,Decimal,Len,ReadWrite,Unit,Description,Transform Type,MaxValue,MinValue,MaxScale,MinScale,Gain,Offset,startBit,endBit,Pt,Ct,Mapping_table,TransDecimal,bitMap,msecSample,storageLwTSDB,DataEndianReverse,ReadOffset,ReadLength,WriteOffset,WriteLength,DataParseMethod,BitId
volume_flow,flowmeter,default,periodic,,FLOAT,,,,,4X3874,2,,ro,,,none,,,,,,,,,,,,,,0,0,,,,,,,
totalizer_1,flowmeter,default,periodic,,FLOAT,,,,,4X2610,2,,ro,,,none,,,,,,,,,,,,,,0,0,,,,,,,
totalizer_2,flowmeter,default,periodic,,FLOAT,,,,,4X2810,2,,ro,,,none,,,,,,,,,,,,,,0,0,,,,,,,
totalizer_3,flowmeter,default,periodic,,FLOAT,,,,,4X3010,2,,ro,,,none,,,,,,,,,,,,,,0,0,,,,,,,
flow_unit,flowmeter,default,periodic,,INT,,0,,,4X2103,,,ro,,,none,,,,,,,,,,,,,,0,0,,,,,,,
totalizer_1_units,flowmeter,default,periodic,,INT,,0,,,4X4604,,,ro,,,none,,,,,,,,,,,,,,0,0,,,,,,,
totalizer_2_units,flowmeter,default,periodic,,INT,,0,,,4X4605,,,ro,,,none,,,,,,,,,,,,,,0,0,,,,,,,
totalizer_3_units,flowmeter,default,periodic,,INT,,0,,,4X4606,,,ro,,,none,,,,,,,,,,,,,,0,0,,,,,,,
reset_totalizers,flowmeter,,never,,INT,,0,,,4X2609,,,rw,,,none,,,,,,,,,,,,,,0,,,,,,,,
byte_order,flowmeter,default,onChange,0,INT,,0,,,4X4915,,,rw,,,none,,,,,,,,,,,,,,0,0,,,,,,,
device_name,flowmeter,default,onChange,,STRING,,,,,4X7238,,14,ro,,,none,,,,,,,,,,,,,,0,0,,,,,,,
serial_number,flowmeter,default,onChange,,STRING,,,,,4X7003,,12,ro,,,none,,,,,,,,,,,,,,0,0,,,,,,,
1 MeasuringPointName ControllerName GroupName UploadType DeadZonePercent DataType ArrayIndex EnableBit BitIndex reverseBit Address Decimal Len ReadWrite Unit Description Transform Type MaxValue MinValue MaxScale MinScale Gain Offset startBit endBit Pt Ct Mapping_table TransDecimal bitMap msecSample storageLwTSDB DataEndianReverse ReadOffset ReadLength WriteOffset WriteLength DataParseMethod BitId
2 volume_flow flowmeter default periodic FLOAT 4X3874 2 ro none 0 0
3 totalizer_1 flowmeter default periodic FLOAT 4X2610 2 ro none 0 0
4 totalizer_2 flowmeter default periodic FLOAT 4X2810 2 ro none 0 0
5 totalizer_3 flowmeter default periodic FLOAT 4X3010 2 ro none 0 0
6 flow_unit flowmeter default periodic INT 0 4X2103 ro none 0 0
7 totalizer_1_units flowmeter default periodic INT 0 4X4604 ro none 0 0
8 totalizer_2_units flowmeter default periodic INT 0 4X4605 ro none 0 0
9 totalizer_3_units flowmeter default periodic INT 0 4X4606 ro none 0 0
10 reset_totalizers flowmeter never INT 0 4X2609 rw none 0
11 byte_order flowmeter default onChange 0 INT 0 4X4915 rw none 0 0
12 device_name flowmeter default onChange STRING 4X7238 14 ro none 0 0
13 serial_number flowmeter default onChange STRING 4X7003 12 ro none 0 0

File diff suppressed because one or more lines are too long

View File

@@ -98,8 +98,14 @@ def sendData(message):
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"]:
elif measure["name"] in ["totalizer_1_units", "totalizer_2_units", "totalizer_3_units", "flow_unit"]:
payload["values"][measure["name"]] = convert_int(measure["name"], measure["value"])
elif measure["name"] in ["run_status"]:
payload["values"][measure["name"]] = status_codes(measure["value"])
elif measure["name"] in [ "fault_a"]:
payload["values"][measure["name"]] = fault_code_a(measure["value"])
elif measure["name"] in ["fault_b"]:
payload["values"][measure["name"]] = fault_code_b(measure["value"])
else:
payload["values"][measure["name"]] = measure["value"]
except Exception as e:
@@ -293,34 +299,154 @@ def totalizeYear(lifetime, totalizer, max_retries=3, retry_delay=2):
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",
def int_to_bits(n,x):
return pad_to_x([int(digit) for digit in bin(n)[2:]],x) # [2:] to chop off the "0b" part
def pad_to_x(n,x):
while len(n) < x:
n = [0] + n
return n
def status_codes(n):
status_array = int_to_bits(n,16)
status_low = {
0: "Stopped;",
1: "Operating in Forward;",
2: "Operating in Reverse;",
3: "DC operating;"
}
status_mid = {
0: "",
1: "Speed searching;",
2: "Accelerating;",
3: "At constant speed;",
4: "Decelerating;",
5: "Decelerating to stop;",
6: "H/W OCS;",
7: "S/W OCS;",
8: "Dwell operating;"
}
status_high = {
0: "Normal state",
4: "Warning occurred",
8: "Fault occurred"
}
values = {
0: 8,
1: 4,
2: 2,
3: 1
}
# 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)
stats_low = status_array[12:]
stats_mid = status_array[8:12]
stats_high = status_array[:4]
low = 0
mid = 0
high = 0
for x in range(4):
if stats_low[x] == 1:
low = low + values[x]
if stats_mid[x] == 1:
mid = mid + values[x]
if stats_high[x] == 1:
high = high + values[x]
return status_low[low] + " " + status_mid[mid] + ' ' + status_high[high]
def fault_code_a(n):
fault_code_array = int_to_bits(n,16)
""" fault = {
0: "OCT",
1: "OVT",
2: "EXT-A",
3: "EST",
4: "COL",
5: "GFT",
6: "OHT",
7: "ETH",
8: "OLT",
9: "Reserved",
10: "EXT-B",
11: "EEP",
12: "FAN",
13: "POT",
14: "IOLT",
15: "LVT"
} """
fault = {
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"
}
faults = []
counter = 15
for x in range(16):
if fault_code_array[x] == 1:
faults = [fault[counter]] + faults
counter = counter - 1
return ' '.join(faults)
def fault_code_b(n):
fault_code_array = int_to_bits(n,8)
""" fault = {
0: "COM",
1: "Reserved",
2: "NTC",
3: "REEP",
4: "OC2",
5: "NBR",
6: "SAFA",
7: "SAFB"
} """
fault = {
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"
}
faults = []
counter = 7
for x in range(8):
if fault_code_array[x] == 1:
faults = [fault[counter]] + faults
counter = counter - 1
return ' '.join(faults)
return ", ".join(active_bits)
def convert_int(measure, value):
@@ -458,42 +584,6 @@ def convert_int(measure, value):
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 = {
@@ -501,9 +591,6 @@ def convert_int(measure, value):
"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")

View File

@@ -0,0 +1,914 @@
{
"_IO_EM_DO_00": {
"tag_name": "_IO_EM_DO_00",
"dim": 0,
"alias": true,
"instance_id": 1,
"symbol_address": 1044,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"_IO_EM_DO_01": {
"tag_name": "_IO_EM_DO_01",
"dim": 0,
"alias": true,
"instance_id": 2,
"symbol_address": 1045,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"_IO_EM_DO_02": {
"tag_name": "_IO_EM_DO_02",
"dim": 0,
"alias": true,
"instance_id": 3,
"symbol_address": 1046,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"_IO_EM_DO_03": {
"tag_name": "_IO_EM_DO_03",
"dim": 0,
"alias": true,
"instance_id": 4,
"symbol_address": 1047,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"_IO_EM_DO_04": {
"tag_name": "_IO_EM_DO_04",
"dim": 0,
"alias": true,
"instance_id": 5,
"symbol_address": 1048,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"_IO_EM_DO_05": {
"tag_name": "_IO_EM_DO_05",
"dim": 0,
"alias": true,
"instance_id": 6,
"symbol_address": 1049,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"_IO_EM_DO_06": {
"tag_name": "_IO_EM_DO_06",
"dim": 0,
"alias": true,
"instance_id": 7,
"symbol_address": 1050,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"_IO_EM_DI_00": {
"tag_name": "_IO_EM_DI_00",
"dim": 0,
"alias": true,
"instance_id": 8,
"symbol_address": 1051,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"_IO_EM_DI_01": {
"tag_name": "_IO_EM_DI_01",
"dim": 0,
"alias": true,
"instance_id": 9,
"symbol_address": 1052,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"_IO_EM_DI_02": {
"tag_name": "_IO_EM_DI_02",
"dim": 0,
"alias": true,
"instance_id": 10,
"symbol_address": 1053,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"_IO_EM_DI_03": {
"tag_name": "_IO_EM_DI_03",
"dim": 0,
"alias": true,
"instance_id": 11,
"symbol_address": 1054,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"_IO_EM_DI_04": {
"tag_name": "_IO_EM_DI_04",
"dim": 0,
"alias": true,
"instance_id": 12,
"symbol_address": 1055,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"_IO_EM_DI_05": {
"tag_name": "_IO_EM_DI_05",
"dim": 0,
"alias": true,
"instance_id": 13,
"symbol_address": 1056,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"_IO_EM_DI_06": {
"tag_name": "_IO_EM_DI_06",
"dim": 0,
"alias": true,
"instance_id": 14,
"symbol_address": 1057,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"_IO_EM_DI_07": {
"tag_name": "_IO_EM_DI_07",
"dim": 0,
"alias": true,
"instance_id": 15,
"symbol_address": 1058,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"_IO_EM_DI_08": {
"tag_name": "_IO_EM_DI_08",
"dim": 0,
"alias": true,
"instance_id": 16,
"symbol_address": 1059,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"_IO_EM_DI_09": {
"tag_name": "_IO_EM_DI_09",
"dim": 0,
"alias": true,
"instance_id": 17,
"symbol_address": 1060,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"_IO_EM_DI_10": {
"tag_name": "_IO_EM_DI_10",
"dim": 0,
"alias": true,
"instance_id": 18,
"symbol_address": 1061,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"_IO_EM_DI_11": {
"tag_name": "_IO_EM_DI_11",
"dim": 0,
"alias": true,
"instance_id": 19,
"symbol_address": 1062,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"_IO_EM_AI_00": {
"tag_name": "_IO_EM_AI_00",
"dim": 0,
"alias": true,
"instance_id": 20,
"symbol_address": 1064,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "UINT",
"data_type_name": "UINT",
"tag_type": "atomic"
},
"_IO_EM_AI_01": {
"tag_name": "_IO_EM_AI_01",
"dim": 0,
"alias": true,
"instance_id": 21,
"symbol_address": 1066,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "UINT",
"data_type_name": "UINT",
"tag_type": "atomic"
},
"_IO_EM_AI_02": {
"tag_name": "_IO_EM_AI_02",
"dim": 0,
"alias": true,
"instance_id": 22,
"symbol_address": 1068,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "UINT",
"data_type_name": "UINT",
"tag_type": "atomic"
},
"_IO_EM_AI_03": {
"tag_name": "_IO_EM_AI_03",
"dim": 0,
"alias": true,
"instance_id": 23,
"symbol_address": 1070,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "UINT",
"data_type_name": "UINT",
"tag_type": "atomic"
},
"_IO_EM_AO_00": {
"tag_name": "_IO_EM_AO_00",
"dim": 0,
"alias": true,
"instance_id": 24,
"symbol_address": 1072,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "UINT",
"data_type_name": "UINT",
"tag_type": "atomic"
},
"_IO_P1_AI_00": {
"tag_name": "_IO_P1_AI_00",
"dim": 0,
"alias": true,
"instance_id": 25,
"symbol_address": 1074,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "UINT",
"data_type_name": "UINT",
"tag_type": "atomic"
},
"_IO_P1_AI_01": {
"tag_name": "_IO_P1_AI_01",
"dim": 0,
"alias": true,
"instance_id": 26,
"symbol_address": 1076,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "UINT",
"data_type_name": "UINT",
"tag_type": "atomic"
},
"WaterTx_HHAlrm": {
"tag_name": "WaterTx_HHAlrm",
"dim": 0,
"alias": true,
"instance_id": 27,
"symbol_address": 1116,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"WaterTx_HHTrip": {
"tag_name": "WaterTx_HHTrip",
"dim": 0,
"alias": true,
"instance_id": 28,
"symbol_address": 1117,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"WaterTx_HHRst": {
"tag_name": "WaterTx_HHRst",
"dim": 0,
"alias": true,
"instance_id": 29,
"symbol_address": 1118,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"OilTx_HHTrip": {
"tag_name": "OilTx_HHTrip",
"dim": 0,
"alias": true,
"instance_id": 30,
"symbol_address": 1119,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"OilTx_HHRst": {
"tag_name": "OilTx_HHRst",
"dim": 0,
"alias": true,
"instance_id": 31,
"symbol_address": 1120,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"OilTx_HHAlrm": {
"tag_name": "OilTx_HHAlrm",
"dim": 0,
"alias": true,
"instance_id": 32,
"symbol_address": 1121,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"Reset": {
"tag_name": "Reset",
"dim": 0,
"alias": true,
"instance_id": 33,
"symbol_address": 1122,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"WaterTx_HTrip": {
"tag_name": "WaterTx_HTrip",
"dim": 0,
"alias": true,
"instance_id": 34,
"symbol_address": 1123,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"WaterTx_HAlrm": {
"tag_name": "WaterTx_HAlrm",
"dim": 0,
"alias": true,
"instance_id": 35,
"symbol_address": 1124,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"OilTx_HTrip": {
"tag_name": "OilTx_HTrip",
"dim": 0,
"alias": true,
"instance_id": 36,
"symbol_address": 1125,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"OilTx_HAlrm": {
"tag_name": "OilTx_HAlrm",
"dim": 0,
"alias": true,
"instance_id": 37,
"symbol_address": 1126,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "BOOL",
"data_type_name": "BOOL",
"bit_position": 0,
"tag_type": "atomic"
},
"WaterTxLevel": {
"tag_name": "WaterTxLevel",
"dim": 0,
"alias": true,
"instance_id": 38,
"symbol_address": 1132,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "REAL",
"data_type_name": "REAL",
"tag_type": "atomic"
},
"OilTxLevel": {
"tag_name": "OilTxLevel",
"dim": 0,
"alias": true,
"instance_id": 39,
"symbol_address": 1136,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "REAL",
"data_type_name": "REAL",
"tag_type": "atomic"
},
"WaterTx_HHSP": {
"tag_name": "WaterTx_HHSP",
"dim": 0,
"alias": true,
"instance_id": 40,
"symbol_address": 1140,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "REAL",
"data_type_name": "REAL",
"tag_type": "atomic"
},
"WaterTx_HHRstSp": {
"tag_name": "WaterTx_HHRstSp",
"dim": 0,
"alias": true,
"instance_id": 41,
"symbol_address": 1144,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "REAL",
"data_type_name": "REAL",
"tag_type": "atomic"
},
"OilTx_HHSP": {
"tag_name": "OilTx_HHSP",
"dim": 0,
"alias": true,
"instance_id": 42,
"symbol_address": 1148,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "REAL",
"data_type_name": "REAL",
"tag_type": "atomic"
},
"OilTx_HHRstSp": {
"tag_name": "OilTx_HHRstSp",
"dim": 0,
"alias": true,
"instance_id": 43,
"symbol_address": 1152,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "REAL",
"data_type_name": "REAL",
"tag_type": "atomic"
},
"WaterTx_HSp": {
"tag_name": "WaterTx_HSp",
"dim": 0,
"alias": true,
"instance_id": 44,
"symbol_address": 1156,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "REAL",
"data_type_name": "REAL",
"tag_type": "atomic"
},
"WaterTx_HRstSp": {
"tag_name": "WaterTx_HRstSp",
"dim": 0,
"alias": true,
"instance_id": 45,
"symbol_address": 1160,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "REAL",
"data_type_name": "REAL",
"tag_type": "atomic"
},
"OilTx_HSp": {
"tag_name": "OilTx_HSp",
"dim": 0,
"alias": true,
"instance_id": 46,
"symbol_address": 1164,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "REAL",
"data_type_name": "REAL",
"tag_type": "atomic"
},
"OilTx_HRstSp": {
"tag_name": "OilTx_HRstSp",
"dim": 0,
"alias": true,
"instance_id": 47,
"symbol_address": 1168,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "REAL",
"data_type_name": "REAL",
"tag_type": "atomic"
},
"OilScaler": {
"tag_name": "OilScaler",
"dim": 0,
"alias": true,
"instance_id": 48,
"symbol_address": 1172,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "REAL",
"data_type_name": "REAL",
"tag_type": "atomic"
},
"WaterScaler": {
"tag_name": "WaterScaler",
"dim": 0,
"alias": true,
"instance_id": 49,
"symbol_address": 1176,
"symbol_object_address": 1077540072,
"software_control": 0,
"external_access": "Unknown",
"dimensions": [
0,
0,
0
],
"data_type": "REAL",
"data_type_name": "REAL",
"tag_type": "atomic"
}
}

View File

@@ -0,0 +1,24 @@
MeasuringPointName,ControllerName,GroupName,UploadType,DeadZoneType,DeadZonePercent,DataType,ArrayIndex,EnableBit,BitIndex,reverseBit,Address,Decimal,Len,CodeType,ReadWrite,Unit,Description,Transform Type,MaxValue,MinValue,MaxScale,MinScale,Gain,Offset,startBit,endBit,Pt,Ct,Mapping_table,TransDecimal,bitMap,msecSample,storageLwTSDB,DataEndianReverse,ReadOffset,ReadLength,WriteOffset,WriteLength,DataParseMethod,BitId,pollCycle,EnableRequestCount,RequestCount,byteOrder
alarmreset,tankalarms,default,periodic,,,BIT,,,,0,Reset,,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,,0,0,,
oil_batt_lolo_alm,tankalarms,default,periodic,,,BIT,,,,0,OilTxBatVolts_LLAlrm,,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,,0,0,,
oil_batt_volts,tankalarms,default,periodic,,,FLOAT,,,,,OilTxBatVolts,2,,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,,0,0,,
oil_comm_fail_alm,tankalarms,default,periodic,,,BIT,,,,0,OilTx_RF_CommFail,,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,,0,0,,
oil_hi_alm,tankalarms,default,periodic,,,BIT,,,,0,OilTx_HAlrm,,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,,0,0,,
oil_hi_reset_spt,tankalarms,default,periodic,,,FLOAT,,,,,OilTx_HRstSp,2,,,rw,,,none,,,,,,,,,,,,,,,0,,,,,,,,0,0,,
oil_hi_spt,tankalarms,default,periodic,,,FLOAT,,,,,OilTx_HSp,2,,,rw,,,none,,,,,,,,,,,,,,,0,,,,,,,,0,0,,
oil_hihi_alm,tankalarms,default,periodic,,,BIT,,,,0,OilTx_HHAlrm,,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,,0,0,,
oil_hihi_reset_spt,tankalarms,default,periodic,,,FLOAT,,,,,OilTx_HHRstSp,2,,,rw,,,none,,,,,,,,,,,,,,,0,,,,,,,,0,0,,
oil_hihi_spt,tankalarms,default,periodic,,,FLOAT,,,,,OilTx_HHSP,2,,,rw,,,none,,,,,,,,,,,,,,,0,,,,,,,,0,0,,
oil_level,tankalarms,default,periodic,,,FLOAT,,,,,OilTxLevel,2,,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,,0,0,,
oil_rssi,tankalarms,default,periodic,,,FLOAT,,,,,OilTxRSSI,2,,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,,0,0,,
water_batt_lolo_alm,tankalarms,default,periodic,,,BIT,,,,0,WaterTxBatVolts_LLAlrm,,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,,0,0,,
water_batt_volts,tankalarms,default,periodic,,,FLOAT,,,,,WaterTxBatVolts,2,,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,,0,0,,
water_comm_fail_alm,tankalarms,default,periodic,,,BIT,,,,0,WaterTx_RF_CommFail,,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,,0,0,,
water_hi_alm,tankalarms,default,periodic,,,BIT,,,,0,WaterTx_HAlrm,,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,,0,0,,
water_hi_reset_spt,tankalarms,default,periodic,,,FLOAT,,,,,WaterTx_HRstSp,2,,,rw,,,none,,,,,,,,,,,,,,,0,,,,,,,,0,0,,
water_hi_spt,tankalarms,default,periodic,,,FLOAT,,,,,WaterTx_HSp,2,,,rw,,,none,,,,,,,,,,,,,,,0,,,,,,,,0,0,,
water_hihi_alm,tankalarms,default,periodic,,,BIT,,,,0,WaterTx_HHAlrm,,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,,0,0,,
water_hihi_reset_spt,tankalarms,default,periodic,,,FLOAT,,,,,WaterTx_HHRstSp,2,,,rw,,,none,,,,,,,,,,,,,,,0,,,,,,,,0,0,,
water_hihi_spt,tankalarms,default,periodic,,,FLOAT,,,,,WaterTx_HHSP,2,,,rw,,,none,,,,,,,,,,,,,,,0,,,,,,,,0,0,,
water_level,tankalarms,default,periodic,,,FLOAT,,,,,WaterTxLevel,2,,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,,0,0,,
water_rssi,tankalarms,default,periodic,,,FLOAT,,,,,WaterTxRSSI,2,,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,,0,0,,
1 MeasuringPointName ControllerName GroupName UploadType DeadZoneType DeadZonePercent DataType ArrayIndex EnableBit BitIndex reverseBit Address Decimal Len CodeType ReadWrite Unit Description Transform Type MaxValue MinValue MaxScale MinScale Gain Offset startBit endBit Pt Ct Mapping_table TransDecimal bitMap msecSample storageLwTSDB DataEndianReverse ReadOffset ReadLength WriteOffset WriteLength DataParseMethod BitId pollCycle EnableRequestCount RequestCount byteOrder
2 alarmreset tankalarms default periodic BIT 0 Reset rw none 0 0 0 0
3 oil_batt_lolo_alm tankalarms default periodic BIT 0 OilTxBatVolts_LLAlrm ro none 0 0 0 0
4 oil_batt_volts tankalarms default periodic FLOAT OilTxBatVolts 2 ro none 0 0 0
5 oil_comm_fail_alm tankalarms default periodic BIT 0 OilTx_RF_CommFail ro none 0 0 0 0
6 oil_hi_alm tankalarms default periodic BIT 0 OilTx_HAlrm ro none 0 0 0 0
7 oil_hi_reset_spt tankalarms default periodic FLOAT OilTx_HRstSp 2 rw none 0 0 0
8 oil_hi_spt tankalarms default periodic FLOAT OilTx_HSp 2 rw none 0 0 0
9 oil_hihi_alm tankalarms default periodic BIT 0 OilTx_HHAlrm ro none 0 0 0 0
10 oil_hihi_reset_spt tankalarms default periodic FLOAT OilTx_HHRstSp 2 rw none 0 0 0
11 oil_hihi_spt tankalarms default periodic FLOAT OilTx_HHSP 2 rw none 0 0 0
12 oil_level tankalarms default periodic FLOAT OilTxLevel 2 ro none 0 0 0
13 oil_rssi tankalarms default periodic FLOAT OilTxRSSI 2 ro none 0 0 0
14 water_batt_lolo_alm tankalarms default periodic BIT 0 WaterTxBatVolts_LLAlrm ro none 0 0 0 0
15 water_batt_volts tankalarms default periodic FLOAT WaterTxBatVolts 2 ro none 0 0 0
16 water_comm_fail_alm tankalarms default periodic BIT 0 WaterTx_RF_CommFail ro none 0 0 0 0
17 water_hi_alm tankalarms default periodic BIT 0 WaterTx_HAlrm ro none 0 0 0 0
18 water_hi_reset_spt tankalarms default periodic FLOAT WaterTx_HRstSp 2 rw none 0 0 0
19 water_hi_spt tankalarms default periodic FLOAT WaterTx_HSp 2 rw none 0 0 0
20 water_hihi_alm tankalarms default periodic BIT 0 WaterTx_HHAlrm ro none 0 0 0 0
21 water_hihi_reset_spt tankalarms default periodic FLOAT WaterTx_HHRstSp 2 rw none 0 0 0
22 water_hihi_spt tankalarms default periodic FLOAT WaterTx_HHSP 2 rw none 0 0 0
23 water_level tankalarms default periodic FLOAT WaterTxLevel 2 ro none 0 0 0
24 water_rssi tankalarms default periodic FLOAT WaterTxRSSI 2 ro none 0 0 0

View File

@@ -0,0 +1,9 @@
MeasuringPointName,ControllerName,GroupName,UploadType,DeadZoneType,DeadZonePercent,DataType,ArrayIndex,EnableBit,BitIndex,reverseBit,Address,Decimal,Len,CodeType,ReadWrite,Unit,Description,Transform Type,MaxValue,MinValue,MaxScale,MinScale,Gain,Offset,startBit,endBit,Pt,Ct,Mapping_table,TransDecimal,bitMap,msecSample,storageLwTSDB,DataEndianReverse,ReadOffset,ReadLength,WriteOffset,WriteLength,DataParseMethod,BitId,pollCycle,EnableRequestCount,RequestCount,byteOrder
open_spt,valvecontroller,default,periodic,,,FLOAT,,,,,Open_Setpoint,1,,,rw,,,none,,,,,,,,,,,,,,,0,,,,,,,,0,0,,
close_spt,valvecontroller,default,periodic,,,FLOAT,,,,,Close_Setpoint,1,,,rw,,,none,,,,,,,,,,,,,,,0,,,,,,,,0,0,,
open_cmd,valvecontroller,default,periodic,,,BIT,,,,0,Open_Valve_Cmd,,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,,0,0,,
close_cmd,valvecontroller,default,periodic,,,BIT,,,,0,Close_Valve_Cmd,,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,,0,0,,
tank_level,valvecontroller,default,periodic,,,FLOAT,,,,,Scaled_Tank_Lev,1,,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,,0,0,,
valve_open_status,valvecontroller,default,periodic,,,BIT,,,,0,Valve_Open_Status,,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,,0,0,,
valve_close_status,valvecontroller,default,periodic,,,BIT,,,,0,Valve_Closed_Status,,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,,0,0,,
valve_failure,valvecontroller,default,periodic,,,BIT,,,,0,Valve_Fail,,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,,0,0,,
1 MeasuringPointName ControllerName GroupName UploadType DeadZoneType DeadZonePercent DataType ArrayIndex EnableBit BitIndex reverseBit Address Decimal Len CodeType ReadWrite Unit Description Transform Type MaxValue MinValue MaxScale MinScale Gain Offset startBit endBit Pt Ct Mapping_table TransDecimal bitMap msecSample storageLwTSDB DataEndianReverse ReadOffset ReadLength WriteOffset WriteLength DataParseMethod BitId pollCycle EnableRequestCount RequestCount byteOrder
2 open_spt valvecontroller default periodic FLOAT Open_Setpoint 1 rw none 0 0 0
3 close_spt valvecontroller default periodic FLOAT Close_Setpoint 1 rw none 0 0 0
4 open_cmd valvecontroller default periodic BIT 0 Open_Valve_Cmd rw none 0 0 0 0
5 close_cmd valvecontroller default periodic BIT 0 Close_Valve_Cmd rw none 0 0 0 0
6 tank_level valvecontroller default periodic FLOAT Scaled_Tank_Lev 1 ro none 0 0 0
7 valve_open_status valvecontroller default periodic BIT 0 Valve_Open_Status ro none 0 0 0 0
8 valve_close_status valvecontroller default periodic BIT 0 Valve_Closed_Status ro none 0 0 0 0
9 valve_failure valvecontroller default periodic BIT 0 Valve_Fail ro none 0 0 0 0