diff --git a/.DS_Store b/.DS_Store index f2bc1ad..96fcfa7 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/Device_Supervisor-V2.2.1.tar.gz b/IG502 Edge Compute/Device_Supervisor-V2.2.1.tar.gz similarity index 100% rename from Device_Supervisor-V2.2.1.tar.gz rename to IG502 Edge Compute/Device_Supervisor-V2.2.1.tar.gz diff --git a/device_supervisor-V2.0.1.tar.gz b/IG502 Edge Compute/device_supervisor-V2.0.1.tar.gz similarity index 100% rename from device_supervisor-V2.0.1.tar.gz rename to IG502 Edge Compute/device_supervisor-V2.0.1.tar.gz diff --git a/device_supervisor-V2.1.1.tar.gz b/IG502 Edge Compute/device_supervisor-V2.1.1.tar.gz similarity index 100% rename from device_supervisor-V2.1.1.tar.gz rename to IG502 Edge Compute/device_supervisor-V2.1.1.tar.gz diff --git a/device_supervisor-V2.3.1.tar.gz b/IG502 Edge Compute/device_supervisor-V2.3.1.tar.gz similarity index 100% rename from device_supervisor-V2.3.1.tar.gz rename to IG502 Edge Compute/device_supervisor-V2.3.1.tar.gz diff --git a/IG502 Edge Compute/device_supervisor-V2.7.1.tar.gz b/IG502 Edge Compute/device_supervisor-V2.7.1.tar.gz new file mode 100644 index 0000000..d0caeb2 Binary files /dev/null and b/IG502 Edge Compute/device_supervisor-V2.7.1.tar.gz differ diff --git a/IG502 Edge Compute/py3sdk-V1.4.6_Edge-IG9.zip b/IG502 Edge Compute/py3sdk-V1.4.6_Edge-IG9.zip new file mode 100644 index 0000000..6402451 Binary files /dev/null and b/IG502 Edge Compute/py3sdk-V1.4.6_Edge-IG9.zip differ diff --git a/IG502-V2.0.0.r14208.bin b/IG502 Firmware/IG502-V2.0.0.r14208.bin similarity index 100% rename from IG502-V2.0.0.r14208.bin rename to IG502 Firmware/IG502-V2.0.0.r14208.bin diff --git a/IG502-V2.0.0.r14218.bin b/IG502 Firmware/IG502-V2.0.0.r14218.bin similarity index 100% rename from IG502-V2.0.0.r14218.bin rename to IG502 Firmware/IG502-V2.0.0.r14218.bin diff --git a/IG502 Firmware/IG502-V2.1.4.bin b/IG502 Firmware/IG502-V2.1.4.bin new file mode 100644 index 0000000..0ebbff6 Binary files /dev/null and b/IG502 Firmware/IG502-V2.1.4.bin differ diff --git a/default w reboot.cnf b/InHand IG502 configs/att default w reboot.cnf old mode 100644 new mode 100755 similarity index 96% rename from default w reboot.cnf rename to InHand IG502 configs/att default w reboot.cnf index 2afaae6..e302b1e --- a/default w reboot.cnf +++ b/InHand IG502 configs/att default w reboot.cnf @@ -17,7 +17,7 @@ enable password $1$kvwao0Sc$zzKGmDaqupdkXYaaObwJx/ #aaa config ! #cron config -chronos reboot every day 3 5 +chronos reboot every day 8 5 remote-login retry 20 ! #alarm config @@ -30,7 +30,6 @@ interface loopback 1 #ethernet interface config interface fastethernet 0/1 track l2-state - ip address dhcp ! interface fastethernet 0/2 ! @@ -64,6 +63,7 @@ interface cellular 1 ! #dot11 config interface dot11radio 1 +shutdown ip address dhcp station-role workgroup-bridge radio-type dot11bgn @@ -83,6 +83,9 @@ interface bridge 1 interface fastethernet 0/2 bridge-group 1 ! +interface fastethernet 0/1 + bridge-group 1 +! ! ! #dialer config @@ -177,7 +180,6 @@ sntp-client server 3.pool.ntp.org port 123 #static route config ip route 0.0.0.0 0.0.0.0 cellular 1 253 ip route 0.0.0.0 0.0.0.0 dot11radio 1 250 -ip route 0.0.0.0 0.0.0.0 fastethernet 0/1 255 ! #rip config ! @@ -205,22 +207,18 @@ access-list 192 30 deny tcp any any eq 23 access-list 192 40 deny tcp any any eq 22 access-list 192 50 deny tcp any any eq 53 access-list 192 60 deny udp any any eq 53 -interface cellular 1 +interface fastethernet 0/1 ip nat outside ! interface bridge 1 ip nat inside ! -interface fastethernet 0/1 - ip nat outside -! -interface dot11radio 1 +interface cellular 1 ip nat outside ! ! ip snat inside list 101 interface fastethernet 0/1 ip snat inside list 100 interface cellular 1 -ip snat inside list 102 interface dot11radio 1 ip dnat outside static tcp interface cellular 1 44818 192.168.1.10 44818 description PLC ip dnat outside static tcp interface cellular 1 5900 192.168.1.11 5900 description VNC ! @@ -279,7 +277,7 @@ python appcmd 1 logsize 1 quit ! python app 2 on -python appcmd 2 logsize 1 2 +python appcmd 2 logsize 2 5 device_supervisor quit ! diff --git a/default_inhand_config.cnf b/InHand IG502 configs/verizon default w reboot.cnf old mode 100644 new mode 100755 similarity index 94% rename from default_inhand_config.cnf rename to InHand IG502 configs/verizon default w reboot.cnf index 03b7bac..2196e17 --- a/default_inhand_config.cnf +++ b/InHand IG502 configs/verizon default w reboot.cnf @@ -1,4 +1,6 @@ ! +# product IG502L +! #system config language English hostname EdgeGateway @@ -17,6 +19,7 @@ enable password $1$kvwao0Sc$zzKGmDaqupdkXYaaObwJx/ #aaa config ! #cron config +chronos reboot every day 8 5 remote-login retry 20 ! #alarm config @@ -29,7 +32,6 @@ interface loopback 1 #ethernet interface config interface fastethernet 0/1 track l2-state - ip address dhcp ! interface fastethernet 0/2 ! @@ -50,8 +52,8 @@ cellular 1 sms mode text cellular 1 sms interval 30 ! interface cellular 1 - dialer profile 1 - dialer profile 2 secondary + dialer profile 2 + dialer profile 1 secondary dialer timeout 120 dialer activate auto ip address negotiated @@ -63,6 +65,7 @@ interface cellular 1 ! #dot11 config interface dot11radio 1 + shutdown ip address dhcp station-role workgroup-bridge radio-type dot11bgn @@ -82,6 +85,9 @@ interface bridge 1 interface fastethernet 0/2 bridge-group 1 ! +interface fastethernet 0/1 + bridge-group 1 +! ! ! #dialer config @@ -176,7 +182,6 @@ sntp-client server 3.pool.ntp.org port 123 #static route config ip route 0.0.0.0 0.0.0.0 cellular 1 253 ip route 0.0.0.0 0.0.0.0 dot11radio 1 250 -ip route 0.0.0.0 0.0.0.0 fastethernet 0/1 255 ! #rip config ! @@ -204,9 +209,6 @@ access-list 192 30 deny tcp any any eq 23 access-list 192 40 deny tcp any any eq 22 access-list 192 50 deny tcp any any eq 53 access-list 192 60 deny udp any any eq 53 -interface dot11radio 1 - ip nat outside -! interface fastethernet 0/1 ip nat outside ! @@ -219,7 +221,6 @@ interface cellular 1 ! ip snat inside list 101 interface fastethernet 0/1 ip snat inside list 100 interface cellular 1 -ip snat inside list 102 interface dot11radio 1 ip dnat outside static tcp interface cellular 1 44818 192.168.1.10 44818 description PLC ip dnat outside static tcp interface cellular 1 5900 192.168.1.11 5900 description VNC ! @@ -230,6 +231,8 @@ ip dnat outside static tcp interface cellular 1 5900 192.168.1.11 5900 descripti #tcp mss config ip tcp adjust-mss 1360 ! +! +! #netwatcher config ! ! @@ -269,8 +272,14 @@ serial 2 ! #python config python enable +python log username adm password $AES$BFA541FA10FA3B041CBA4412D12C52B8 python app 1 on python appcmd 1 logsize 1 + +quit +! +python app 2 on +python appcmd 2 logsize 2 5 device_supervisor quit ! diff --git a/Pub_Sub/.DS_Store b/Pub_Sub/.DS_Store index 25068cc..487ba9c 100644 Binary files a/Pub_Sub/.DS_Store and b/Pub_Sub/.DS_Store differ diff --git a/Pub_Sub/advvfdipp/.DS_Store b/Pub_Sub/advvfdipp/.DS_Store index 6236e01..7a2cbf0 100644 Binary files a/Pub_Sub/advvfdipp/.DS_Store and b/Pub_Sub/advvfdipp/.DS_Store differ diff --git a/Pub_Sub/advvfdipp_wo_downhole/advvfdipp_wo_downhole.csv b/Pub_Sub/advvfdipp_wo_downhole/thingsboard/advvfdipp_wo_downhole.csv similarity index 74% rename from Pub_Sub/advvfdipp_wo_downhole/advvfdipp_wo_downhole.csv rename to Pub_Sub/advvfdipp_wo_downhole/thingsboard/advvfdipp_wo_downhole.csv index 9b2ce6c..3b415d6 100644 --- a/Pub_Sub/advvfdipp_wo_downhole/advvfdipp_wo_downhole.csv +++ b/Pub_Sub/advvfdipp_wo_downhole/thingsboard/advvfdipp_wo_downhole.csv @@ -1,32 +1,22 @@ MeasuringPointName,ControllerName,GroupName,UploadType,DataType,Address,Decimal,Len,ReadWrite,Unit,Description,Transform Type,MaxValue,MinValue,MaxScale,MinScale,Gain,Offset,startBit,endBit,bitMap,msecSample -flowrate,advvfdipp,default,periodic,FLOAT,val_Flowmeter,2,,ro,,,none,,,,,,,,,, +flowrate,advvfdipp,default,periodic,FLOAT,val_Flowmeter_BarrelsPerDay,2,,ro,,,none,,,,,,,,,, fluidlevel,advvfdipp,default,periodic,FLOAT,val_FluidLevel,2,,ro,,,none,,,,,,,,,, -intakepressure,advvfdipp,default,periodic,FLOAT,val_IntakePressure,2,,ro,,,none,,,,,,,,,, -intaketemperature,advvfdipp,default,periodic,FLOAT,val_IntakeTemperature,2,,ro,,,none,,,,,,,,,, tubingpressure,advvfdipp,default,periodic,FLOAT,val_TubingPressure,2,,ro,,,none,,,,,,,,,, wellstatus,advvfdipp,default,periodic,INT,Device_Status_INT,,,ro,,,none,,,,,,,,,, vfdfrequency,advvfdipp,default,periodic,FLOAT,VFD_SpeedFdbk,2,,ro,,,none,,,,,,,,,, flowtotal,advvfdipp,default,periodic,FLOAT,Flow_Total[0],2,,ro,,,none,,,,,,,,,, energytotal,advvfdipp,default,periodic,FLOAT,Energy_Total[0],2,,ro,,,none,,,,,,,,,, vfdcurrent,advvfdipp,default,periodic,FLOAT,VFD_OutCurrent,2,,ro,,,none,,,,,,,,,, -downholesensorstatus,advvfdipp,default,periodic,INT,Downhole_Sensor_Status_INT,,,ro,,,none,,,,,,,,,, fluidspecificgravity,advvfdipp,default,periodic,FLOAT,cfg_FluidSpecificGravity,2,,ro,,,none,,,,,,,,,, flowtotalyesterday,advvfdipp,default,periodic,FLOAT,Flow_Total[1],2,,ro,,,none,,,,,,,,,, energytotalyesterday,advvfdipp,default,periodic,FLOAT,Energy_Total[1],2,,ro,,,none,,,,,,,,,, alarmflowrate,advvfdipp,default,periodic,BIT,alarm_Flowmeter,,,ro,,,none,,,,,,,,,0, -alarmintakepressure,advvfdipp,default,periodic,BIT,alarm_IntakePressure,,,ro,,,none,,,,,,,,,0, -alarmintaketemperature,advvfdipp,default,periodic,BIT,alarm_IntakeTemperature,,,ro,,,none,,,,,,,,,0, alarmtubingpressure,advvfdipp,default,periodic,BIT,alarm_TubingPressure,,,ro,,,none,,,,,,,,,0, alarmvfd,advvfdipp,default,periodic,BIT,alarm_VFD,,,ro,,,none,,,,,,,,,0, alarmlockout,advvfdipp,default,periodic,BIT,alarm_Lockout,,,ro,,,none,,,,,,,,,0, runpermissive,advvfdipp,default,periodic,INT,Run_Permissive_INT,,,ro,,,none,,,,,,,,,, startpermissive,advvfdipp,default,periodic,INT,Start_Permissive_INT,,,ro,,,none,,,,,,,,,, alarmfluidlevel,advvfdipp,default,periodic,BIT,alarm_FluidLevel,,,ro,,,none,,,,,,,,,0, -pressureshutdownlimit,advvfdipp,default,periodic,FLOAT,AIn_IntakePressure.Val_LoLim,2,,ro,,,none,,,,,,,,,, -pressurestartuplimit,advvfdipp,default,periodic,FLOAT,AIn_IntakePressure.Val_HiLim,2,,ro,,,none,,,,,,,,,, -temperatureshutdownlimit,advvfdipp,default,periodic,FLOAT,AIn_IntakeTemperature.Val_HiLim,2,,ro,,,none,,,,,,,,,, -temperaturestartuplimit,advvfdipp,default,periodic,FLOAT,AIn_IntakeTemperature.Val_LoLim,2,,ro,,,none,,,,,,,,,, -sensorheight,advvfdipp,default,periodic,FLOAT,cfg_DHSensorDistToIntake,2,,ro,,,none,,,,,,,,,, last_vfd_fault_code,advvfdipp,default,periodic,INT,PowerFlex755.Val_LastFaultCode,,,ro,,,none,,,,,,,,,, vfd_fault,advvfdipp,default,periodic,INT,sts_CurrentVFDFaultCode,,,ro,,,none,,,,,,,,,, controllerfault_io,advvfdipp,default,periodic,BIT,ControllerFault_IO,,,ro,,,none,,,,,,,,,0, diff --git a/Pub_Sub/advvfdipp_wo_downhole/thingsboard/v1/device_supervisor.cfg b/Pub_Sub/advvfdipp_wo_downhole/thingsboard/v1/device_supervisor.cfg new file mode 100644 index 0000000..3bf7b85 --- /dev/null +++ b/Pub_Sub/advvfdipp_wo_downhole/thingsboard/v1/device_supervisor.cfg @@ -0,0 +1,1241 @@ +{ + "controllers": [ + { + "protocol": "EtherNet/IP", + "name": "advvfdipp", + "args": { + "connectTimeOut": 2000, + "slot": 0 + }, + "samplePeriod": 10, + "expired": 10000, + "endpoint": "192.168.1.10:44818", + "enablePerOnchange": 0 + } + ], + "measures": [ + { + "name": "flowrate", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "val_Flowmeter", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "fluidlevel", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "val_FluidLevel", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "intakepressure", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "val_IntakePressure", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "intaketemperature", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "val_IntakeTemperature", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "tubingpressure", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "val_TubingPressure", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "pidcontrolmode", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "DINT", + "addr": "sts_PID_Control", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "bitMap": 0, + "reverseBit": 0, + "storageLwTSDB": 0 + }, + { + "name": "wellstatus", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "INT", + "addr": "Device_Status_INT", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "enableBit": 0, + "storageLwTSDB": 0 + }, + { + "name": "vfdfrequency", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "VFD_SpeedFdbk", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "flowtotal", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Flow_Total[0]", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "energytotal", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Energy_Total[0]", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "vfdcurrent", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "VFD_OutCurrent", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "downholesensorstatus", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "INT", + "addr": "Downhole_Sensor_Status_INT", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "enableBit": 0, + "storageLwTSDB": 0 + }, + { + "name": "fluidspecificgravity", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "cfg_FluidSpecificGravity", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "flowtotalyesterday", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Flow_Total[1]", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "energytotalyesterday", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "Energy_Total[1]", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "alarmflowrate", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "alarm_Flowmeter", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "bitMap": 0, + "reverseBit": 0, + "storageLwTSDB": 0 + }, + { + "name": "alarmintakepressure", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "alarm_IntakePressure", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "bitMap": 0, + "reverseBit": 0, + "storageLwTSDB": 0 + }, + { + "name": "alarmintaketemperature", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "alarm_IntakeTemperature", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "bitMap": 0, + "reverseBit": 0, + "storageLwTSDB": 0 + }, + { + "name": "alarmtubingpressure", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "alarm_TubingPressure", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "bitMap": 0, + "reverseBit": 0, + "storageLwTSDB": 0 + }, + { + "name": "alarmvfd", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "alarm_VFD", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "bitMap": 0, + "reverseBit": 0, + "storageLwTSDB": 0 + }, + { + "name": "alarmlockout", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "alarm_Lockout", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "bitMap": 0, + "reverseBit": 0, + "storageLwTSDB": 0 + }, + { + "name": "runpermissive", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "INT", + "addr": "Run_Permissive_INT", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "enableBit": 0, + "storageLwTSDB": 0 + }, + { + "name": "startpermissive", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "INT", + "addr": "Start_Permissive_INT", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "enableBit": 0, + "storageLwTSDB": 0 + }, + { + "name": "startcommand", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "cmd_Start", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "bitMap": 0, + "reverseBit": 0, + "storageLwTSDB": 0 + }, + { + "name": "stopcommand", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "cmd_Stop", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "bitMap": 0, + "reverseBit": 0, + "storageLwTSDB": 0 + }, + { + "name": "flowsetpoint", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "cfg_PID_FlowSP", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "fluidlevelsetpoint", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "cfg_PID_FluidLevelSP", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "manualfrequencysetpoint", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "cfg_PID_ManualSP", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "tubingpressuresetpoint", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "cfg_PID_TubingPressureSP", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "alarmfluidlevel", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "alarm_FluidLevel", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "bitMap": 0, + "reverseBit": 0, + "storageLwTSDB": 0 + }, + { + "name": "pressureshutdownlimit", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "AIn_IntakePressure.Val_LoLim", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "pressurestartuplimit", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "AIn_IntakePressure.Val_HiLim", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "temperatureshutdownlimit", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "AIn_IntakeTemperature.Val_HiLim", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "temperaturestartuplimit", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "AIn_IntakeTemperature.Val_LoLim", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "sensorheight", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "cfg_DHSensorDistToIntake", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "last_vfd_fault_code", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "INT", + "addr": "PowerFlex755.Val_LastFaultCode", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "enableBit": 0, + "storageLwTSDB": 0 + }, + { + "name": "vfd_fault", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "INT", + "addr": "sts_CurrentVFDFaultCode", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "enableBit": 0, + "storageLwTSDB": 0 + }, + { + "name": "controllerfault_io", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "ControllerFault_IO", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "bitMap": 0, + "reverseBit": 0, + "storageLwTSDB": 0 + }, + { + "name": "controllerfault_program", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "BIT", + "addr": "ControllerFault_Program", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "bitMap": 0, + "reverseBit": 0, + "storageLwTSDB": 0 + }, + { + "name": "minvfdfrequency", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "PowerFlex755.Cfg_MinSpdRef", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "maxvfdfrequency", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "PowerFlex755.Cfg_MaxSpdRef", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "hartnettotal", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "in_HART_Flowmeter_Net", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "hartfwdtotal", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "in_HART_Flowmeter_Fwd", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "name": "hartrevtotal", + "ctrlName": "advvfdipp", + "group": "default", + "uploadType": "periodic", + "dataType": "FLOAT", + "addr": "in_HART_Flowmeter_Rev", + "decimal": 2, + "len": 1, + "readWrite": "ro", + "unit": "", + "desc": "", + "transformType": 0, + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "gain": "", + "offset": "", + "storageLwTSDB": 0 + }, + { + "ctrlName": "advvfdipp", + "dataType": "BIT", + "addr": "cmd_Start", + "readWrite": "rw", + "uploadType": "periodic", + "group": "default", + "name": "cmd_Start", + "desc": "", + "unit": "", + "transformType": 0, + "gain": "1.0", + "offset": "0.0", + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "decimal": 2, + "bitMap": 0, + "reverseBit": 0, + "storageLwTSDB": 0 + }, + { + "ctrlName": "advvfdipp", + "dataType": "BIT", + "addr": "cmd_Stop", + "readWrite": "rw", + "uploadType": "periodic", + "group": "default", + "name": "cmd_Stop", + "desc": "", + "unit": "", + "transformType": 0, + "gain": "1.0", + "offset": "0.0", + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "decimal": 2, + "bitMap": 0, + "reverseBit": 0, + "storageLwTSDB": 0 + } + ], + "alarmLables": [ + "default" + ], + "alarms": [], + "groups": [ + { + "name": "default", + "uploadInterval": 600, + "reference": 44, + "LwTSDBSize": 150000, + "strategy": 1 + } + ], + "misc": { + "maxAlarmRecordSz": 2000, + "logLvl": "INFO", + "coms": [ + { + "name": "rs232", + "baud": 9600, + "bits": 8, + "stopbits": 1, + "parityChk": "n" + }, + { + "name": "rs485", + "baud": 19200, + "bits": 8, + "stopbits": 1, + "parityChk": "n" + } + ], + "cachePath": "/var/user/data/dbhome/device_supervisor/offlinedata", + "cacheSize": 10000 + }, + "clouds": [ + { + "cacheSize": 10000, + "enable": 1, + "type": "Standard MQTT", + "args": { + "host": "mq194.imistaway.net", + "port": 1883, + "clientId": "wilkinson-ranch-33-sr-2-2", + "auth": 1, + "tls": 0, + "cleanSession": 1, + "mqttVersion": "v3.1.1", + "keepalive": 120, + "key": "", + "cert": "", + "rootCA": "", + "verifyServer": 0, + "verifyClient": 0, + "username": "admin", + "passwd": "columbus", + "authType": 1, + "willQos": 0, + "willRetain": 0, + "willTopic": "", + "willPayload": "", + "tlsAuth": "caSelfSigned" + }, + "name": "default", + "cachePath": "/var/user/data/dbhome/device_supervisor/offlinedata", + "uploadRules": [] + } + ], + "quickfaas": { + "genericFuncs": [], + "uploadFuncs": [ + { + "name": "Send Data", + "trigger": "measure_event", + "topic": "meshify/db/194/_/advvfdipp/${MAC_LOWER}", + "qos": 1, + "groups": [ + "default" + ], + "funcName": "sendData", + "script": "# Enter your python code.\nimport json, math, time, os\nfrom datetime import datetime as dt\nfrom common.Logger import logger\nfrom quickfaas.remotebus import publish\nfrom quickfaas.global_dict import get as get_params\nfrom quickfaas.global_dict import _set_global_args\n\nimport re, uuid\nfrom paho.mqtt import client\n\nclass RuntimeStats:\n def __init__(self):\n self.runs = {}\n self.currentRun = 0\n self.today = \"\"\n self.todayString = \"\"\n\n def manageTime(self):\n if self.todayString != dt.strftime(dt.today(), \"%Y-%m-%d\"):\n if self.runs[self.todayString][\"run_\" + str(self.currentRun)][\"start\"] and not self.runs[self.todayString][\"run_\" + str(self.currentRun)][\"end\"]:\n self.runs[self.todayString][\"run_\" + str(self.currentRun)][\"end\"] = time.mktime(dt.strptime(self.todayString + \" 23:59:59\", \"%Y-%m-%d %H:%M:%S\").timetuple())\n self.addDay()\n self.today = dt.today()\n self.todayString = dt.strftime(self.today, \"%Y-%m-%d\")\n days = list(self.runs.keys())\n days.sort()\n while (dt.strptime(days[-1],\"%Y-%m-%d\") - dt.strptime(days[0], \"%Y-%m-%d\")).days > 30:\n self.removeDay(day=days[0])\n days = list(self.runs.keys())\n days.sort()\n\n def addHertzDataPoint(self, frequency):\n if frequency > 0:\n self.manageTime()\n try:\n self.runs[self.todayString][\"run_\" + str(self.currentRun)][\"frequencies\"].append(frequency)\n except:\n self.runs[self.todayString][\"run_\" + str(self.currentRun)][\"frequencies\"] = [frequency]\n\n def startRun(self):\n if self.checkRunning():\n self.endRun()\n self.runs[self.todayString][\"run_\" + str(self.currentRun)][\"start\"] = time.time()\n\n def endRun(self):\n self.runs[self.todayString][\"run_\" + str(self.currentRun)][\"end\"] = time.time()\n self.currentRun += 1\n self.runs[self.todayString][\"run_\" + str(self.currentRun)] = {\"start\":0, \"end\": 0, \"frequencies\":[]} \n\n def checkRunning(self):\n if self.runs[self.todayString][\"run_\" + str(self.currentRun)][\"start\"] and not self.runs[self.todayString][\"run_\" + str(self.currentRun)][\"end\"]:\n return True\n return False\n\n def addDay(self):\n self.today = dt.today()\n self.todayString = dt.strftime(self.today, \"%Y-%m-%d\")\n self.currentRun = 1\n self.runs[self.todayString] = {}\n self.runs[self.todayString][\"run_\" + str(self.currentRun)] = {\"start\":0, \"end\": 0, \"frequencies\":[]}\n\n def countRunsDay(self, day=None):\n if not day:\n day = self.todayString\n return len(self.runs[day].keys())\n\n def countRunsMultiDay(self, numDays=30):\n total_runs = 0\n for day in list(self.runs.keys()):\n total_runs += self.countRunsDay(day=day)\n return total_runs\n\n def calculateAverageHertzDay(self, day=None, returnArray=False):\n dayFrequencies = []\n if not day:\n day = self.todayString\n for run in list(self.runs[day].keys()):\n try:\n dayFrequencies += self.runs[day][run][\"frequencies\"]\n except Exception as e:\n print(\"{} missing frequency data for {}\".format(day,run))\n if returnArray:\n return dayFrequencies\n return round(math.fsum(dayFrequencies)/len(dayFrequencies),2)\n\n def calculateAverageHertzMultiDay(self, numDays=30):\n self.manageTime()\n frequencies = []\n for day in list(self.runs.keys()):\n if not day == self.todayString and (dt.strptime(self.todayString, \"%Y-%m-%d\") - dt.strptime(day, \"%Y-%m-%d\")).days <= numDays:\n try:\n frequencies += self.calculateAverageHertzDay(day=day, returnArray=True)\n except Exception as e:\n print(\"{} missing frequency data\".format(day))\n if len(frequencies):\n return round(math.fsum(frequencies)/len(frequencies), 2)\n return 0\n \n def calculateRunTimeDay(self, day=None, convertToHours=True):\n total_time = 0\n if not day:\n day = self.todayString\n for run in list(self.runs[day].keys()):\n total_time = self.runs[day][run][\"end\"] - self.runs[day][run][\"start\"] + total_time\n if convertToHours:\n return self.convertSecondstoHours(total_time)\n return total_time\n\n def calculateRunTimeMultiDay(self, numDays=30, convertToHours=True):\n total_time = 0\n for day in list(self.runs.keys()):\n if not day == self.todayString and (dt.strptime(self.todayString, \"%Y-%m-%d\") - dt.strptime(day, \"%Y-%m-%d\")).days <= numDays:\n total_time += self.calculateRunTimeDay(day=day, convertToHours=False)\n if convertToHours:\n return self.convertSecondstoHours(total_time)\n return total_time\n \n def calculateRunPercentDay(self, day=None, precise=False):\n if not day:\n day = self.todayString\n if precise:\n return (self.calculateRunTimeDay(day=day)/24) * 100\n return round((self.calculateRunTimeDay(day=day)/24) * 100, 2)\n \n\n def calculateRunPercentMultiDay(self, numDays=30, precise=False):\n self.manageTime()\n if precise:\n return (self.calculateRunTimeMultiDay()/(24*numDays)) * 100\n return round((self.calculateRunTimeMultiDay()/(24*numDays)) * 100,2)\n\n def removeDay(self, day=None):\n if not day:\n raise Exception(\"Day can not be None\")\n print(\"removing day {}\".format(day))\n del self.runs[day]\n \n def convertSecondstoHours(self, seconds):\n return round(seconds / (60*60),2)\n\n def loadDataFromFile(self, filePath=\"/var/user/files/runtimestats.json\"):\n try:\n with open(filePath, \"r\") as f:\n temp = json.load(f)\n self.runs = temp[\"data\"]\n self.currentRun = temp[\"current_run\"]\n self.today = dt.strptime(temp[\"current_day\"], \"%Y-%m-%d\")\n self.todayString = temp[\"current_day\"]\n self.manageTime()\n except:\n print(\"Could not find file at {}\".format(filePath))\n print(\"creating file\")\n self.addDay()\n try:\n with open(filePath, \"w\") as f:\n d = {\n \"current_run\": self.currentRun,\n \"current_day\": self.todayString,\n \"data\": self.runs\n }\n json.dump(d, f, indent=4)\n except Exception as e:\n print(e)\n\n def saveDataToFile(self, filePath=\"/var/user/files/runtimestats.json\"):\n try:\n print(\"Saving Runs\")\n with open(filePath, \"w\") as f:\n d = {\n \"current_run\": self.currentRun,\n \"current_day\": self.todayString,\n \"data\": self.runs\n }\n json.dump(d, f, indent=4)\n except Exception as e:\n print(e)\n\nrts = RuntimeStats()\nrts.loadDataFromFile()\nrts.saveDataToFile()\n\ndef reboot(reason=\"Rebooting for config file update\"):\n #basic = Basic()\n logger.info(\"!\" * 10 + \"REBOOTING DEVICE\" + \"!\"*10)\n logger.info(reason)\n r = os.popen(\"kill -s SIGHUP `cat /var/run/python/supervisord.pid`\").read()\n logger.info(f\"REBOOT : {r}\")\n\ndef checkFileExist(filename):\n path = \"/var/user/files\"\n if not os.path.exists(path):\n logger.info(\"no folder making files folder in var/user\")\n os.makedirs(path)\n with open(path + \"/\" + filename, \"a\") as f:\n json.dump({}, f)\n if not os.path.exists(path + \"/\" + filename):\n logger.info(\"no creds file making creds file\")\n with open(path + \"/\" + filename, \"a\") as f:\n json.dump({}, f)\n\ndef convertDStoJSON(ds):\n j = dict()\n for x in ds:\n j[x[\"key\"]] = x[\"value\"]\n return j\n\ndef convertJSONtoDS(j):\n d = []\n for key in j.keys():\n d.append({\"key\": key, \"value\": j[key]})\n return d\n\ndef checkCredentialConfig():\n logger.info(\"CHECKING CONFIG\")\n cfgpath = \"/var/user/cfg/device_supervisor/device_supervisor.cfg\"\n credspath = \"/var/user/files/creds.json\"\n cfg = dict()\n with open(cfgpath, \"r\") as f:\n cfg = json.load(f)\n clouds = cfg.get(\"clouds\")\n logger.info(clouds)\n #if not configured then try to configure from stored values\n if clouds[0][\"args\"][\"clientId\"] == \"unknown\" or clouds[0][\"args\"][\"username\"] == \"unknown\" or not clouds[0][\"args\"][\"passwd\"] or clouds[0][\"args\"][\"passwd\"] == \"unknown\":\n checkFileExist(\"creds.json\")\n with open(credspath, \"r\") as c:\n creds = json.load(c)\n if creds:\n logger.info(\"updating config with stored data\")\n clouds[0][\"args\"][\"clientId\"] = creds[\"clientId\"]\n clouds[0][\"args\"][\"username\"] = creds[\"userName\"]\n clouds[0][\"args\"][\"passwd\"] = creds[\"password\"]\n cfg[\"clouds\"] = clouds\n cfg = checkParameterConfig(cfg)\n with open(cfgpath, \"w\", encoding='utf-8') as n:\n json.dump(cfg, n, indent=1, ensure_ascii=False)\n reboot()\n else:\n #assuming clouds is filled out, if data is different then assume someone typed in something new and store it, if creds is empty fill with clouds' data\n checkFileExist(\"creds.json\")\n with open(credspath, \"r\") as c:\n logger.info(\"updating stored file with new data\")\n cfg = checkParameterConfig(cfg)\n with open(cfgpath, \"w\", encoding='utf-8') as n:\n json.dump(cfg, n, indent=1, ensure_ascii=False)\n creds = json.load(c)\n if creds:\n if creds[\"clientId\"] != clouds[0][\"args\"][\"clientId\"]:\n creds[\"clientId\"] = clouds[0][\"args\"][\"clientId\"]\n if creds[\"userName\"] != clouds[0][\"args\"][\"username\"]:\n creds[\"userName\"] = clouds[0][\"args\"][\"username\"]\n if creds[\"password\"] != clouds[0][\"args\"][\"passwd\"]:\n creds[\"password\"] = clouds[0][\"args\"][\"passwd\"]\n else:\n creds[\"clientId\"] = clouds[0][\"args\"][\"clientId\"]\n creds[\"userName\"] = clouds[0][\"args\"][\"username\"]\n creds[\"password\"] = clouds[0][\"args\"][\"passwd\"]\n with open(credspath, \"w\") as cw:\n json.dump(creds,cw)\n\ndef checkParameterConfig(cfg):\n logger.info(\"Checking Parameters!!!!\")\n paramspath = \"/var/user/files/params.json\"\n cfgparams = convertDStoJSON(cfg.get(\"labels\"))\n #check stored values \n checkFileExist(\"params.json\")\n with open(paramspath, \"r\") as f:\n logger.info(\"Opened param storage file\")\n params = json.load(f)\n if params:\n if cfgparams != params:\n #go through each param\n #if not \"unknown\" and cfg and params aren't the same take from cfg likely updated manually\n #if key in cfg but not in params copy to params\n logger.info(\"equalizing params between cfg and stored\")\n for key in cfgparams.keys():\n try:\n if cfgparams[key] != params[key] and cfgparams[key] != \"unknown\":\n params[key] = cfgparams[key]\n except:\n params[key] = cfgparams[key]\n cfg[\"labels\"] = convertJSONtoDS(params)\n _set_global_args(convertJSONtoDS(params))\n with open(paramspath, \"w\") as p:\n json.dump(params, p)\n else:\n with open(paramspath, \"w\") as p:\n logger.info(\"initializing param file with params in memory\")\n json.dump(convertDStoJSON(get_params()), p)\n cfg[\"labels\"] = get_params()\n \n return cfg\n\n\n\nlwtData = {\n \"init\":False,\n \"client\": client.Client(client_id=str(uuid.uuid4()), clean_session=True, userdata=None, protocol=client.MQTTv311, transport=\"tcp\")\n}\ndef lwt(mac):\n try:\n #if not lwtData[\"connected\"]:\n if not lwtData[\"init\"]:\n logger.info(\"INITIALIZING LWT CLIENT\")\n lwtData[\"client\"].username_pw_set(username=\"admin\", password=\"columbus\")\n lwtData[\"client\"].will_set(\"meshify/db/194/_/mainHP/\" + mac + \":00:00/connected\",json.dumps({\"value\":False}))\n lwtData[\"init\"] = True\n logger.info(\"Connecting to MQTT Broker for LWT purposes!!!!!!!\")\n lwtData[\"client\"].connect(\"mq194.imistaway.net\",1883, 600)\n lwtData[\"client\"].publish(\"meshify/db/194/_/mainHP/\" + mac + \":00:00/connected\", json.dumps({\"value\":True}))\n except Exception as e:\n logger.error(\"LWT DID NOT DO THE THING\")\n logger.error(e)\n\ndef sendData(message):\n #logger.debug(message)\n mac = __topic__.split(\"/\")[-1] #':'.join(re.findall('..', '%012x' % uuid.getnode()))\n lwt(mac)\n checkCredentialConfig()\n for measure in message[\"measures\"]:\n try:\n logger.debug(measure)\n now = (round(dt.timestamp(dt.now())/600)*600)\n if abs(now - measure[\"timestamp\"]) > 7200:\n reboot(reason=\"Poll timestamp and actual timestamp out of sync. Actual: {} Poll: {}\".format(now,measure[\"timestamp\"]))\n if measure[\"name\"] in [\"wellstatus\",\"pidcontrolmode\",\"downholesensorstatus\",\"alarmflowrate\",\"alarmintakepressure\",\"alarmintaketemperature\",\"alarmtubingpressure\",\"alarmvfd\",\"alarmlockout\",\"alarmfluidlevel\",\"runpermissive\",\"startpermissive\",\"last_vfd_fault_code\",\"vfd_fault\"]:\n logger.debug(\"Converting DINT/BOOL to STRING\")\n value = convert_int(measure[\"name\"], measure[\"value\"])\n logger.debug(\"Converted {} to {}\".format(measure[\"value\"], value))\n publish(__topic__ + \":01:99/\" + measure[\"name\"], json.dumps({\"value\": value}), __qos__)\n else:\n publish(__topic__ + \":01:99/\" + measure[\"name\"], json.dumps({\"value\": measure[\"value\"]}), __qos__)\n \n if measure[\"name\"] == \"wellstatus\":\n if measure[\"value\"] == 0 and not rts.runs[rts.todayString][\"run_\" + str(rts.currentRun)][\"start\"]:\n rts.startRun()\n rts.saveDataToFile()\n elif measure[\"value\"] > 0 and rts.runs[rts.todayString][\"run_\" + str(rts.currentRun)][\"start\"] and not rts.runs[rts.todayString][\"run_\" + str(rts.currentRun)][\"end\"]:\n rts.endRun()\n rts.saveDataToFile()\n publish(__topic__ + \":01:99/\" + \"percentRunTime30Days\", json.dumps({\"value\": rts.calculateRunPercentMultiDay()}), __qos__)\n \n if measure[\"name\"] == \"vfdfrequency\":\n if measure[\"value\"] > 0:\n rts.addHertzDataPoint(measure[\"value\"])\n rts.saveDataToFile()\n publish(__topic__ + \":01:99/\" + \"avgFrequency30Days\", json.dumps({\"value\": rts.calculateAverageHertzMultiDay()}), __qos__)\n except Exception as e:\n logger.error(e)\n \n #publish(__topic__, json.dumps({measure[\"name\"]: measure[\"value\"]}), __qos__)\n\ndef convert_int(plc_tag, value):\n well_status_codes = {\n 0: \"Running\",\n 1: \"Pumped Off\",\n 2: \"Alarmed\",\n 3: \"Locked Out\",\n 4: \"Stopped\"\n }\n\n pid_control_codes = {\n 0: \"Flow\",\n 1: \"Fluid Level\",\n 2: \"Tubing Pressure\",\n 3: \"Manual\"\n }\n\n downhole_codes = {\n 0: \"OK\",\n 1: \"Connecting\",\n 2: \"Open Circuit\",\n 3: \"Shorted\",\n 4: \"Cannot Decode\"\n }\n\n permissive_codes = {\n 0: \"OK\",\n 1: \"Flow\",\n 2: \"Intake Pressure\",\n 3: \"Intake Temperature\",\n 4: \"Tubing Pressure\",\n 5: \"VFD\",\n 6: \"Fluid Level\",\n 7: \"Min. Downtime\"\n }\n\n alarm_codes = {\n 0: \"OK\",\n 1: \"Alarm\"\n }\n\n alarm_vfd_codes = {\n 0: \"OK\",\n 1: \"Locked Out\"\n }\n\n vfd_fault_codes = {\n 0: \"No Fault\",\n 2: \"Auxiliary Input\",\n 3: \"Power Loss\",\n 4: \"UnderVoltage\",\n 5: \"OverVoltage\",\n 7: \"Motor Overload\",\n 8: \"Heatsink OverTemp\",\n 9: \"Thermister OverTemp\",\n 10: \"Dynamic Brake OverTemp\",\n 12: \"Hardware OverCurrent\",\n 13: \"Ground Fault\",\n 14: \"Ground Warning\",\n 15: \"Load Loss\",\n 17: \"Input Phase Loss\",\n 18: \"Motor PTC Trip\",\n 19: \"Task Overrun\",\n 20: \"Torque Prove Speed Band\",\n 21: \"Output Phase Loss\",\n 24: \"Decel Inhibit\",\n 25: \"OverSpeed Limit\",\n 26: \"Brake Slipped\",\n 27: \"Torque Prove Conflict\",\n 28: \"TP Encls Confict\",\n 29: \"Analog In Loss\",\n 33: \"Auto Restarts Exhausted\",\n 35: \"IPM OverCurrent\",\n 36: \"SW OverCurrent\",\n 38: \"Phase U to Ground\",\n 39: \"Phase V to Ground\",\n 40: \"Phase W to Ground\",\n 41: \"Phase UV Short\",\n 42: \"Phase VW Short\",\n 43: \"Phase WU Short\",\n 44: \"Phase UNeg to Ground\",\n 45: \"Phase VNeg to Ground\",\n 46: \"Phase WNeg to Ground\",\n 48: \"System Defaulted\",\n 49: \"Drive Powerup\",\n 51: \"Clear Fault Queue\",\n 55: \"Control Board Overtemp\",\n 59: \"Invalid Code\",\n 61: \"Shear Pin 1\",\n 62: \"Shear Pin 2\",\n 64: \"Drive Overload\",\n 66: \"OW Torque Level\",\n 67: \"Pump Off\",\n 71: \"Port 1 Adapter\",\n 72: \"Port 2 Adapter\",\n 73: \"Port 3 Adapter\",\n 74: \"Port 4 Adapter\",\n 75: \"Port 5 Adapter\",\n 76: \"Port 6 Adapter\",\n 77: \"IR Volts Range\",\n 78: \"FluxAmps Ref Range\",\n 79: \"Excessive Load\",\n 80: \"AutoTune Aborted\",\n 81: \"Port 1 DPI Loss\",\n 82: \"Port 2 DPI Loss\",\n 83: \"Port 3 DPI Loss\",\n 84: \"Port 4 DPI Loss\",\n 85: \"Port 5 DPI Loss\",\n 86: \"Port 6 DPI Loss\",\n 87: \"IXo Voltage Range\",\n 91: \"Primary Velocity Feedback Loss\",\n 93: \"Hardware Enable Check\",\n 94: \"Alternate Velocity Feedback Loss\",\n 95: \"Auxiliary Velocity Feedback Loss\",\n 96: \"Position Feedback Loss\",\n 97: \"Auto Tach Switch\",\n 100: \"Parameter Checksum\",\n 101: \"Power Down NVS Blank\",\n 102: \"NVS Not Blank\",\n 103: \"Power Down NVS Incompatible\",\n 104: \"Power Board Checksum\",\n 106: \"Incompat MCB-PB\",\n 107: \"Replaced MCB-PB\",\n 108: \"Analog Calibration Checksum\",\n 110: \"Invalid Power Board Data\",\n 111: \"Power Board Invalid ID\",\n 112: \"Power Board App Min Version\",\n 113: \"Tracking DataError\",\n 115: \"Power Down Table Full\",\n 116: \"Power Down Entry Too Large\",\n 117: \"Power Down Data Checksum\",\n 118: \"Power Board Power Down Checksum\",\n 124: \"App ID Changed\",\n 125: \"Using Backup App\",\n 134: \"Start on Power Up\",\n 137: \"External Precharge Error\",\n 138: \"Precharge Open\",\n 141: \"Autotune Enc Angle\",\n 142: \"Autotune Speed Restricted\",\n 143: \"Autotune Current Regulator\",\n 144: \"Autotune Inertia\",\n 145: \"Autotune Travel\",\n 13035: \"Net IO Timeout\",\n 13037: \"Net IO Timeout\"\n\n }\n\n plc_tags = {\n \"wellstatus\": well_status_codes.get(value, \"Invalid Code\"),\n \"pidcontrolmode\": pid_control_codes.get(value, \"Invalid Code\"),\n \"downholesensorstatus\": downhole_codes.get(value, \"Invalid Code\"),\n \"alarmflowrate\": alarm_codes.get(value, \"Invalid Code\"),\n \"alarmintakepressure\": alarm_codes.get(value, \"Invalid Code\"),\n \"alarmintaketemperature\": alarm_codes.get(value, \"Invalid Code\"),\n \"alarmtubingpressure\": alarm_codes.get(value, \"Invalid Code\"),\n \"alarmvfd\": alarm_codes.get(value, \"Invalid Code\"),\n \"alarmlockout\": alarm_vfd_codes.get(value, \"Invalid Code\"),\n \"alarmfluidlevel\": alarm_codes.get(value, \"Invalid Code\"),\n \"runpermissive\": permissive_codes.get(value, \"Invalid Code\"),\n \"startpermissive\": permissive_codes.get(value, \"Invalid Code\"),\n \"last_vfd_fault_code\": vfd_fault_codes.get(value, \"Invalid Code\"),\n \"vfd_fault\": vfd_fault_codes.get(value, \"Invalid Code\")\n }\n\n return plc_tags.get(plc_tag, \"Invalid Tag\")\n\n ", + "msgType": 0, + "cloudName": "default" + } + ], + "downloadFuncs": [ + { + "name": "Commands", + "topic": "meshify/sets/194/${MAC_UPPER}:01:99", + "qos": 1, + "funcName": "receiveCommand", + "payload_type": "Plaintext", + "script": "# Enter your python code.\nimport json\nfrom quickfaas.measure import recall\nfrom common.Logger import logger\n\ndef sync(mac,value, wizard_api):\n #get new values and send\n try:\n data = recall()#json.loads(recall().decode(\"utf-8\"))\n except Exception as e:\n logger.error(e)\n logger.info(data)\n for controller in data:\n for measure in controller[\"measures\"]:\n #publish measure\n topic = \"meshify/db/194/_/advvfdipp/\" + mac + \"/\" + measure[\"name\"]\n if measure[\"name\"] in [\"wellstatus\",\"pidcontrolmode\",\"downholesensorstatus\",\"alarmflowrate\",\"alarmintakepressure\",\"alarmintaketemperature\",\"alarmtubingpressure\",\"alarmvfd\",\"alarmlockout\",\"alarmfluidlevel\",\"runpermissive\",\"startpermissive\",\"last_vfd_fault_code\",\"vfd_fault\"]:\n payload = [{\"value\": convert_int(measure[\"name\"], measure[\"value\"])}]\n else:\n payload = [{\"value\": measure[\"value\"]}]\n logger.debug(\"Sending on topic: {}\".format(topic))\n logger.debug(\"Sending value: {}\".format(payload))\n wizard_api.mqtt_publish(topic, json.dumps(payload))\ndef writeplctag(mac, value, wizard_api):\n try:\n value = json.loads(value.replace(\"'\",'\"'))\n logger.debug(value)\n message = {\"advvfdipp\":{value[\"tag\"]: value[\"val\"]}}\n wizard_api.write_plc_values(message)\n except Exception as e:\n logger.debug(e)\n \ndef receiveCommand(topic, payload, wizard_api):\n logger.debug(topic)\n logger.debug(json.loads(payload))\n p = json.loads(payload)[0]\n command = p[\"payload\"][\"name\"].split(\".\")[1]\n commands = {\n \"sync\": sync,\n \"writeplctag\": writeplctag,\n }\n commands[command](p[\"mac\"].lower(),p[\"payload\"][\"value\"], wizard_api)\n #logger.debug(command)\n ack(p[\"msgId\"], p[\"mac\"], command, p[\"payload\"][\"name\"].split(\".\")[1], p[\"payload\"][\"value\"], wizard_api)\n\ndef ack(msgid, mac, name, command, value, wizard_api):\n #logger.debug(mac)\n macsquish = \"\".join(mac.split(\":\")[:-2])\n maclower = \":\".join(mac.split(\":\")[:-2])\n maclower = maclower.lower()\n #logger.debug(msgid)\n #logger.debug(mac)\n #logger.debug(name)\n #logger.debug(value)\n wizard_api.mqtt_publish(\"meshify/responses/\" + str(msgid), json.dumps([{\"value\": \"{} Success Setting: {} To: {}\".format(macsquish,name, value), \"msgid\": str(msgid)}]))\n wizard_api.mqtt_publish(\"meshify/db/194/_/mainMeshify/\" + maclower + \":00:00/commands\", json.dumps([{\"value\": {\"status\": \"success\", \"value\": str(value), \"channel\": command}, \"msgid\": str(msgid)}]))\n\ndef convert_int(plc_tag, value):\n well_status_codes = {\n 0: \"Running\",\n 1: \"Pumped Off\",\n 2: \"Alarmed\",\n 3: \"Locked Out\",\n 4: \"Stopped\"\n }\n\n pid_control_codes = {\n 0: \"Flow\",\n 1: \"Fluid Level\",\n 2: \"Tubing Pressure\",\n 3: \"Manual\"\n }\n\n downhole_codes = {\n 0: \"OK\",\n 1: \"Connecting\",\n 2: \"Open Circuit\",\n 3: \"Shorted\",\n 4: \"Cannot Decode\"\n }\n\n permissive_codes = {\n 0: \"OK\",\n 1: \"Flow\",\n 2: \"Intake Pressure\",\n 3: \"Intake Temperature\",\n 4: \"Tubing Pressure\",\n 5: \"VFD\",\n 6: \"Fluid Level\",\n 7: \"Min. Downtime\"\n }\n\n alarm_codes = {\n 0: \"OK\",\n 1: \"Alarm\"\n }\n\n alarm_vfd_codes = {\n 0: \"OK\",\n 1: \"Locked Out\"\n }\n\n vfd_fault_codes = {\n 0: \"No Fault\",\n 2: \"Auxiliary Input\",\n 3: \"Power Loss\",\n 4: \"UnderVoltage\",\n 5: \"OverVoltage\",\n 7: \"Motor Overload\",\n 8: \"Heatsink OverTemp\",\n 9: \"Thermister OverTemp\",\n 10: \"Dynamic Brake OverTemp\",\n 12: \"Hardware OverCurrent\",\n 13: \"Ground Fault\",\n 14: \"Ground Warning\",\n 15: \"Load Loss\",\n 17: \"Input Phase Loss\",\n 18: \"Motor PTC Trip\",\n 19: \"Task Overrun\",\n 20: \"Torque Prove Speed Band\",\n 21: \"Output Phase Loss\",\n 24: \"Decel Inhibit\",\n 25: \"OverSpeed Limit\",\n 26: \"Brake Slipped\",\n 27: \"Torque Prove Conflict\",\n 28: \"TP Encls Confict\",\n 29: \"Analog In Loss\",\n 33: \"Auto Restarts Exhausted\",\n 35: \"IPM OverCurrent\",\n 36: \"SW OverCurrent\",\n 38: \"Phase U to Ground\",\n 39: \"Phase V to Ground\",\n 40: \"Phase W to Ground\",\n 41: \"Phase UV Short\",\n 42: \"Phase VW Short\",\n 43: \"Phase WU Short\",\n 44: \"Phase UNeg to Ground\",\n 45: \"Phase VNeg to Ground\",\n 46: \"Phase WNeg to Ground\",\n 48: \"System Defaulted\",\n 49: \"Drive Powerup\",\n 51: \"Clear Fault Queue\",\n 55: \"Control Board Overtemp\",\n 59: \"Invalid Code\",\n 61: \"Shear Pin 1\",\n 62: \"Shear Pin 2\",\n 64: \"Drive Overload\",\n 66: \"OW Torque Level\",\n 67: \"Pump Off\",\n 71: \"Port 1 Adapter\",\n 72: \"Port 2 Adapter\",\n 73: \"Port 3 Adapter\",\n 74: \"Port 4 Adapter\",\n 75: \"Port 5 Adapter\",\n 76: \"Port 6 Adapter\",\n 77: \"IR Volts Range\",\n 78: \"FluxAmps Ref Range\",\n 79: \"Excessive Load\",\n 80: \"AutoTune Aborted\",\n 81: \"Port 1 DPI Loss\",\n 82: \"Port 2 DPI Loss\",\n 83: \"Port 3 DPI Loss\",\n 84: \"Port 4 DPI Loss\",\n 85: \"Port 5 DPI Loss\",\n 86: \"Port 6 DPI Loss\",\n 87: \"IXo Voltage Range\",\n 91: \"Primary Velocity Feedback Loss\",\n 93: \"Hardware Enable Check\",\n 94: \"Alternate Velocity Feedback Loss\",\n 95: \"Auxiliary Velocity Feedback Loss\",\n 96: \"Position Feedback Loss\",\n 97: \"Auto Tach Switch\",\n 100: \"Parameter Checksum\",\n 101: \"Power Down NVS Blank\",\n 102: \"NVS Not Blank\",\n 103: \"Power Down NVS Incompatible\",\n 104: \"Power Board Checksum\",\n 106: \"Incompat MCB-PB\",\n 107: \"Replaced MCB-PB\",\n 108: \"Analog Calibration Checksum\",\n 110: \"Invalid Power Board Data\",\n 111: \"Power Board Invalid ID\",\n 112: \"Power Board App Min Version\",\n 113: \"Tracking DataError\",\n 115: \"Power Down Table Full\",\n 116: \"Power Down Entry Too Large\",\n 117: \"Power Down Data Checksum\",\n 118: \"Power Board Power Down Checksum\",\n 124: \"App ID Changed\",\n 125: \"Using Backup App\",\n 134: \"Start on Power Up\",\n 137: \"External Precharge Error\",\n 138: \"Precharge Open\",\n 141: \"Autotune Enc Angle\",\n 142: \"Autotune Speed Restricted\",\n 143: \"Autotune Current Regulator\",\n 144: \"Autotune Inertia\",\n 145: \"Autotune Travel\",\n 13035: \"Net IO Timeout\",\n 13037: \"Net IO Timeout\"\n\n }\n\n plc_tags = {\n \"wellstatus\": well_status_codes.get(value, \"Invalid Code\"),\n \"pidcontrolmode\": pid_control_codes.get(value, \"Invalid Code\"),\n \"downholesensorstatus\": downhole_codes.get(value, \"Invalid Code\"),\n \"alarmflowrate\": alarm_codes.get(value, \"Invalid Code\"),\n \"alarmintakepressure\": alarm_codes.get(value, \"Invalid Code\"),\n \"alarmintaketemperature\": alarm_codes.get(value, \"Invalid Code\"),\n \"alarmtubingpressure\": alarm_codes.get(value, \"Invalid Code\"),\n \"alarmvfd\": alarm_codes.get(value, \"Invalid Code\"),\n \"alarmlockout\": alarm_vfd_codes.get(value, \"Invalid Code\"),\n \"alarmfluidlevel\": alarm_codes.get(value, \"Invalid Code\"),\n \"runpermissive\": permissive_codes.get(value, \"Invalid Code\"),\n \"startpermissive\": permissive_codes.get(value, \"Invalid Code\"),\n \"last_vfd_fault_code\": vfd_fault_codes.get(value, \"Invalid Code\"),\n \"vfd_fault\": vfd_fault_codes.get(value, \"Invalid Code\")\n }\n\n return plc_tags.get(plc_tag, \"Invalid Tag\")\n", + "msgType": 0, + "trigger": "command_event", + "cloudName": "default" + } + ] + }, + "labels": [ + { + "key": "SN", + "value": "GF5022311031703" + }, + { + "key": "MAC", + "value": "00:18:05:28:4b:08" + }, + { + "key": "MAC_LOWER", + "value": "c4:93:00:0c:d2:29" + }, + { + "key": "MAC_UPPER", + "value": "C4:93:00:0C:D2:29" + } + ], + "modbusSlave": { + "enable": 0, + "protocol": "Modbus-TCP", + "port": 502, + "slaveAddr": 1, + "int16Ord": "ab", + "int32Ord": "abcd", + "float32Ord": "abcd", + "maxConnection": 5, + "mapping_table": [] + }, + "modbusRTUSlave": { + "enable": 0, + "protocol": "Modbus-RTU", + "coms": "rs485", + "slaveAddr": 1, + "int16Ord": "ab", + "int32Ord": "abcd", + "float32Ord": "abcd", + "mapping_table": [] + }, + "iec104Server": { + "enable": 0, + "cotSize": 2, + "port": 2404, + "serverList": [ + { + "asduAddr": 1 + } + ], + "kValue": 12, + "wValue": 8, + "t0": 15, + "t1": 15, + "t2": 10, + "t3": 20, + "maximumLink": 5, + "timeSet": 1, + "byteOrder": "abcd", + "mapping_table": [] + }, + "iec101Server": { + "enable": 0, + "coms": "rs485", + "mode": "UnBalance", + "linkLen": 2, + "linkAddr": 1, + "asduLen": 2, + "ioaLen": 3, + "cotLen": 2, + "serverList": [ + { + "asduAddr": 1 + } + ], + "linkTimeOut": 2000, + "timeSet": 1, + "idleTimeOut": 10000, + "byteOrder": "abcd", + "mapping_table": [] + }, + "iec104Client": { + "enable": 0, + "connectType": 2, + "serverAddr": "ipower.inhandcloud.cn", + "serverPort": 2406, + "communicationCode": "", + "protocol": 1, + "asduAddr": 1, + "tls": 1, + "verification": 1, + "mapping_table": { + "YX": [], + "YC": [], + "YK": [] + } + }, + "opcuaServer": { + "enable": 0, + "port": 4840, + "maximumLink": 5, + "securityMode": 0, + "identifierType": "String", + "certificate": "None", + "privateKey": "None", + "pubsub": 0, + "mapping_table": [] + }, + "southMetadata": {}, + "bindMetadata": { + "version": "", + "timestamp": "" + }, + "bindConfig": { + "enable": 0, + "bind": { + "modelId": "", + "modelName": "", + "srcId": "", + "srcName": "", + "devId": "", + "devName": "" + }, + "varGroups": [], + "variables": [], + "alerts": [] + }, + "version": "2.6.1" +} \ No newline at end of file diff --git a/Pub_Sub/hrtankbattery/thingsboard/hrtankbattery.csv b/Pub_Sub/hrtankbattery/thingsboard/hrtankbattery.csv index b21c131..a52d58f 100644 --- a/Pub_Sub/hrtankbattery/thingsboard/hrtankbattery.csv +++ b/Pub_Sub/hrtankbattery/thingsboard/hrtankbattery.csv @@ -1,132 +1,173 @@ -MeasuringPointName,ControllerName,GroupName,UploadType,DataType,Address,Decimal,Len,ReadWrite,Unit,Description,Transform Type,MaxValue,MinValue,MaxScale,MinScale,Gain,Offset,startBit,endBit -plc_io_fault_alm,hrtankbattery,default,periodic,BIT,IO_Fault_Alarm,2,1,ro,,,none,,,,,,,, -plc_fault,hrtankbattery,default,periodic,BIT,PLC_FAULT,2,1,ro,,,none,,,,,,,, -analog_01_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_01,2,1,ro,,,none,,,,,,,, -analog_02_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_02,2,1,ro,,,none,,,,,,,, -analog_03_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_03,2,1,ro,,,none,,,,,,,, -analog_04_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_04,2,1,ro,,,none,,,,,,,, -analog_05_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_05,2,1,ro,,,none,,,,,,,, -analog_06_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_06,2,1,ro,,,none,,,,,,,, -ac_power_alm,hrtankbattery,default,periodic,BIT,Alm_AC_Pwr.Alm_TgtDisagree,2,1,ro,,,none,,,,,,,, -ups_alm,hrtankbattery,default,periodic,BIT,Alm_UPS.Alm_TgtDisagree,2,1,ro,,,none,,,,,,,, -dc_power_alm,hrtankbattery,default,periodic,BIT,DC_Power_OK.Alm_TgtDisagree,2,1,ro,,,none,,,,,,,, -three_phase_pwr_alm,hrtankbattery,default,periodic,BIT,Three_Phase_Power_Alarm.Alm_TgtDisagree,2,1,ro,,,none,,,,,,,, -water_run_tank,hrtankbattery,default,periodic,DINT,WT_Selector,2,1,ro,,,none,,,,,,,, -water_01_level,hrtankbattery,default,periodic,FLOAT,WT_1.Val,2,1,ro,,,none,,,,,,,, -water_01_hihi_alm,hrtankbattery,default,periodic,BIT,WT_1.Alm_HiHi,2,1,ro,,,none,,,,,,,, -water_01_hi_alm,hrtankbattery,default,periodic,BIT,WT_1.Alm_Hi,2,1,ro,,,none,,,,,,,, -water_01_tx_alm,hrtankbattery,default,periodic,BIT,WT_1.Alm_Fail,2,1,ro,,,none,,,,,,,, -water_01_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_1.PSet_HiHiLim,2,1,ro,,,none,,,,,,,, -water_01_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_1.PSet_HiLim,2,1,ro,,,none,,,,,,,, -water_01_max_height,hrtankbattery,default,periodic,FLOAT,WT_1.Cfg_PVEUMax,2,1,ro,,,none,,,,,,,, -water_02_level,hrtankbattery,default,periodic,FLOAT,WT_2.Val,2,1,ro,,,none,,,,,,,, -water_02_hihi_alm,hrtankbattery,default,periodic,BIT,WT_2.Alm_HiHi,2,1,ro,,,none,,,,,,,, -water_02_hi_alm,hrtankbattery,default,periodic,BIT,WT_2.Alm_Hi,2,1,ro,,,none,,,,,,,, -water_02_tx_alm,hrtankbattery,default,periodic,BIT,WT_2.Alm_Fail,2,1,ro,,,none,,,,,,,, -water_02_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_2.PSet_HiHiLim,2,1,ro,,,none,,,,,,,, -water_02_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_2.PSet_HiLim,2,1,ro,,,none,,,,,,,, -water_02_max_height,hrtankbattery,default,periodic,FLOAT,WT_2.Cfg_PVEUMax,2,1,ro,,,none,,,,,,,, -water_03_level,hrtankbattery,default,periodic,FLOAT,WT_3.Val,2,1,ro,,,none,,,,,,,, -water_03_hihi_alm,hrtankbattery,default,periodic,BIT,WT_3.Alm_HiHi,2,1,ro,,,none,,,,,,,, -water_03_hi_alm,hrtankbattery,default,periodic,BIT,WT_3.Alm_Hi,2,1,ro,,,none,,,,,,,, -water_03_tx_alm,hrtankbattery,default,periodic,BIT,WT_3.Alm_Fail,2,1,ro,,,none,,,,,,,, -water_03_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_3.PSet_HiHiLim,2,1,ro,,,none,,,,,,,, -water_03_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_3.PSet_HiLim,2,1,ro,,,none,,,,,,,, -water_03_max_height,hrtankbattery,default,periodic,FLOAT,WT_3.Cfg_PVEUMax,2,1,ro,,,none,,,,,,,, -water_04_level,hrtankbattery,default,periodic,FLOAT,WT_4.Val,2,1,ro,,,none,,,,,,,, -water_04_hihi_alm,hrtankbattery,default,periodic,BIT,WT_4.Alm_HiHi,2,1,ro,,,none,,,,,,,, -water_04_hi_alm,hrtankbattery,default,periodic,BIT,WT_4.Alm_Hi,2,1,ro,,,none,,,,,,,, -water_04_tx_alm,hrtankbattery,default,periodic,BIT,WT_4.Alm_Fail,2,1,ro,,,none,,,,,,,, -water_04_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_4.PSet_HiHiLim,2,1,ro,,,none,,,,,,,, -water_04_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_4.PSet_HiLim,2,1,ro,,,none,,,,,,,, -water_04_max_height,hrtankbattery,default,periodic,FLOAT,WT_4.Cfg_PVEUMax,2,1,ro,,,none,,,,,,,, -water_05_level,hrtankbattery,default,periodic,FLOAT,WT_5.Val,2,1,ro,,,none,,,,,,,, -water_05_hihi_alm,hrtankbattery,default,periodic,BIT,WT_5.Alm_HiHi,2,1,ro,,,none,,,,,,,, -water_05_hi_alm,hrtankbattery,default,periodic,BIT,WT_5.Alm_Hi,2,1,ro,,,none,,,,,,,, -water_05_tx_alm,hrtankbattery,default,periodic,BIT,WT_5.Alm_Fail,2,1,ro,,,none,,,,,,,, -water_05_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_5.PSet_HiHiLim,2,1,ro,,,none,,,,,,,, -water_05_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_5.PSet_HiLim,2,1,ro,,,none,,,,,,,, -water_05_max_height,hrtankbattery,default,periodic,FLOAT,WT_5.Cfg_PVEUMax,2,1,ro,,,none,,,,,,,, -water_06_level,hrtankbattery,default,periodic,FLOAT,WT_6.Val,2,1,ro,,,none,,,,,,,, -water_06_hihi_alm,hrtankbattery,default,periodic,BIT,WT_6.Alm_HiHi,2,1,ro,,,none,,,,,,,, -water_06_hi_alm,hrtankbattery,default,periodic,BIT,WT_6.Alm_Hi,2,1,ro,,,none,,,,,,,, -water_06_tx_alm,hrtankbattery,default,periodic,BIT,WT_6.Alm_Fail,2,1,ro,,,none,,,,,,,, -water_06_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_6.PSet_HiHiLim,2,1,ro,,,none,,,,,,,, -water_06_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_6.PSet_HiLim,2,1,ro,,,none,,,,,,,, -water_06_max_height,hrtankbattery,default,periodic,FLOAT,WT_6.Cfg_PVEUMax,2,1,ro,,,none,,,,,,,, -oil_run_tank,hrtankbattery,default,periodic,DINT,OT_Selector,2,1,ro,,,none,,,,,,,, -oil_01_level,hrtankbattery,default,periodic,FLOAT,OT_1.Val,2,1,ro,,,none,,,,,,,, -oil_01_hihi_alm,hrtankbattery,default,periodic,BIT,OT_1.Alm_HiHi,2,1,ro,,,none,,,,,,,, -oil_01_hi_alm,hrtankbattery,default,periodic,BIT,OT_1.Alm_Hi,2,1,ro,,,none,,,,,,,, -oil_01_tx_alm,hrtankbattery,default,periodic,BIT,OT_1.Alm_Fail,2,1,ro,,,none,,,,,,,, -oil_01_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_1.PSet_HiHiLim,2,1,ro,,,none,,,,,,,, -oil_01_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_1.PSet_HiLim,2,1,ro,,,none,,,,,,,, -oil_01_max_height,hrtankbattery,default,periodic,FLOAT,OT_1.Cfg_PVEUMax,2,1,ro,,,none,,,,,,,, -oil_02_level,hrtankbattery,default,periodic,FLOAT,OT_2.Val,2,1,ro,,,none,,,,,,,, -oil_02_hihi_alm,hrtankbattery,default,periodic,BIT,OT_2.Alm_HiHi,2,1,ro,,,none,,,,,,,, -oil_02_hi_alm,hrtankbattery,default,periodic,BIT,OT_2.Alm_Hi,2,1,ro,,,none,,,,,,,, -oil_02_tx_alm,hrtankbattery,default,periodic,BIT,OT_2.Alm_Fail,2,1,ro,,,none,,,,,,,, -oil_02_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_2.PSet_HiHiLim,2,1,ro,,,none,,,,,,,, -oil_02_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_2.PSet_HiLim,2,1,ro,,,none,,,,,,,, -oil_02_max_height,hrtankbattery,default,periodic,FLOAT,OT_2.Cfg_PVEUMax,2,1,ro,,,none,,,,,,,, -oil_03_level,hrtankbattery,default,periodic,FLOAT,OT_3.Val,2,1,ro,,,none,,,,,,,, -oil_03_hihi_alm,hrtankbattery,default,periodic,BIT,OT_3.Alm_HiHi,2,1,ro,,,none,,,,,,,, -oil_03_hi_alm,hrtankbattery,default,periodic,BIT,OT_3.Alm_Hi,2,1,ro,,,none,,,,,,,, -oil_03_tx_alm,hrtankbattery,default,periodic,BIT,OT_3.Alm_Fail,2,1,ro,,,none,,,,,,,, -oil_03_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_3.PSet_HiHiLim,2,1,ro,,,none,,,,,,,, -oil_03_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_3.PSet_HiLim,2,1,ro,,,none,,,,,,,, -oil_03_max_height,hrtankbattery,default,periodic,FLOAT,OT_3.Cfg_PVEUMax,2,1,ro,,,none,,,,,,,, -oil_04_level,hrtankbattery,default,periodic,FLOAT,OT_4.Val,2,1,ro,,,none,,,,,,,, -oil_04_hihi_alm,hrtankbattery,default,periodic,BIT,OT_4.Alm_HiHi,2,1,ro,,,none,,,,,,,, -oil_04_hi_alm,hrtankbattery,default,periodic,BIT,OT_4.Alm_Hi,2,1,ro,,,none,,,,,,,, -oil_04_tx_alm,hrtankbattery,default,periodic,BIT,OT_4.Alm_Fail,2,1,ro,,,none,,,,,,,, -oil_04_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_4.PSet_HiHiLim,2,1,ro,,,none,,,,,,,, -oil_04_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_4.PSet_HiLim,2,1,ro,,,none,,,,,,,, -oil_04_max_height,hrtankbattery,default,periodic,FLOAT,OT_4.Cfg_PVEUMax,2,1,ro,,,none,,,,,,,, -oil_05_level,hrtankbattery,default,periodic,FLOAT,OT_5.Val,2,1,ro,,,none,,,,,,,, -oil_05_hihi_alm,hrtankbattery,default,periodic,BIT,OT_5.Alm_HiHi,2,1,ro,,,none,,,,,,,, -oil_05_hi_alm,hrtankbattery,default,periodic,BIT,OT_5.Alm_Hi,2,1,ro,,,none,,,,,,,, -oil_05_tx_alm,hrtankbattery,default,periodic,BIT,OT_5.Alm_Fail,2,1,ro,,,none,,,,,,,, -oil_05_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_5.PSet_HiHiLim,2,1,ro,,,none,,,,,,,, -oil_05_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_5.PSet_HiLim,2,1,ro,,,none,,,,,,,, -oil_05_max_height,hrtankbattery,default,periodic,FLOAT,OT_5.Cfg_PVEUMax,2,1,ro,,,none,,,,,,,, -oil_06_level,hrtankbattery,default,periodic,FLOAT,OT_6.Val,2,1,ro,,,none,,,,,,,, -oil_06_hihi_alm,hrtankbattery,default,periodic,BIT,OT_6.Alm_HiHi,2,1,ro,,,none,,,,,,,, -oil_06_hi_alm,hrtankbattery,default,periodic,BIT,OT_6.Alm_Hi,2,1,ro,,,none,,,,,,,, -oil_06_tx_alm,hrtankbattery,default,periodic,BIT,OT_6.Alm_Fail,2,1,ro,,,none,,,,,,,, -oil_06_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_6.PSet_HiHiLim,2,1,ro,,,none,,,,,,,, -oil_06_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_6.PSet_HiLim,2,1,ro,,,none,,,,,,,, -oil_06_max_height,hrtankbattery,default,periodic,FLOAT,OT_6.Cfg_PVEUMax,2,1,ro,,,none,,,,,,,, -transfer_01_sts,hrtankbattery,default,periodic,BIT,XFER_PUMP_Motor_01.Sts_Running,2,1,ro,,,none,,,,,,,, -transfer_01_alm,hrtankbattery,default,periodic,BIT,XFER_PUMP_Motor_01.Alm_FailToStart,2,1,ro,,,none,,,,,,,, -transfer_01_discharge,hrtankbattery,default,periodic,FLOAT,XferPump_01_Dis_PSI.Val,2,1,ro,,,none,,,,,,,, -transfer_01_discharge_hihi_alm,hrtankbattery,default,periodic,BIT,XferPump_01_Dis_PSI.Alm_HiHi,2,1,ro,,,none,,,,,,,, -transfer_01_discharge_lolo_alm,hrtankbattery,default,periodic,BIT,XferPump_01_Dis_PSI.Alm_LoLo,2,1,ro,,,none,,,,,,,, -transfer_01_flow_rate,hrtankbattery,default,periodic,FLOAT,XferPump_01_FlowRate.Val,2,1,ro,,,none,,,,,,,, -transfer_01_flow_rate_hihi_alm,hrtankbattery,default,periodic,BIT,XferPump_01_FlowRate.Alm_HiHi,2,1,ro,,,none,,,,,,,, -transfer_01_flow_rate_lolo_alm,hrtankbattery,default,periodic,BIT,XferPump_01_FlowRate.Alm_LoLo,2,1,ro,,,none,,,,,,,, -transfer_02_sts,hrtankbattery,default,periodic,BIT,XFER_PUMP_Motor_02.Sts_Running,2,1,ro,,,none,,,,,,,, -transfer_02_alm,hrtankbattery,default,periodic,BIT,XFER_PUMP_Motor_02.Alm_FailToStart,2,1,ro,,,none,,,,,,,, -transfer_02_discharge,hrtankbattery,default,periodic,FLOAT,XferPump_02_Dis_PSI.Val,2,1,ro,,,none,,,,,,,, -transfer_02_discharge_hihi_alm,hrtankbattery,default,periodic,BIT,XferPump_02_Dis_PSI.Alm_HiHi,2,1,ro,,,none,,,,,,,, -transfer_02_discharge_lolo_alm,hrtankbattery,default,periodic,BIT,XferPump_02_Dis_PSI.Alm_LoLo,2,1,ro,,,none,,,,,,,, -transfer_02_flow_rate,hrtankbattery,default,periodic,FLOAT,XferPump_02_FlowRate.Val,2,1,ro,,,none,,,,,,,, -transfer_02_flow_rate_hihi_alm,hrtankbattery,default,periodic,BIT,XferPump_02_FlowRate.Alm_HiHi,2,1,ro,,,none,,,,,,,, -transfer_02_flow_rate_lolo_alm,hrtankbattery,default,periodic,BIT,XferPump_02_FlowRate.Alm_LoLo,2,1,ro,,,none,,,,,,,, -lact_01_permissive,hrtankbattery,default,periodic,BIT,LACT_01_Permissive,2,1,ro,,,none,,,,,,,, -lact_01_sts,hrtankbattery,default,periodic,BIT,LACT_01_Run_Status,2,1,ro,,,none,,,,,,,, -lact_01_alm,hrtankbattery,default,periodic,BIT,LACT_01_Failure,2,1,ro,,,none,,,,,,,, -lact_01_oil_shutdown,hrtankbattery,default,periodic,BIT,LACT_01_Bad_Oil_Shutdown,2,1,ro,,,none,,,,,,,, -lact_01_flow_rate,hrtankbattery,default,periodic,FLOAT,Lact_01_Realtime_Flow_Rate,2,1,ro,,,none,,,,,,,, -lact_01_bs_w,hrtankbattery,default,periodic,FLOAT,Lact_01_BS_and_W_Reading,2,1,ro,,,none,,,,,,,, -lact_01_daily_volume,hrtankbattery,default,periodic,FLOAT,Lact_01_Current_Daily_Ind_Volume_Total,2,1,ro,,,none,,,,,,,, -lact_01_prev_day,hrtankbattery,default,periodic,FLOAT,Lact_01_History.Previous_Day_1,2,1,ro,,,none,,,,,,,, -lact_02_permissive,hrtankbattery,default,periodic,BIT,LACT_02_Permissive,2,1,ro,,,none,,,,,,,, -lact_02_sts,hrtankbattery,default,periodic,BIT,LACT_02_Run_Status,2,1,ro,,,none,,,,,,,, -lact_02_alm,hrtankbattery,default,periodic,BIT,LACT_02_Failure,2,1,ro,,,none,,,,,,,, -lact_02_oil_shutdown,hrtankbattery,default,periodic,BIT,LACT_02_Bad_Oil_Shutdown,2,1,ro,,,none,,,,,,,, -lact_02_flow_rate,hrtankbattery,default,periodic,FLOAT,Lact_02_Realtime_Flow_Rate,2,1,ro,,,none,,,,,,,, -lact_02_bs_w,hrtankbattery,default,periodic,FLOAT,Lact_02_BS_and_W_Reading,2,1,ro,,,none,,,,,,,, -lact_02_daily_volume,hrtankbattery,default,periodic,FLOAT,Lact_02_Current_Daily_Ind_Volume_Total,2,1,ro,,,none,,,,,,,, -lact_02_prev_day,hrtankbattery,default,periodic,FLOAT,Lact_02_History.Previous_Day_1,2,1,ro,,,none,,,,,,,, -containment_high_alm,hrtankbattery,default,periodic,BIT,Contain_Hi_Level.Alm_TgtDisagree,2,1,ro,,,none,,,,,,,, +MeasuringPointName,ControllerName,GroupName,UploadType,DataType,Address,Decimal,Len,ReadWrite,Unit,Description,Transform Type,MaxValue,MinValue,MaxScale,MinScale,Gain,Offset,startBit,endBit,bitMap,msecSample +plc_io_fault_alm,hrtankbattery,default,periodic,BIT,IO_Fault_Alarm,,,ro,,,none,,,,,,,,,0, +plc_fault,hrtankbattery,default,periodic,BIT,PLC_FAULT,,,ro,,,none,,,,,,,,,0, +analog_01_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_01,,,ro,,,none,,,,,,,,,0, +analog_02_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_02,,,ro,,,none,,,,,,,,,0, +analog_03_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_03,,,ro,,,none,,,,,,,,,0, +analog_04_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_04,,,ro,,,none,,,,,,,,,0, +analog_05_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_05,,,ro,,,none,,,,,,,,,0, +analog_06_alm,hrtankbattery,default,periodic,BIT,Fault_Analog_Mod_06,,,ro,,,none,,,,,,,,,0, +ac_power_alm,hrtankbattery,default,periodic,BIT,Alm_AC_Pwr.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0, +ups_alm,hrtankbattery,default,periodic,BIT,Alm_UPS.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0, +dc_power_alm,hrtankbattery,default,periodic,BIT,DC_Power_OK.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0, +three_phase_pwr_alm,hrtankbattery,default,periodic,BIT,Three_Phase_Power_Alarm.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0, +count_oil_tanks,hrtankbattery,default,periodic,DINT,NUMBER_OF_OIL_TANKS,,,ro,,,none,,,,,,,,,, +count_water_tanks,hrtankbattery,default,periodic,DINT,NUMBER_OF_WTR_TANKS,,,ro,,,none,,,,,,,,,, +count_flow_meters,hrtankbattery,default,periodic,DINT,NUMBER_OF_FLOWMETERS,,,ro,,,none,,,,,,,,,, +count_transfer_pumps,hrtankbattery,default,periodic,DINT,NUMBER_OF_TRANSFER_PUMPS,,,ro,,,none,,,,,,,,,, +count_lacts,hrtankbattery,default,periodic,DINT,NUMBER_OF_LACTS,,,ro,,,none,,,,,,,,,, +water_run_tank,hrtankbattery,default,periodic,DINT,WT_Selector,,,ro,,,none,,,,,,,,,, +water_01_level,hrtankbattery,default,periodic,FLOAT,WT_1.Val,2,,ro,,,none,,,,,,,,,, +water_run_tank_volume,hrtankbattery,default,periodic,FLOAT,Curent_Water_Tank_Volume,2,,ro,,,none,,,,,,,,,, +water_gauge_off_volume,hrtankbattery,default,periodic,FLOAT,Gauge_Off_Water_Tank_Volume,2,,ro,,,none,,,,,,,,,, +water_01_hihi_alm,hrtankbattery,default,periodic,BIT,WT_1.Alm_HiHi,,,ro,,,none,,,,,,,,,0, +water_01_hi_alm,hrtankbattery,default,periodic,BIT,WT_1.Alm_Hi,,,ro,,,none,,,,,,,,,0, +water_01_tx_alm,hrtankbattery,default,periodic,BIT,WT_1.Alm_Fail,,,ro,,,none,,,,,,,,,0, +water_01_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_1.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,, +water_01_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_1.PSet_HiLim,2,,ro,,,none,,,,,,,,,, +water_01_max_height,hrtankbattery,default,periodic,FLOAT,WT_1.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,, +water_02_level,hrtankbattery,default,periodic,FLOAT,WT_2.Val,2,,ro,,,none,,,,,,,,,, +water_02_hihi_alm,hrtankbattery,default,periodic,BIT,WT_2.Alm_HiHi,,,ro,,,none,,,,,,,,,0, +water_02_hi_alm,hrtankbattery,default,periodic,BIT,WT_2.Alm_Hi,,,ro,,,none,,,,,,,,,0, +water_02_tx_alm,hrtankbattery,default,periodic,BIT,WT_2.Alm_Fail,,,ro,,,none,,,,,,,,,0, +water_02_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_2.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,, +water_02_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_2.PSet_HiLim,2,,ro,,,none,,,,,,,,,, +water_02_max_height,hrtankbattery,default,periodic,FLOAT,WT_2.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,, +water_03_level,hrtankbattery,default,periodic,FLOAT,WT_3.Val,2,,ro,,,none,,,,,,,,,, +water_03_hihi_alm,hrtankbattery,default,periodic,BIT,WT_3.Alm_HiHi,,,ro,,,none,,,,,,,,,0, +water_03_hi_alm,hrtankbattery,default,periodic,BIT,WT_3.Alm_Hi,,,ro,,,none,,,,,,,,,0, +water_03_tx_alm,hrtankbattery,default,periodic,BIT,WT_3.Alm_Fail,,,ro,,,none,,,,,,,,,0, +water_03_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_3.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,, +water_03_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_3.PSet_HiLim,2,,ro,,,none,,,,,,,,,, +water_03_max_height,hrtankbattery,default,periodic,FLOAT,WT_3.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,, +water_04_level,hrtankbattery,default,periodic,FLOAT,WT_4.Val,2,,ro,,,none,,,,,,,,,, +water_04_hihi_alm,hrtankbattery,default,periodic,BIT,WT_4.Alm_HiHi,,,ro,,,none,,,,,,,,,0, +water_04_hi_alm,hrtankbattery,default,periodic,BIT,WT_4.Alm_Hi,,,ro,,,none,,,,,,,,,0, +water_04_tx_alm,hrtankbattery,default,periodic,BIT,WT_4.Alm_Fail,,,ro,,,none,,,,,,,,,0, +water_04_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_4.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,, +water_04_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_4.PSet_HiLim,2,,ro,,,none,,,,,,,,,, +water_04_max_height,hrtankbattery,default,periodic,FLOAT,WT_4.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,, +water_05_level,hrtankbattery,default,periodic,FLOAT,WT_5.Val,2,,ro,,,none,,,,,,,,,, +water_05_hihi_alm,hrtankbattery,default,periodic,BIT,WT_5.Alm_HiHi,,,ro,,,none,,,,,,,,,0, +water_05_hi_alm,hrtankbattery,default,periodic,BIT,WT_5.Alm_Hi,,,ro,,,none,,,,,,,,,0, +water_05_tx_alm,hrtankbattery,default,periodic,BIT,WT_5.Alm_Fail,,,ro,,,none,,,,,,,,,0, +water_05_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_5.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,, +water_05_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_5.PSet_HiLim,2,,ro,,,none,,,,,,,,,, +water_05_max_height,hrtankbattery,default,periodic,FLOAT,WT_5.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,, +water_06_level,hrtankbattery,default,periodic,FLOAT,WT_6.Val,2,,ro,,,none,,,,,,,,,, +water_06_hihi_alm,hrtankbattery,default,periodic,BIT,WT_6.Alm_HiHi,,,ro,,,none,,,,,,,,,0, +water_06_hi_alm,hrtankbattery,default,periodic,BIT,WT_6.Alm_Hi,,,ro,,,none,,,,,,,,,0, +water_06_tx_alm,hrtankbattery,default,periodic,BIT,WT_6.Alm_Fail,,,ro,,,none,,,,,,,,,0, +water_06_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_6.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,, +water_06_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_6.PSet_HiLim,2,,ro,,,none,,,,,,,,,, +water_06_max_height,hrtankbattery,default,periodic,FLOAT,WT_6.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,, +water_07_level,hrtankbattery,default,periodic,FLOAT,WT_7.Val,2,,ro,,,none,,,,,,,,,, +water_07_hihi_alm,hrtankbattery,default,periodic,BIT,WT_7.Alm_HiHi,,,ro,,,none,,,,,,,,,0, +water_07_hi_alm,hrtankbattery,default,periodic,BIT,WT_7.Alm_Hi,,,ro,,,none,,,,,,,,,0, +water_07_tx_alm,hrtankbattery,default,periodic,BIT,WT_7.Alm_Fail,,,ro,,,none,,,,,,,,,0, +water_07_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_7.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,, +water_07_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_7.PSet_HiLim,2,,ro,,,none,,,,,,,,,, +water_07_max_height,hrtankbattery,default,periodic,FLOAT,WT_7.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,, +water_08_level,hrtankbattery,default,periodic,FLOAT,WT_8.Val,2,,ro,,,none,,,,,,,,,, +water_08_hihi_alm,hrtankbattery,default,periodic,BIT,WT_8.Alm_HiHi,,,ro,,,none,,,,,,,,,0, +water_08_hi_alm,hrtankbattery,default,periodic,BIT,WT_8.Alm_Hi,,,ro,,,none,,,,,,,,,0, +water_08_tx_alm,hrtankbattery,default,periodic,BIT,WT_8.Alm_Fail,,,ro,,,none,,,,,,,,,0, +water_08_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_8.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,, +water_08_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_8.PSet_HiLim,2,,ro,,,none,,,,,,,,,, +water_08_max_height,hrtankbattery,default,periodic,FLOAT,WT_8.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,, +water_09_level,hrtankbattery,default,periodic,FLOAT,WT_9.Val,2,,ro,,,none,,,,,,,,,, +water_09_hihi_alm,hrtankbattery,default,periodic,BIT,WT_9.Alm_HiHi,,,ro,,,none,,,,,,,,,0, +water_09_hi_alm,hrtankbattery,default,periodic,BIT,WT_9.Alm_Hi,,,ro,,,none,,,,,,,,,0, +water_09_tx_alm,hrtankbattery,default,periodic,BIT,WT_9.Alm_Fail,,,ro,,,none,,,,,,,,,0, +water_09_hihi_spt,hrtankbattery,default,periodic,FLOAT,WT_9.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,, +water_09_hi_spt,hrtankbattery,default,periodic,FLOAT,WT_9.PSet_HiLim,2,,ro,,,none,,,,,,,,,, +water_09_max_height,hrtankbattery,default,periodic,FLOAT,WT_9.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,, +oil_run_tank,hrtankbattery,default,periodic,DINT,OT_Selector,,,ro,,,none,,,,,,,,,, +oil_run_tank_volume,hrtankbattery,default,periodic,FLOAT,Current_Oil_Tank_Volume,2,,ro,,,none,,,,,,,,,, +oil_gauge_off_volume,hrtankbattery,default,periodic,FLOAT,Gauge_Off_Oil_Tank_Volume,2,,ro,,,none,,,,,,,,,, +oil_01_level,hrtankbattery,default,periodic,FLOAT,OT_1.Val,2,,ro,,,none,,,,,,,,,, +oil_01_hihi_alm,hrtankbattery,default,periodic,BIT,OT_1.Alm_HiHi,,,ro,,,none,,,,,,,,,0, +oil_01_hi_alm,hrtankbattery,default,periodic,BIT,OT_1.Alm_Hi,,,ro,,,none,,,,,,,,,0, +oil_01_tx_alm,hrtankbattery,default,periodic,BIT,OT_1.Alm_Fail,,,ro,,,none,,,,,,,,,0, +oil_01_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_1.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,, +oil_01_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_1.PSet_HiLim,2,,ro,,,none,,,,,,,,,, +oil_01_max_height,hrtankbattery,default,periodic,FLOAT,OT_1.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,, +oil_02_level,hrtankbattery,default,periodic,FLOAT,OT_2.Val,2,,ro,,,none,,,,,,,,,, +oil_02_hihi_alm,hrtankbattery,default,periodic,BIT,OT_2.Alm_HiHi,,,ro,,,none,,,,,,,,,0, +oil_02_hi_alm,hrtankbattery,default,periodic,BIT,OT_2.Alm_Hi,,,ro,,,none,,,,,,,,,0, +oil_02_tx_alm,hrtankbattery,default,periodic,BIT,OT_2.Alm_Fail,,,ro,,,none,,,,,,,,,0, +oil_02_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_2.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,, +oil_02_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_2.PSet_HiLim,2,,ro,,,none,,,,,,,,,, +oil_02_max_height,hrtankbattery,default,periodic,FLOAT,OT_2.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,, +oil_03_level,hrtankbattery,default,periodic,FLOAT,OT_3.Val,2,,ro,,,none,,,,,,,,,, +oil_03_hihi_alm,hrtankbattery,default,periodic,BIT,OT_3.Alm_HiHi,,,ro,,,none,,,,,,,,,0, +oil_03_hi_alm,hrtankbattery,default,periodic,BIT,OT_3.Alm_Hi,,,ro,,,none,,,,,,,,,0, +oil_03_tx_alm,hrtankbattery,default,periodic,BIT,OT_3.Alm_Fail,,,ro,,,none,,,,,,,,,0, +oil_03_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_3.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,, +oil_03_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_3.PSet_HiLim,2,,ro,,,none,,,,,,,,,, +oil_03_max_height,hrtankbattery,default,periodic,FLOAT,OT_3.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,, +oil_04_level,hrtankbattery,default,periodic,FLOAT,OT_4.Val,2,,ro,,,none,,,,,,,,,, +oil_04_hihi_alm,hrtankbattery,default,periodic,BIT,OT_4.Alm_HiHi,,,ro,,,none,,,,,,,,,0, +oil_04_hi_alm,hrtankbattery,default,periodic,BIT,OT_4.Alm_Hi,,,ro,,,none,,,,,,,,,0, +oil_04_tx_alm,hrtankbattery,default,periodic,BIT,OT_4.Alm_Fail,,,ro,,,none,,,,,,,,,0, +oil_04_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_4.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,, +oil_04_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_4.PSet_HiLim,2,,ro,,,none,,,,,,,,,, +oil_04_max_height,hrtankbattery,default,periodic,FLOAT,OT_4.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,, +oil_05_level,hrtankbattery,default,periodic,FLOAT,OT_5.Val,2,,ro,,,none,,,,,,,,,, +oil_05_hihi_alm,hrtankbattery,default,periodic,BIT,OT_5.Alm_HiHi,,,ro,,,none,,,,,,,,,0, +oil_05_hi_alm,hrtankbattery,default,periodic,BIT,OT_5.Alm_Hi,,,ro,,,none,,,,,,,,,0, +oil_05_tx_alm,hrtankbattery,default,periodic,BIT,OT_5.Alm_Fail,,,ro,,,none,,,,,,,,,0, +oil_05_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_5.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,, +oil_05_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_5.PSet_HiLim,2,,ro,,,none,,,,,,,,,, +oil_05_max_height,hrtankbattery,default,periodic,FLOAT,OT_5.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,, +oil_06_level,hrtankbattery,default,periodic,FLOAT,OT_6.Val,2,,ro,,,none,,,,,,,,,, +oil_06_hihi_alm,hrtankbattery,default,periodic,BIT,OT_6.Alm_HiHi,,,ro,,,none,,,,,,,,,0, +oil_06_hi_alm,hrtankbattery,default,periodic,BIT,OT_6.Alm_Hi,,,ro,,,none,,,,,,,,,0, +oil_06_tx_alm,hrtankbattery,default,periodic,BIT,OT_6.Alm_Fail,,,ro,,,none,,,,,,,,,0, +oil_06_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_6.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,, +oil_06_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_6.PSet_HiLim,2,,ro,,,none,,,,,,,,,, +oil_06_max_height,hrtankbattery,default,periodic,FLOAT,OT_6.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,, +oil_07_level,hrtankbattery,default,periodic,FLOAT,OT_7.Val,2,,ro,,,none,,,,,,,,,, +oil_07_hihi_alm,hrtankbattery,default,periodic,BIT,OT_7.Alm_HiHi,,,ro,,,none,,,,,,,,,0, +oil_07_hi_alm,hrtankbattery,default,periodic,BIT,OT_7.Alm_Hi,,,ro,,,none,,,,,,,,,0, +oil_07_tx_alm,hrtankbattery,default,periodic,BIT,OT_7.Alm_Fail,,,ro,,,none,,,,,,,,,0, +oil_07_hihi_spt,hrtankbattery,default,periodic,FLOAT,OT_7.PSet_HiHiLim,2,,ro,,,none,,,,,,,,,, +oil_07_hi_spt,hrtankbattery,default,periodic,FLOAT,OT_7.PSet_HiLim,2,,ro,,,none,,,,,,,,,, +oil_07_max_height,hrtankbattery,default,periodic,FLOAT,OT_7.Cfg_PVEUMax,2,,ro,,,none,,,,,,,,,, +transfer_01_sts,hrtankbattery,default,periodic,BIT,XFER_PUMP_Motor_01.Sts_Running,,,ro,,,none,,,,,,,,,0, +transfer_01_alm,hrtankbattery,default,periodic,BIT,XFER_PUMP_Motor_01.Alm_FailToStart,,,ro,,,none,,,,,,,,,0, +transfer_01_discharge,hrtankbattery,default,periodic,FLOAT,XferPump_01_Dis_PSI.Val,2,,ro,,,none,,,,,,,,,, +transfer_01_discharge_hihi_alm,hrtankbattery,default,periodic,BIT,XferPump_01_Dis_PSI.Alm_HiHi,,,ro,,,none,,,,,,,,,0, +transfer_01_discharge_lolo_alm,hrtankbattery,default,periodic,BIT,XferPump_01_Dis_PSI.Alm_LoLo,,,ro,,,none,,,,,,,,,0, +transfer_01_flow_rate,hrtankbattery,default,periodic,FLOAT,XferPump_01_FlowRate.Val,2,,ro,,,none,,,,,,,,,, +transfer_01_flow_rate_hihi_alm,hrtankbattery,default,periodic,BIT,XferPump_01_FlowRate.Alm_HiHi,,,ro,,,none,,,,,,,,,0, +transfer_01_flow_rate_lolo_alm,hrtankbattery,default,periodic,BIT,XferPump_01_FlowRate.Alm_LoLo,,,ro,,,none,,,,,,,,,0, +transfer_01_3_phase_pwr_alm,hrtankbattery,default,periodic,BIT,Transfer_Pump_3_Phase_Power_Alarm.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0, +transfer_02_sts,hrtankbattery,default,periodic,BIT,XFER_PUMP_Motor_02.Sts_Running,,,ro,,,none,,,,,,,,,0, +transfer_02_alm,hrtankbattery,default,periodic,BIT,XFER_PUMP_Motor_02.Alm_FailToStart,,,ro,,,none,,,,,,,,,0, +transfer_02_discharge,hrtankbattery,default,periodic,FLOAT,XferPump_02_Dis_PSI.Val,2,,ro,,,none,,,,,,,,,, +transfer_02_discharge_hihi_alm,hrtankbattery,default,periodic,BIT,XferPump_02_Dis_PSI.Alm_HiHi,,,ro,,,none,,,,,,,,,0, +transfer_02_discharge_lolo_alm,hrtankbattery,default,periodic,BIT,XferPump_02_Dis_PSI.Alm_LoLo,,,ro,,,none,,,,,,,,,0, +transfer_02_flow_rate,hrtankbattery,default,periodic,FLOAT,XferPump_02_FlowRate.Val,2,,ro,,,none,,,,,,,,,, +transfer_02_flow_rate_hihi_alm,hrtankbattery,default,periodic,BIT,XferPump_02_FlowRate.Alm_HiHi,,,ro,,,none,,,,,,,,,0, +transfer_02_flow_rate_lolo_alm,hrtankbattery,default,periodic,BIT,XferPump_02_FlowRate.Alm_LoLo,,,ro,,,none,,,,,,,,,0, +lact_01_permissive,hrtankbattery,default,periodic,BIT,LACT_01_Permissive,,,ro,,,none,,,,,,,,,0, +lact_01_sts,hrtankbattery,default,periodic,BIT,LACT_01_Run_Status,,,ro,,,none,,,,,,,,,0, +lact_01_alm,hrtankbattery,default,periodic,BIT,LACT_01_Failure,,,ro,,,none,,,,,,,,,0, +lact_01_oil_shutdown,hrtankbattery,default,periodic,BIT,LACT_01_Bad_Oil_Shutdown,,,ro,,,none,,,,,,,,,0, +lact_01_flow_rate,hrtankbattery,default,periodic,FLOAT,Lact_01_Realtime_Flow_Rate,2,,ro,,,none,,,,,,,,,, +lact_01_bs_w,hrtankbattery,default,periodic,FLOAT,Lact_01_BS_and_W_Reading,2,,ro,,,none,,,,,,,,,, +lact_01_daily_volume,hrtankbattery,default,periodic,FLOAT,Lact_01_Current_Daily_Ind_Volume_Total,2,,ro,,,none,,,,,,,,,, +lact_01_prev_day,hrtankbattery,default,periodic,FLOAT,Lact_01_Yesterday_Total,2,,ro,,,none,,,,,,,,,, +lact_01_lifetime,hrtankbattery,default,periodic,FLOAT,Lact_01_Cumulative_Ind_Volume,2,,ro,,,none,,,,,,,,,, +lact_02_permissive,hrtankbattery,default,periodic,BIT,LACT_02_Permissive,,,ro,,,none,,,,,,,,,0, +lact_02_sts,hrtankbattery,default,periodic,BIT,LACT_02_Run_Status,,,ro,,,none,,,,,,,,,0, +lact_02_alm,hrtankbattery,default,periodic,BIT,LACT_02_Failure,,,ro,,,none,,,,,,,,,0, +lact_02_oil_shutdown,hrtankbattery,default,periodic,BIT,LACT_02_Bad_Oil_Shutdown,,,ro,,,none,,,,,,,,,0, +lact_02_flow_rate,hrtankbattery,default,periodic,FLOAT,Lact_02_Realtime_Flow_Rate,2,,ro,,,none,,,,,,,,,, +lact_02_bs_w,hrtankbattery,default,periodic,FLOAT,Lact_02_BS_and_W_Reading,2,,ro,,,none,,,,,,,,,, +lact_02_daily_volume,hrtankbattery,default,periodic,FLOAT,Lact_02_Current_Daily_Ind_Volume_Total,2,,ro,,,none,,,,,,,,,, +lact_02_prev_day,hrtankbattery,default,periodic,FLOAT,Lact_02_Yesterday_Total,2,,ro,,,none,,,,,,,,,, +lact_02_lifetime,hrtankbattery,default,periodic,FLOAT,Lact_02_Cumulative_Ind_Volume,2,,ro,,,none,,,,,,,,,, +containment_high_alm,hrtankbattery,default,periodic,BIT,Contain_Hi_Level.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0, +h2s_alm,hrtankbattery,default,periodic,BIT,H2s_Alarm.Alm_TgtDisagree,,,ro,,,none,,,,,,,,,0, \ No newline at end of file diff --git a/Pub_Sub/plcfreshwater/mistaway/v1/plcfreshwater_ma_v2-dawn-to-terri.cfg b/Pub_Sub/plcfreshwater/mistaway/v1/plcfreshwater_ma_v2-dawn-to-terri.cfg new file mode 100644 index 0000000..decc81b --- /dev/null +++ b/Pub_Sub/plcfreshwater/mistaway/v1/plcfreshwater_ma_v2-dawn-to-terri.cfg @@ -0,0 +1,376 @@ +{ + "controllers": [ + { + "enable": 1, + "protocol": "AllenBradley MicroCip", + "name": "plcfreshwater", + "samplePeriod": 10, + "desc": "", + "expired": 1000, + "args": { + "slot": 0, + "connectTimeOut": 10000 + }, + "enableDebug": 0, + "enablePerOnchange": 0, + "endpoint": "192.168.1.222:44818" + } + ], + "measures": [ + { + "ctrlName": "plcfreshwater", + "dataType": "FLOAT", + "addr": "Scaled_Flow_Meter", + "readWrite": "ro", + "uploadType": "periodic", + "group": "default", + "decimal": 2, + "name": "scaled_flow_meter", + "desc": "", + "unit": "", + "transformType": 0, + "gain": "1.0", + "offset": "0.0", + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "" + }, + { + "ctrlName": "plcfreshwater", + "dataType": "FLOAT", + "addr": "Scaled_Pressure_Transducer", + "readWrite": "ro", + "uploadType": "periodic", + "group": "default", + "decimal": 2, + "name": "scaled_pressure_transducer", + "desc": "", + "unit": "", + "transformType": 0, + "gain": "1.0", + "offset": "0.0", + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "" + }, + { + "ctrlName": "plcfreshwater", + "dataType": "BIT", + "addr": "Raw_Hand_Input", + "readWrite": "ro", + "uploadType": "periodic", + "group": "default", + "name": "raw_hand_input", + "desc": "", + "unit": "", + "transformType": 0, + "gain": "1.0", + "offset": "0.0", + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "decimal": 2 + }, + { + "ctrlName": "plcfreshwater", + "dataType": "BIT", + "addr": "Raw_Auto_Input", + "readWrite": "ro", + "uploadType": "periodic", + "group": "default", + "name": "raw_auto_input", + "desc": "", + "unit": "", + "transformType": 0, + "gain": "1.0", + "offset": "0.0", + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "decimal": 2 + }, + { + "ctrlName": "plcfreshwater", + "dataType": "BIT", + "addr": "Raw_Run_Status", + "readWrite": "ro", + "uploadType": "periodic", + "group": "default", + "name": "raw_run_status", + "desc": "", + "unit": "", + "transformType": 0, + "gain": "1.0", + "offset": "0.0", + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "decimal": 2 + }, + { + "ctrlName": "plcfreshwater", + "dataType": "BIT", + "addr": "Raw_Local_Start", + "readWrite": "ro", + "uploadType": "periodic", + "group": "default", + "name": "raw_local_start", + "desc": "", + "unit": "", + "transformType": 0, + "gain": "1.0", + "offset": "0.0", + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "decimal": 2 + }, + { + "ctrlName": "plcfreshwater", + "dataType": "FLOAT", + "addr": "Lifetime_Flow_Meter_Gal", + "readWrite": "ro", + "uploadType": "periodic", + "group": "default", + "decimal": 2, + "name": "lifetime_flow_meter_gal", + "desc": "", + "unit": "", + "transformType": 0, + "gain": "1.0", + "offset": "0.0", + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "" + }, + { + "ctrlName": "plcfreshwater", + "dataType": "BIT", + "addr": "SPT_Flow_Meter_Unit", + "readWrite": "ro", + "uploadType": "periodic", + "group": "default", + "name": "spt_flow_meter_unit", + "desc": "", + "unit": "", + "transformType": 0, + "gain": "1.0", + "offset": "0.0", + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "decimal": 2 + }, + { + "ctrlName": "plcfreshwater", + "dataType": "BIT", + "addr": "Raw_Overload_Status", + "readWrite": "ro", + "uploadType": "periodic", + "group": "default", + "name": "raw_overload_status", + "desc": "", + "unit": "", + "transformType": 0, + "gain": "1.0", + "offset": "0.0", + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "decimal": 2 + }, + { + "ctrlName": "plcfreshwater", + "dataType": "BIT", + "addr": "CMD_Cloud_Control", + "readWrite": "rw", + "uploadType": "periodic", + "group": "default", + "name": "CMD_Cloud_Control", + "desc": "", + "unit": "", + "transformType": 0, + "gain": "1.0", + "offset": "0.0", + "maxValue": "", + "minValue": "", + "maxScaleValue": "", + "minScaleValue": "", + "decimal": 2 + } + ], + "alarmLables": [ + "default" + ], + "alarms": [], + "groups": [ + { + "name": "default", + "uploadInterval": 600, + "reference": 10 + } + ], + "misc": { + "maxAlarmRecordSz": 2000, + "logLvl": "INFO", + "coms": [ + { + "name": "rs232", + "baud": 9600, + "bits": 8, + "stopbits": 1, + "parityChk": "n" + }, + { + "name": "rs485", + "baud": 9600, + "bits": 8, + "stopbits": 1, + "parityChk": "n" + } + ] + }, + "clouds": [ + { + "cacheSize": 100, + "enable": 1, + "name": "default", + "type": "Standard MQTT", + "args": { + "host": "mq194.imistaway.net", + "port": 1883, + "clientId": "dawn-to-terri", + "auth": 1, + "tls": 0, + "cleanSession": 0, + "mqttVersion": "v3.1.1", + "keepalive": 60, + "key": "", + "cert": "", + "rootCA": "", + "verifyServer": 0, + "verifyClient": 0, + "username": "admin", + "passwd": "columbus", + "authType": 1 + } + } + ], + "quickfaas": { + "genericFuncs": [], + "uploadFuncs": [ + { + "name": "Send Data", + "trigger": "measure_event", + "topic": "meshify/db/194/_/plcfreshwater/${MAC_LOWER}", + "qos": 1, + "groups": [ + "default" + ], + "funcName": "sendData", + "script": "import json, os, uuid\nfrom common.Logger import logger\nfrom quickfaas.remotebus import publish\nfrom paho.mqtt import client\nfrom quickfaas.global_dict import get as get_params\nfrom quickfaas.global_dict import _set_global_args\n\ndef reboot():\n #basic = Basic()\n logger.info(\"!\" * 10 + \"REBOOTING DEVICE\" + \"!\"*10)\n r = os.popen(\"kill -s SIGHUP `cat /var/run/python/supervisord.pid`\").read()\n logger.info(f\"REBOOT : {r}\")\n\ndef checkFileExist(filename):\n path = \"/var/user/files\"\n if not os.path.exists(path):\n logger.info(\"no folder making files folder in var/user\")\n os.makedirs(path)\n with open(path + \"/\" + filename, \"a\") as f:\n json.dump({}, f)\n if not os.path.exists(path + \"/\" + filename):\n logger.info(\"no creds file making creds file\")\n with open(path + \"/\" + filename, \"a\") as f:\n json.dump({}, f)\n\ndef convertDStoJSON(ds):\n j = dict()\n for x in ds:\n j[x[\"key\"]] = x[\"value\"]\n return j\n\ndef convertJSONtoDS(j):\n d = []\n for key in j.keys():\n d.append({\"key\": key, \"value\": j[key]})\n return d\n\ndef checkCredentialConfig():\n logger.info(\"CHECKING CONFIG\")\n cfgpath = \"/var/user/cfg/device_supervisor/device_supervisor.cfg\"\n credspath = \"/var/user/files/creds.json\"\n cfg = dict()\n with open(cfgpath, \"r\") as f:\n cfg = json.load(f)\n clouds = cfg.get(\"clouds\")\n logger.info(clouds)\n #if not configured then try to configure from stored values\n if clouds[0][\"args\"][\"clientId\"] == \"unknown\" or clouds[0][\"args\"][\"username\"] == \"unknown\" or not clouds[0][\"args\"][\"passwd\"] or clouds[0][\"args\"][\"passwd\"] == \"unknown\":\n checkFileExist(\"creds.json\")\n with open(credspath, \"r\") as c:\n creds = json.load(c)\n if creds:\n logger.info(\"updating config with stored data\")\n clouds[0][\"args\"][\"clientId\"] = creds[\"clientId\"]\n clouds[0][\"args\"][\"username\"] = creds[\"userName\"]\n clouds[0][\"args\"][\"passwd\"] = creds[\"password\"]\n cfg[\"clouds\"] = clouds\n cfg = checkParameterConfig(cfg)\n with open(cfgpath, \"w\", encoding='utf-8') as n:\n json.dump(cfg, n, indent=1, ensure_ascii=False)\n reboot()\n else:\n #assuming clouds is filled out, if data is different then assume someone typed in something new and store it, if creds is empty fill with clouds' data\n checkFileExist(\"creds.json\")\n with open(credspath, \"r\") as c:\n logger.info(\"updating stored file with new data\")\n cfg = checkParameterConfig(cfg)\n with open(cfgpath, \"w\", encoding='utf-8') as n:\n json.dump(cfg, n, indent=1, ensure_ascii=False)\n creds = json.load(c)\n if creds:\n if creds[\"clientId\"] != clouds[0][\"args\"][\"clientId\"]:\n creds[\"clientId\"] = clouds[0][\"args\"][\"clientId\"]\n if creds[\"userName\"] != clouds[0][\"args\"][\"username\"]:\n creds[\"userName\"] = clouds[0][\"args\"][\"username\"]\n if creds[\"password\"] != clouds[0][\"args\"][\"passwd\"]:\n creds[\"password\"] = clouds[0][\"args\"][\"passwd\"]\n else:\n creds[\"clientId\"] = clouds[0][\"args\"][\"clientId\"]\n creds[\"userName\"] = clouds[0][\"args\"][\"username\"]\n creds[\"password\"] = clouds[0][\"args\"][\"passwd\"]\n with open(credspath, \"w\") as cw:\n json.dump(creds,cw)\n\ndef checkParameterConfig(cfg):\n logger.info(\"Checking Parameters!!!!\")\n paramspath = \"/var/user/files/params.json\"\n cfgparams = convertDStoJSON(cfg.get(\"labels\"))\n #check stored values \n checkFileExist(\"params.json\")\n with open(paramspath, \"r\") as f:\n logger.info(\"Opened param storage file\")\n params = json.load(f)\n if params:\n if cfgparams != params:\n #go through each param\n #if not \"unknown\" and cfg and params aren't the same take from cfg likely updated manually\n #if key in cfg but not in params copy to params\n logger.info(\"equalizing params between cfg and stored\")\n for key in cfgparams.keys():\n try:\n if cfgparams[key] != params[key] and cfgparams[key] != \"unknown\":\n params[key] = cfgparams[key]\n except:\n params[key] = cfgparams[key]\n cfg[\"labels\"] = convertJSONtoDS(params)\n _set_global_args(convertJSONtoDS(params))\n with open(paramspath, \"w\") as p:\n json.dump(params, p)\n else:\n with open(paramspath, \"w\") as p:\n logger.info(\"initializing param file with params in memory\")\n json.dump(convertDStoJSON(get_params()), p)\n cfg[\"labels\"] = get_params()\n \n return cfg\n\n\nlwtData = {\n \"init\":False,\n \"client\": client.Client(client_id=str(uuid.uuid4()), clean_session=True, userdata=None, protocol=client.MQTTv311, transport=\"tcp\")\n}\ndef lwt(mac):\n try:\n #if not lwtData[\"connected\"]:\n if not lwtData[\"init\"]:\n print(\"INITIALIZING LWT CLIENT\")\n lwtData[\"client\"].username_pw_set(username=\"admin\", password=\"columbus\")\n lwtData[\"client\"].will_set(\"meshify/db/194/_/mainHP/\" + mac + \":00:00/connected\",json.dumps([{\"value\":False}]))\n lwtData[\"client\"].reconnect_delay_set(min_delay=10, max_delay=120)\n lwtData[\"init\"] = True\n print(\"Connecting to MQTT Broker for LWT purposes!!!!!!!\")\n lwtData[\"client\"].connect(\"mq194.imistaway.net\",1883, 600)\n lwtData[\"client\"].reconnect()\n lwtData[\"client\"].publish(\"meshify/db/194/_/mainHP/\" + mac + \":00:00/connected\", json.dumps([{\"value\":True}]))\n except Exception as e:\n print(\"LWT DID NOT DO THE THING\")\n print(e)\n\ndef sendData(message):\n #logger.debug(message)\n mac = __topic__.split(\"/\")[-1] #':'.join(re.findall('..', '%012x' % uuid.getnode()))\n lwt(mac)\n checkCredentialConfig()\n plc_ping = os.system(\"ping -c 1 192.168.1.101 > /dev/null 2>&1\")\n if plc_ping == 0:\n publish(__topic__ + \":01:99/\" + \"plc_ping\", json.dumps({\"value\": \"OK\"}), __qos__)\n else:\n publish(__topic__ + \":01:99/\" + \"plc_ping\", json.dumps({\"value\": \"Comms Error to PLC\"}), __qos__)\n for measure in message[\"measures\"]:\n try:\n logger.debug(measure)\n if measure[\"name\"] in [\"raw_hand_input\", \"raw_auto_input\", \"raw_run_status\", \"raw_local_start\",\"raw_overload_status\"]:\n logger.debug(\"Converting DINT/BOOL to STRING\")\n value = convert_int(measure[\"name\"], measure[\"value\"])\n logger.debug(\"Converted {} to {}\".format(measure[\"value\"], value))\n publish(__topic__ + \":01:99/\" + measure[\"name\"], json.dumps({\"value\": value}), __qos__)\n else:\n publish(__topic__ + \":01:99/\" + measure[\"name\"], json.dumps({\"value\": measure[\"value\"]}), __qos__)\n except Exception as e:\n logger.error(e)\n\ndef convert_int(plc_tag, value):\n input_codes = {\n 0: \"Off\",\n 1: \"On\"\n }\n\n run_status_codes = {\n 0: \"Stopped\",\n 1: \"Running\"\n }\n\n overload_codes = {\n 0: \"Good\",\n 1: \"Down on Overload Tripped\"\n }\n \n plc_tags = {\n \"raw_hand_input\": input_codes.get(value, \"Invalid Code\"),\n \"raw_auto_input\": input_codes.get(value, \"Invalid Code\"),\n \"raw_run_status\": run_status_codes.get(value, \"Invalid Code\"),\n \"raw_overload_status\": overload_codes.get(value, \"Invalid Code\")\n }\n\n return plc_tags.get(plc_tag, \"Invalid Tag\")\n\n ", + "msgType": 0, + "cloudName": "default" + } + ], + "downloadFuncs": [ + { + "name": "Commands", + "topic": "meshify/sets/194/${MAC_UPPER}:01:99", + "qos": 1, + "funcName": "receiveCommand", + "payload_type": "Plaintext", + "script": "# Enter your python code.\nimport json\nimport os\nfrom quickfaas.measure import recall\nfrom common.Logger import logger\n\ndef sync(mac,value, wizard_api):\n #get new values and send\n try:\n data = recall()#json.loads(recall().decode(\"utf-8\"))\n except Exception as e:\n logger.error(e)\n logger.info(data)\n plc_ping = os.system(\"ping -c 1 192.168.1.101 > /dev/null 2>&1\")\n if plc_ping == 0:\n publish(__topic__ + \":01:99/\" + \"plc_ping\", json.dumps({\"value\": \"OK\"}), __qos__)\n else:\n publish(__topic__ + \":01:99/\" + \"plc_ping\", json.dumps({\"value\": \"Comms Error to PLC\"}), __qos__)\n for controller in data:\n for measure in controller[\"measures\"]:\n #publish measure\n topic = \"meshify/db/194/_/plcfreshwater/\" + mac + \"/\" + measure[\"name\"]\n if measure[\"name\"] in [\"raw_hand_input\", \"raw_auto_input\", \"raw_run_status\", \"raw_local_start\",\"raw_overload_status\"]:\n payload = [{\"value\": convert_int(measure[\"name\"], measure[\"value\"])}]\n else:\n payload = [{\"value\": measure[\"value\"]}]\n logger.debug(\"Sending on topic: {}\".format(topic))\n logger.debug(\"Sending value: {}\".format(payload))\n wizard_api.mqtt_publish(topic, json.dumps(payload))\ndef writeplctag(mac, value, wizard_api):\n try:\n value = json.loads(value.replace(\"'\",'\"'))\n logger.debug(value)\n message = {\"plcfreshwater\":{value[\"tag\"]: value[\"val\"]}}\n wizard_api.write_plc_values(message)\n except Exception as e:\n logger.debug(e)\n \ndef receiveCommand(topic, payload, wizard_api):\n logger.debug(topic)\n logger.debug(json.loads(payload))\n p = json.loads(payload)[0]\n command = p[\"payload\"][\"name\"].split(\".\")[1]\n commands = {\n \"sync\": sync,\n \"writeplctag\": writeplctag,\n }\n commands[command](p[\"mac\"].lower(),p[\"payload\"][\"value\"], wizard_api)\n #logger.debug(command)\n ack(p[\"msgId\"], p[\"mac\"], command, p[\"payload\"][\"name\"].split(\".\")[1], p[\"payload\"][\"value\"], wizard_api)\n\ndef ack(msgid, mac, name, command, value, wizard_api):\n #logger.debug(mac)\n macsquish = \"\".join(mac.split(\":\")[:-2])\n maclower = \":\".join(mac.split(\":\")[:-2])\n maclower = maclower.lower()\n #logger.debug(msgid)\n #logger.debug(mac)\n #logger.debug(name)\n #logger.debug(value)\n wizard_api.mqtt_publish(\"meshify/responses/\" + str(msgid), json.dumps([{\"value\": \"{} Success Setting: {} To: {}\".format(macsquish,name, value), \"msgid\": str(msgid)}]))\n wizard_api.mqtt_publish(\"meshify/db/194/_/mainMeshify/\" + maclower + \":00:00/commands\", json.dumps([{\"value\": {\"status\": \"success\", \"value\": str(value), \"channel\": command}, \"msgid\": str(msgid)}]))\n\ndef convert_int(plc_tag, value):\n input_codes = {\n 0: \"Off\",\n 1: \"On\"\n }\n\n run_status_codes = {\n 0: \"Stopped\",\n 1: \"Running\"\n }\n\n overload_codes = {\n 0: \"Good\",\n 1: \"Down on Overload Tripped\"\n }\n \n plc_tags = {\n \"raw_hand_input\": input_codes.get(value, \"Invalid Code\"),\n \"raw_auto_input\": input_codes.get(value, \"Invalid Code\"),\n \"raw_run_status\": run_status_codes.get(value, \"Invalid Code\"),\n \"raw_overload_status\": overload_codes.get(value, \"Invalid Code\")\n }\n\n return plc_tags.get(plc_tag, \"Invalid Tag\")\n", + "msgType": 0, + "cloudName": "default", + "trigger": "command_event" + } + ] + }, + "labels": [ + { + "key": "SN", + "value": "GF5022211011405" + }, + { + "key": "MAC", + "value": "00:18:05:1e:ae:b8" + }, + { + "key": "MAC_LOWER", + "value": "00:00:06:00:00:06" + }, + { + "key": "MAC_UPPER", + "value": "00:00:06:00:00:06" + } + ], + "modbusSlave": { + "enable": 0, + "protocol": "Modbus-TCP", + "port": 502, + "slaveAddr": 1, + "int16Ord": "ab", + "int32Ord": "abcd", + "float32Ord": "abcd", + "maxConnection": 5, + "mapping_table": [] + }, + "iec104Server": { + "enable": 0, + "cotSize": 2, + "port": 2404, + "serverList": [ + { + "asduAddr": 1 + } + ], + "kValue": 12, + "wValue": 8, + "t0": 30, + "t1": 15, + "t2": 10, + "t3": 20, + "maximumLink": 5, + "timeSet": 1, + "byteOrder": "abcd", + "mapping_table": [] + }, + "opcuaServer": { + "enable": 0, + "port": 4840, + "maximumLink": 5, + "securityMode": 0, + "identifierType": "String", + "mapping_table": [] + }, + "southMetadata": {}, + "bindMetadata": { + "version": "", + "timestamp": "" + }, + "bindConfig": { + "enable": 0, + "bind": { + "modelId": "", + "modelName": "", + "srcId": "", + "srcName": "", + "devId": "", + "devName": "" + }, + "varGroups": [], + "variables": [], + "alerts": [] + }, + "version": "2.2.1" +} \ No newline at end of file diff --git a/Pub_Sub/plcfreshwater_advvfdipp/thingsboard/v2/sub/receiveCommand.py b/Pub_Sub/plcfreshwater_advvfdipp/thingsboard/v2/sub/receiveCommand.py new file mode 100644 index 0000000..cfab9d3 --- /dev/null +++ b/Pub_Sub/plcfreshwater_advvfdipp/thingsboard/v2/sub/receiveCommand.py @@ -0,0 +1,67 @@ +import json, time +from quickfaas.measure import recall, write +from quickfaas.remotebus import publish +from common.Logger import logger + +def sync(): + #get new values and send + payload = {} + 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[measure["name"]] = measure["value"] + logger.debug("Sending on topic: {}".format(topic)) + logger.debug("Sending value: {}".format(payload)) + publish(topic, json.dumps(payload), 1) +def writeplctag(value): + #value in the form {"measurement": , "value": } + try: + #value = json.loads(value.replace("'",'"')) + logger.debug(value) + #payload format: [{"name": "advvfdipp", "measures": [{"name": "manualfrequencysetpoint", "value": 49}]}] + message = [{"name": "plcfreshwater", "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 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) +