1851 lines
76 KiB
INI
1851 lines
76 KiB
INI
{
|
|
"controllers": [
|
|
{
|
|
"enable": 1,
|
|
"protocol": "AllenBradley MicroCip",
|
|
"name": "00:00:06:00:00:01",
|
|
"samplePeriod": 30,
|
|
"desc": "Monique #1",
|
|
"expired": 30000,
|
|
"args": {
|
|
"slot": 0,
|
|
"connectTimeOut": 30000
|
|
},
|
|
"enableDebug": 0,
|
|
"enablePerOnchange": 0,
|
|
"endpoint": "192.168.1.217:44818"
|
|
},
|
|
{
|
|
"enable": 1,
|
|
"name": "00:00:06:00:00:02",
|
|
"samplePeriod": 30,
|
|
"desc": "Monique #2",
|
|
"expired": 30000,
|
|
"args": {
|
|
"connectTimeOut": 30000,
|
|
"slot": 0
|
|
},
|
|
"enableDebug": 0,
|
|
"protocol": "AllenBradley MicroCip",
|
|
"enablePerOnchange": 0,
|
|
"endpoint": "192.168.1.218:44818"
|
|
},
|
|
{
|
|
"enable": 1,
|
|
"name": "00:00:06:00:00:03",
|
|
"samplePeriod": 30,
|
|
"desc": "Monique #3",
|
|
"expired": 30000,
|
|
"args": {
|
|
"connectTimeOut": 30000,
|
|
"slot": 0
|
|
},
|
|
"enableDebug": 0,
|
|
"protocol": "AllenBradley MicroCip",
|
|
"enablePerOnchange": 0,
|
|
"endpoint": "192.168.1.219:44818"
|
|
},
|
|
{
|
|
"enable": 1,
|
|
"name": "00:00:06:00:00:04",
|
|
"samplePeriod": 30,
|
|
"desc": "Dawn #2",
|
|
"expired": 30000,
|
|
"args": {
|
|
"connectTimeOut": 30000,
|
|
"slot": 0
|
|
},
|
|
"enableDebug": 0,
|
|
"protocol": "AllenBradley MicroCip",
|
|
"enablePerOnchange": 0,
|
|
"endpoint": "192.168.1.221:44818"
|
|
},
|
|
{
|
|
"enable": 1,
|
|
"name": "00:00:06:00:00:05",
|
|
"samplePeriod": 30,
|
|
"desc": "Dawn #3",
|
|
"expired": 30000,
|
|
"args": {
|
|
"connectTimeOut": 30000,
|
|
"slot": 0
|
|
},
|
|
"enableDebug": 0,
|
|
"protocol": "AllenBradley MicroCip",
|
|
"enablePerOnchange": 0,
|
|
"endpoint": "192.168.1.220:44818"
|
|
},
|
|
{
|
|
"enable": 1,
|
|
"protocol": "AllenBradley MicroCip",
|
|
"name": "00:00:06:00:00:06",
|
|
"samplePeriod": 30,
|
|
"desc": "Dawn to Terri",
|
|
"expired": 30000,
|
|
"args": {
|
|
"slot": 0,
|
|
"connectTimeOut": 30000
|
|
},
|
|
"enableDebug": 0,
|
|
"enablePerOnchange": 0,
|
|
"endpoint": "192.168.1.222:44818"
|
|
}
|
|
],
|
|
"measures": [
|
|
{
|
|
"name": "scaled_flow_meter",
|
|
"ctrlName": "00:00:06:00:00:01",
|
|
"group": "default",
|
|
"uploadType": "periodic",
|
|
"dataType": "FLOAT",
|
|
"addr": "Scaled_Flow_Meter",
|
|
"decimal": 2,
|
|
"readWrite": "ro",
|
|
"unit": "",
|
|
"desc": "",
|
|
"storageLwTSDB": 0,
|
|
"transformType": 0
|
|
},
|
|
{
|
|
"name": "scaled_pressure_transducer",
|
|
"ctrlName": "00:00:06:00:00:01",
|
|
"group": "default",
|
|
"uploadType": "periodic",
|
|
"dataType": "FLOAT",
|
|
"addr": "Scaled_Pressure_Transducer",
|
|
"decimal": 2,
|
|
"readWrite": "ro",
|
|
"unit": "",
|
|
"desc": "",
|
|
"storageLwTSDB": 0,
|
|
"transformType": 0
|
|
},
|
|
{
|
|
"name": "raw_hand_input",
|
|
"ctrlName": "00:00:06:00:00:01",
|
|
"group": "default",
|
|
"uploadType": "periodic",
|
|
"dataType": "BIT",
|
|
"addr": "Raw_Hand_Input",
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"readWrite": "ro",
|
|
"unit": "",
|
|
"desc": "",
|
|
"storageLwTSDB": 0,
|
|
"transformType": 0
|
|
},
|
|
{
|
|
"name": "raw_auto_input",
|
|
"ctrlName": "00:00:06:00:00:01",
|
|
"group": "default",
|
|
"uploadType": "periodic",
|
|
"dataType": "BIT",
|
|
"addr": "Raw_Auto_Input",
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"readWrite": "ro",
|
|
"unit": "",
|
|
"desc": "",
|
|
"storageLwTSDB": 0,
|
|
"transformType": 0
|
|
},
|
|
{
|
|
"name": "raw_run_status",
|
|
"ctrlName": "00:00:06:00:00:01",
|
|
"group": "default",
|
|
"uploadType": "periodic",
|
|
"dataType": "BIT",
|
|
"addr": "Raw_Run_Status",
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"readWrite": "ro",
|
|
"unit": "",
|
|
"desc": "",
|
|
"storageLwTSDB": 0,
|
|
"transformType": 0
|
|
},
|
|
{
|
|
"name": "raw_local_start",
|
|
"ctrlName": "00:00:06:00:00:01",
|
|
"group": "default",
|
|
"uploadType": "periodic",
|
|
"dataType": "BIT",
|
|
"addr": "Raw_Local_Start",
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"readWrite": "ro",
|
|
"unit": "",
|
|
"desc": "",
|
|
"storageLwTSDB": 0,
|
|
"transformType": 0
|
|
},
|
|
{
|
|
"name": "lifetime_flow_meter_gal",
|
|
"ctrlName": "00:00:06:00:00:01",
|
|
"group": "default",
|
|
"uploadType": "periodic",
|
|
"dataType": "FLOAT",
|
|
"addr": "Lifetime_Flow_Meter_Gal",
|
|
"decimal": 2,
|
|
"readWrite": "ro",
|
|
"unit": "",
|
|
"desc": "",
|
|
"storageLwTSDB": 0,
|
|
"transformType": 0
|
|
},
|
|
{
|
|
"name": "spt_flow_meter_unit",
|
|
"ctrlName": "00:00:06:00:00:01",
|
|
"group": "default",
|
|
"uploadType": "periodic",
|
|
"dataType": "BIT",
|
|
"addr": "SPT_Flow_Meter_Unit",
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"readWrite": "ro",
|
|
"unit": "",
|
|
"desc": "",
|
|
"storageLwTSDB": 0,
|
|
"transformType": 0
|
|
},
|
|
{
|
|
"name": "raw_overload_status",
|
|
"ctrlName": "00:00:06:00:00:01",
|
|
"group": "default",
|
|
"uploadType": "periodic",
|
|
"dataType": "BIT",
|
|
"addr": "Raw_Overload_Status",
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"readWrite": "ro",
|
|
"unit": "",
|
|
"desc": "",
|
|
"storageLwTSDB": 0,
|
|
"transformType": 0
|
|
},
|
|
{
|
|
"name": "CMD_Cloud_Control",
|
|
"ctrlName": "00:00:06:00:00:01",
|
|
"group": "default",
|
|
"uploadType": "periodic",
|
|
"dataType": "BIT",
|
|
"addr": "CMD_Cloud_Control",
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"readWrite": "rw",
|
|
"unit": "",
|
|
"desc": "",
|
|
"storageLwTSDB": 0,
|
|
"transformType": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:06",
|
|
"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": "",
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:06",
|
|
"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": "",
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:06",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:06",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:06",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:06",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:06",
|
|
"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": "",
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:06",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:06",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:06",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:02",
|
|
"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": "",
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:02",
|
|
"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": "",
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:02",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:02",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:02",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:02",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:02",
|
|
"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": "",
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:02",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:02",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:02",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:03",
|
|
"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": "",
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:03",
|
|
"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": "",
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:03",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:03",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:03",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:03",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:03",
|
|
"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": "",
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:03",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:03",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:03",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:04",
|
|
"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": "",
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:04",
|
|
"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": "",
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:04",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:04",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:04",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:04",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:04",
|
|
"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": "",
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:04",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:04",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:04",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:05",
|
|
"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": "",
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:05",
|
|
"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": "",
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:05",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:05",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:05",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:05",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:05",
|
|
"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": "",
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:05",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:05",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:05",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
}
|
|
],
|
|
"alarmLables": [
|
|
"default"
|
|
],
|
|
"alarms": [],
|
|
"groups": [
|
|
{
|
|
"name": "default",
|
|
"uploadInterval": 600,
|
|
"reference": 10,
|
|
"LwTSDBSize": 1000,
|
|
"strategy": 1,
|
|
"historyDataPath": "/var/user/data/dbhome/device_supervisor/LwTSDB",
|
|
"enablePerOnchange": 0
|
|
}
|
|
],
|
|
"misc": {
|
|
"maxAlarmRecordSz": 2000,
|
|
"logLvl": "INFO",
|
|
"coms": [
|
|
{
|
|
"name": "rs232",
|
|
"baud": 9600,
|
|
"bits": 8,
|
|
"stopbits": 1,
|
|
"parityChk": "n"
|
|
},
|
|
{
|
|
"name": "rs485",
|
|
"baud": 9600,
|
|
"bits": 8,
|
|
"stopbits": 1,
|
|
"parityChk": "n"
|
|
}
|
|
],
|
|
"cachePath": "/var/user/data/dbhome/device_supervisor/offlinedata",
|
|
"cacheSize": 10000,
|
|
"debugLogPath": "/var/user/data/dbhome/device_supervisor/debugLog",
|
|
"debugLogSize": 2000
|
|
},
|
|
"clouds": [
|
|
{
|
|
"cacheSize": 10000,
|
|
"enable": 1,
|
|
"name": "default",
|
|
"type": "Standard MQTT",
|
|
"args": {
|
|
"host": "mq194.imistaway.net",
|
|
"port": 1883,
|
|
"clientId": "dawn-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,
|
|
"willQos": 0,
|
|
"willRetain": 0,
|
|
"willTopic": "",
|
|
"willPayload": "",
|
|
"tlsAuth": "caSelfSigned"
|
|
},
|
|
"uploadRules": []
|
|
}
|
|
],
|
|
"quickfaas": {
|
|
"genericFuncs": [],
|
|
"uploadFuncs": [
|
|
{
|
|
"name": "Send Data",
|
|
"trigger": "measure_event",
|
|
"topic": "meshify/db/194/_/plcfreshwater/",
|
|
"qos": 1,
|
|
"groups": [
|
|
"default"
|
|
],
|
|
"funcName": "sendData",
|
|
"script": "import json, os, uuid\nfrom datetime import datetime as dt\nfrom common.Logger import logger\nfrom paho.mqtt import client\nfrom quickfaas.remotebus import publish\nfrom quickfaas.global_dict import get as get_params\nfrom quickfaas.global_dict import _set_global_args\n\ndef reboot(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 try:\n if not os.path.exists(path):\n logger.debug(\"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 except Exception as e:\n logger.error(f\"Something went wrong in checkFileExist while making folder: {e}\")\n \n try:\n if not os.path.exists(path + \"/\" + filename):\n logger.debug(\"no creds file making creds file\")\n with open(path + \"/\" + filename, \"a\") as f:\n json.dump({}, f)\n except Exception as e:\n logger.error(f\"Something went wrong in checkFileExist wihle making file: {e}\")\n\ndef convertDStoJSON(ds):\n j = dict()\n try:\n for x in ds:\n j[x[\"key\"]] = x[\"value\"]\n except Exception as e:\n logger.error(f\"Something went wrong in convertDStoJSON: {e}\")\n return j\n\ndef convertJSONtoDS(j):\n d = []\n try:\n for key in j.keys():\n d.append({\"key\": key, \"value\": j[key]})\n except Exception as e:\n logger.error(f\"Something went wrong in convertJSONtoDS: {e}\")\n return d\n\ndef checkCredentialConfig():\n logger.debug(\"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 try:\n cfg = json.load(f)\n clouds = cfg.get(\"clouds\")\n logger.debug(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 try:\n checkFileExist(\"creds.json\")\n except Exception as e:\n logger.error(f\"Error in checkFileExist: {e}\")\n with open(credspath, \"r\") as c:\n try:\n creds = json.load(c)\n if creds:\n logger.debug(\"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 except Exception as e:\n logger.error(f\"Error trying to load credentials from file: {e}\")\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.debug(\"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 except Exception as e:\n logger.error(f\"Somethign went wrong in checkCredentialConfig: {e}\")\n\ndef checkParameterConfig(cfg):\n try:\n logger.debug(\"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.debug(\"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.debug(\"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.debug(\"initializing param file with params in memory\")\n json.dump(convertDStoJSON(get_params()), p)\n cfg[\"labels\"] = get_params()\n \n return cfg\n except Exception as e:\n logger.error(f\"Something went wrong in checkParameterConfig: {e}\")\n os.system(f'rm {paramspath}')\n return cfg\n\npayload = {}\n\ndef get_totalizers(mac):\n try:\n mac = \"\".join(mac.split(\":\"))\n with open(f\"/var/user/files/totalizers_{mac}.json\", \"r\") as t:\n totalizers = json.load(t)\n if not totalizers:\n logger.info(\"-----INITIALIZING TOTALIZERS-----\")\n totalizers = {\n \"day\": 0,\n \"week\": 0,\n \"month\": 0,\n \"year\": 0,\n \"lifetime\": 0,\n \"dayHolding\": 0,\n \"weekHolding\": 0,\n \"monthHolding\": 0,\n \"yearHolding\": 0\n }\n except:\n totalizers = {\n \"day\": 0,\n \"week\": 0,\n \"month\": 0,\n \"year\": 0,\n \"lifetime\": 0,\n \"dayHolding\": 0,\n \"weekHolding\": 0,\n \"monthHolding\": 0,\n \"yearHolding\": 0\n }\n return totalizers\n\n\ndef lwt(mac, lwtData):\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\nlwtData = {}\n\ndef sendData(message,wizard_api):\n logger.debug(message)\n checkCredentialConfig()\n \n for device in message[\"values\"].keys():\n if not device in lwtData.keys():\n lwtData[device] = {\n \"init\":False,\n \"client\": client.Client(client_id=str(uuid.uuid4()), clean_session=True, userdata=None, protocol=client.MQTTv311, transport=\"tcp\")\n }\n #setup LWT and refresh status\n lwt(device, lwtData[device])\n payload = {\"ts\": (round(dt.timestamp(dt.now())/600)*600)*1000, \"values\": {}}\n resetPayload = {\"ts\": \"\", \"values\": {}}\n dayReset, weekReset, monthReset, yearReset = False, False, False, False\n for measure in message[\"values\"][device].keys():\n try:\n if message[\"values\"][device][measure][\"status\"] == 1:\n if measure in [\"lifetime_flow_meter_gal\"]:\n payload[\"values\"][\"total_fm_day_gal\"], payload[\"values\"][\"total_fm_day_bbls\"],dayReset = totalizeDay(message[\"values\"][device][measure][\"raw_data\"], device)\n #payload[\"values\"][\"week_volume\"], weekReset = totalizeWeek(message[\"values\"][device][measure][\"raw_data\"])\n payload[\"values\"][\"total_fm_month_gal\"],payload[\"values\"][\"total_fm_month_bbls\"], monthReset = totalizeMonth(message[\"values\"][device][measure][\"raw_data\"], device)\n #payload[\"values\"][\"year_volume\"], yearReset = totalizeYear(message[\"values\"][device][measure][\"raw_data\"])\n payload[\"values\"][\"lifetime_flow_meter_gal\"] = message[\"values\"][device][measure][\"raw_data\"]\n payload[\"values\"][\"lifetime_flow_meter_bbls\"] = message[\"values\"][device][measure][\"raw_data\"]/42\n elif measure in [\"raw_hand_input\", \"raw_auto_input\", \"raw_run_status\", \"raw_local_start\",\"raw_overload_status\"]:\n payload[\"values\"][measure] = convert_int(measure, message[\"values\"][device][measure][\"raw_data\"])\n else:\n payload[\"values\"][measure] = message[\"values\"][device][measure][\"raw_data\"]\n except Exception as e:\n logger.error(e)\n \n if payload[\"values\"]:\n payload[\"values\"][\"plc_ping\"] = \"OK\"\n else:\n payload[\"values\"][\"plc_ping\"] = \"Comms Error to PLC\"\n\n for measure in payload[\"values\"].keys():\n publish(__topic__+ device + \":01:99/\" + measure, json.dumps({\"value\": payload[\"values\"][measure]}), __qos__)\n\n if dayReset:\n resetPayload[\"values\"][\"total_fm_yesterday_gal\"] = payload[\"values\"][\"total_fm_day_gal\"]\n resetPayload[\"values\"][\"total_fm_day_gal\"] = 0\n resetPayload[\"values\"][\"total_fm_yesterday_bbls\"] = payload[\"values\"][\"total_fm_day_bbls\"]\n resetPayload[\"values\"][\"total_fm_day_bbls\"] = 0\n if weekReset:\n resetPayload[\"values\"][\"last_week_volume\"] = payload[\"values\"][\"week_volume\"]\n resetPayload[\"values\"][\"week_volume\"] = 0\n if monthReset:\n resetPayload[\"values\"][\"total_fm_last_month_gal\"] = payload[\"values\"][\"total_fm_month_gal\"]\n resetPayload[\"values\"][\"total_fm_month_gal\"] = 0\n resetPayload[\"values\"][\"total_fm_last_month_bbls\"] = payload[\"values\"][\"total_fm_month_bbls\"]\n resetPayload[\"values\"][\"total_fm_month_bbls\"] = 0\n if yearReset:\n resetPayload[\"values\"][\"last_year_volume\"] = payload[\"values\"][\"year_volume\"]\n resetPayload[\"values\"][\"year_volume\"] = 0 \n\n if resetPayload[\"values\"]:\n for measure in resetPayload[\"values\"].keys():\n publish(__topic__+ device + \":01:99/\" + measure, json.dumps({\"value\": resetPayload[\"values\"][measure]}), __qos__)\n\ndef saveTotalizers(totalizers, mac):\n try:\n mac = \"\".join(mac.split(\":\"))\n with open(f\"/var/user/files/totalizers_{mac}.json\", \"w\") as t:\n json.dump(totalizers,t)\n except Exception as e:\n logger.error(e)\n\n\ndef totalizeDay(lifetime, mac):\n totalizers = get_totalizers(mac)\n now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)\n reset = False\n value = lifetime - totalizers[\"dayHolding\"]\n if not int(now.strftime(\"%d\")) == int(totalizers[\"day\"]):\n totalizers[\"dayHolding\"] = lifetime\n totalizers[\"day\"] = int(now.strftime(\"%d\"))\n saveTotalizers(totalizers, mac)\n reset = True\n return (value,value / 42,reset)\n\ndef totalizeWeek(lifetime, mac):\n totalizers = get_totalizers(mac)\n now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)\n reset = False\n value = lifetime - totalizers[\"weekHolding\"]\n if (not now.strftime(\"%U\") == totalizers[\"week\"] and now.strftime(\"%a\") == \"Sun\") or totalizers[\"week\"] == 0:\n totalizers[\"weekHolding\"] = lifetime\n totalizers[\"week\"] = now.strftime(\"%U\")\n saveTotalizers(totalizers, mac)\n reset = True\n return (value,value / 42, reset)\n\ndef totalizeMonth(lifetime, mac):\n totalizers = get_totalizers(mac)\n now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)\n reset = False\n value = lifetime - totalizers[\"monthHolding\"]\n if not int(now.strftime(\"%m\")) == int(totalizers[\"month\"]):\n totalizers[\"monthHolding\"] = lifetime\n totalizers[\"month\"] = now.strftime(\"%m\")\n saveTotalizers(totalizers, mac)\n reset = True\n return (value,value / 42,reset)\n\ndef totalizeYear(lifetime, mac):\n totalizers = get_totalizers(mac)\n now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)\n reset = False\n value = lifetime - totalizers[\"yearHolding\"]\n if not int(now.strftime(\"%Y\")) == int(totalizers[\"year\"]):\n totalizers[\"yearHolding\"] = lifetime\n totalizers[\"year\"] = now.strftime(\"%Y\")\n saveTotalizers(totalizers, mac)\n reset = True\n return (value,value / 42, reset)\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_local_start\": 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\")",
|
|
"cloudName": "default",
|
|
"msgType": 0
|
|
}
|
|
],
|
|
"downloadFuncs": [
|
|
{
|
|
"name": "Monique 1 Commands",
|
|
"topic": "meshify/sets/194/00:00:06:00:00:01:01:99",
|
|
"qos": 1,
|
|
"funcName": "receiveCommand",
|
|
"payload_type": "Plaintext",
|
|
"script": "# Enter your python code.\nimport json\nfrom quickfaas.measure import recall\nfrom quickfaas.remotebus import publish\nfrom common.Logger import logger\nfrom quickfaas.measure import write_plc_values\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 \n for controller in data:\n if controller[\"name\"] == mac[:-6]:\n if controller[\"health\"] == 1:\n publish(\"meshify/db/194/_/plcfreshwater/\" + mac + \"/plc_ping\", json.dumps({\"value\": \"OK\"}))\n else:\n publish(\"meshify/db/194/_/plcfreshwater/\" + mac + \"/plc_ping\", json.dumps({\"value\": \"Comms Error to PLC\"}))\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 publish(topic, json.dumps(payload))\ndef writeplctag(mac, value, wizard_api):\n try:\n value = json.loads(value.replace(\"'\",'\"'))\n logger.debug(value)\n if value[\"tag\"] == \"CMD_Cloud_Control\":\n value[\"tag\"] = \"cmd_cloud_control\"\n message = {mac[:-6]:{value[\"tag\"]: value[\"val\"]}}\n 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 publish(\"meshify/responses/\" + str(msgid), json.dumps([{\"value\": \"{} Success Setting: {} To: {}\".format(macsquish,name, value), \"msgid\": str(msgid)}]))\n 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_local_start\": 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"
|
|
},{
|
|
"name": "Monique 2 Commands",
|
|
"topic": "meshify/sets/194/00:00:06:00:00:02:01:99",
|
|
"qos": 1,
|
|
"funcName": "receiveCommand",
|
|
"payload_type": "Plaintext",
|
|
"script": "# Enter your python code.\nimport json\nfrom quickfaas.measure import recall\nfrom quickfaas.remotebus import publish\nfrom common.Logger import logger\nfrom quickfaas.measure import write_plc_values\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 \n for controller in data:\n if controller[\"name\"] == mac[:-6]:\n if controller[\"health\"] == 1:\n publish(\"meshify/db/194/_/plcfreshwater/\" + mac + \"/plc_ping\", json.dumps({\"value\": \"OK\"}))\n else:\n publish(\"meshify/db/194/_/plcfreshwater/\" + mac + \"/plc_ping\", json.dumps({\"value\": \"Comms Error to PLC\"}))\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 publish(topic, json.dumps(payload))\ndef writeplctag(mac, value, wizard_api):\n try:\n value = json.loads(value.replace(\"'\",'\"'))\n logger.debug(value)\n if value[\"tag\"] == \"CMD_Cloud_Control\":\n value[\"tag\"] = \"cmd_cloud_control\"\n message = {mac[:-6]:{value[\"tag\"]: value[\"val\"]}}\n 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 publish(\"meshify/responses/\" + str(msgid), json.dumps([{\"value\": \"{} Success Setting: {} To: {}\".format(macsquish,name, value), \"msgid\": str(msgid)}]))\n 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_local_start\": 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"
|
|
},
|
|
{
|
|
"name": "Monique 3 Commands",
|
|
"topic": "meshify/sets/194/00:00:06:00:00:03:01:99",
|
|
"qos": 1,
|
|
"funcName": "receiveCommand",
|
|
"payload_type": "Plaintext",
|
|
"script": "# Enter your python code.\nimport json\nfrom quickfaas.measure import recall\nfrom quickfaas.remotebus import publish\nfrom common.Logger import logger\nfrom quickfaas.measure import write_plc_values\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 \n for controller in data:\n if controller[\"name\"] == mac[:-6]:\n if controller[\"health\"] == 1:\n publish(\"meshify/db/194/_/plcfreshwater/\" + mac + \"/plc_ping\", json.dumps({\"value\": \"OK\"}))\n else:\n publish(\"meshify/db/194/_/plcfreshwater/\" + mac + \"/plc_ping\", json.dumps({\"value\": \"Comms Error to PLC\"}))\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 publish(topic, json.dumps(payload))\ndef writeplctag(mac, value, wizard_api):\n try:\n value = json.loads(value.replace(\"'\",'\"'))\n logger.debug(value)\n if value[\"tag\"] == \"CMD_Cloud_Control\":\n value[\"tag\"] = \"cmd_cloud_control\"\n message = {mac[:-6]:{value[\"tag\"]: value[\"val\"]}}\n 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 publish(\"meshify/responses/\" + str(msgid), json.dumps([{\"value\": \"{} Success Setting: {} To: {}\".format(macsquish,name, value), \"msgid\": str(msgid)}]))\n 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_local_start\": 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"
|
|
},
|
|
{
|
|
"name": "Dawn 2 Commands",
|
|
"topic": "meshify/sets/194/00:00:06:00:00:04:01:99",
|
|
"qos": 1,
|
|
"funcName": "receiveCommand",
|
|
"payload_type": "Plaintext",
|
|
"script": "# Enter your python code.\nimport json\nfrom quickfaas.measure import recall\nfrom quickfaas.remotebus import publish\nfrom common.Logger import logger\nfrom quickfaas.measure import write_plc_values\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 \n for controller in data:\n if controller[\"name\"] == mac[:-6]:\n if controller[\"health\"] == 1:\n publish(\"meshify/db/194/_/plcfreshwater/\" + mac + \"/plc_ping\", json.dumps({\"value\": \"OK\"}))\n else:\n publish(\"meshify/db/194/_/plcfreshwater/\" + mac + \"/plc_ping\", json.dumps({\"value\": \"Comms Error to PLC\"}))\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 publish(topic, json.dumps(payload))\ndef writeplctag(mac, value, wizard_api):\n try:\n value = json.loads(value.replace(\"'\",'\"'))\n logger.debug(value)\n if value[\"tag\"] == \"CMD_Cloud_Control\":\n value[\"tag\"] = \"cmd_cloud_control\"\n message = {mac[:-6]:{value[\"tag\"]: value[\"val\"]}}\n 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 publish(\"meshify/responses/\" + str(msgid), json.dumps([{\"value\": \"{} Success Setting: {} To: {}\".format(macsquish,name, value), \"msgid\": str(msgid)}]))\n 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_local_start\": 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"
|
|
},
|
|
{
|
|
"name": "Dawn 3 Commands",
|
|
"topic": "meshify/sets/194/00:00:06:00:00:05:01:99",
|
|
"qos": 1,
|
|
"funcName": "receiveCommand",
|
|
"payload_type": "Plaintext",
|
|
"script": "# Enter your python code.\nimport json\nfrom quickfaas.measure import recall\nfrom quickfaas.remotebus import publish\nfrom common.Logger import logger\nfrom quickfaas.measure import write_plc_values\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 \n for controller in data:\n if controller[\"name\"] == mac[:-6]:\n if controller[\"health\"] == 1:\n publish(\"meshify/db/194/_/plcfreshwater/\" + mac + \"/plc_ping\", json.dumps({\"value\": \"OK\"}))\n else:\n publish(\"meshify/db/194/_/plcfreshwater/\" + mac + \"/plc_ping\", json.dumps({\"value\": \"Comms Error to PLC\"}))\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 publish(topic, json.dumps(payload))\ndef writeplctag(mac, value, wizard_api):\n try:\n value = json.loads(value.replace(\"'\",'\"'))\n logger.debug(value)\n if value[\"tag\"] == \"CMD_Cloud_Control\":\n value[\"tag\"] = \"cmd_cloud_control\"\n message = {mac[:-6]:{value[\"tag\"]: value[\"val\"]}}\n 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 publish(\"meshify/responses/\" + str(msgid), json.dumps([{\"value\": \"{} Success Setting: {} To: {}\".format(macsquish,name, value), \"msgid\": str(msgid)}]))\n 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_local_start\": 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"
|
|
},
|
|
{
|
|
"name": "Dawn to Terri Commands",
|
|
"topic": "meshify/sets/194/00:00:06:00:00:06:01:99",
|
|
"qos": 1,
|
|
"funcName": "receiveCommand",
|
|
"payload_type": "Plaintext",
|
|
"script": "# Enter your python code.\nimport json\nfrom quickfaas.measure import recall\nfrom quickfaas.remotebus import publish\nfrom common.Logger import logger\nfrom quickfaas.measure import write_plc_values\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 \n for controller in data:\n if controller[\"name\"] == mac[:-6]:\n if controller[\"health\"] == 1:\n publish(\"meshify/db/194/_/plcfreshwater/\" + mac + \"/plc_ping\", json.dumps({\"value\": \"OK\"}))\n else:\n publish(\"meshify/db/194/_/plcfreshwater/\" + mac + \"/plc_ping\", json.dumps({\"value\": \"Comms Error to PLC\"}))\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 publish(topic, json.dumps(payload))\ndef writeplctag(mac, value, wizard_api):\n try:\n value = json.loads(value.replace(\"'\",'\"'))\n logger.debug(value)\n if value[\"tag\"] == \"CMD_Cloud_Control\":\n value[\"tag\"] = \"cmd_cloud_control\"\n message = {mac[:-6]:{value[\"tag\"]: value[\"val\"]}}\n 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 publish(\"meshify/responses/\" + str(msgid), json.dumps([{\"value\": \"{} Success Setting: {} To: {}\".format(macsquish,name, value), \"msgid\": str(msgid)}]))\n 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_local_start\": 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": "GF5022311031621"
|
|
},
|
|
{
|
|
"key": "MAC",
|
|
"value": "00:18:05:28:4b:ad"
|
|
},
|
|
{
|
|
"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": []
|
|
},
|
|
"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": 30,
|
|
"t1": 15,
|
|
"t2": 10,
|
|
"t3": 20,
|
|
"maximumLink": 5,
|
|
"timeSet": 1,
|
|
"byteOrder": "abcd",
|
|
"mapping_table": []
|
|
},
|
|
"iec101Server": {
|
|
"enable": 0,
|
|
"coms": "rs485",
|
|
"mode": "UnBalance",
|
|
"linkLen": 2,
|
|
"linkAddr": 1,
|
|
"asduLen": 2,
|
|
"ioaLen": 3,
|
|
"cotLen": 2,
|
|
"serverList": [
|
|
{
|
|
"asduAddr": 1
|
|
}
|
|
],
|
|
"linkTimeOut": 2000,
|
|
"timeSet": 1,
|
|
"idleTimeOut": 10000,
|
|
"byteOrder": "abcd",
|
|
"mapping_table": {
|
|
"YX": [],
|
|
"YC": [],
|
|
"YK": []
|
|
}
|
|
},
|
|
"iec104Client": {
|
|
"enable": 0,
|
|
"connectType": 2,
|
|
"serverAddr": "ipower.inhandcloud.cn",
|
|
"serverPort": 2406,
|
|
"communicationCode": "",
|
|
"protocol": 1,
|
|
"asduAddr": 1,
|
|
"tls": 1,
|
|
"verification": 1,
|
|
"mapping_table": {
|
|
"YX": [],
|
|
"YC": [],
|
|
"YK": []
|
|
}
|
|
},
|
|
"opcuaServer": {
|
|
"enable": 0,
|
|
"port": 4840,
|
|
"maximumLink": 5,
|
|
"securityMode": 0,
|
|
"identifierType": "String",
|
|
"certificate": "None",
|
|
"privateKey": "None",
|
|
"pubsub": 0,
|
|
"mapping_table": []
|
|
},
|
|
"sl651Slave": {
|
|
"enable": 0,
|
|
"centerAaddr": 1,
|
|
"remoteAddr": "",
|
|
"addrCode": "",
|
|
"password": "",
|
|
"platform_list": [],
|
|
"mapping_table": []
|
|
},
|
|
"hj212Client": {
|
|
"enable": 0,
|
|
"platform_list": [],
|
|
"block_list": [],
|
|
"mapping_table": []
|
|
},
|
|
"southMetadata": {},
|
|
"bindMetadata": {
|
|
"version": "",
|
|
"timestamp": ""
|
|
},
|
|
"bindConfig": {
|
|
"enable": 0,
|
|
"bind": {
|
|
"modelId": "",
|
|
"modelName": "",
|
|
"srcId": "",
|
|
"srcName": "",
|
|
"devId": "",
|
|
"devName": ""
|
|
},
|
|
"varGroups": [],
|
|
"variables": [],
|
|
"alerts": []
|
|
},
|
|
"templates": {
|
|
"plcfreshwater": {
|
|
"controller": {
|
|
"conTempName": "plcfreshwater",
|
|
"enable": 1,
|
|
"protocol": "AllenBradley MicroCip",
|
|
"samplePeriod": 30,
|
|
"desc": "Dawn to Terri",
|
|
"expired": 30000,
|
|
"args": {
|
|
"slot": 0,
|
|
"connectTimeOut": 30000
|
|
},
|
|
"enableDebug": 0,
|
|
"enablePerOnchange": 0,
|
|
"endpoint": "192.168.1.222:44818",
|
|
"status": 0
|
|
},
|
|
"measures": [
|
|
{
|
|
"ctrlName": "00:00:06:00:00:06",
|
|
"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": "",
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:06",
|
|
"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": "",
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:06",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:06",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:06",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:06",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:06",
|
|
"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": "",
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:06",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:06",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
},
|
|
{
|
|
"ctrlName": "00:00:06:00:00:06",
|
|
"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,
|
|
"bitMap": 0,
|
|
"reverseBit": 0,
|
|
"storageLwTSDB": 0
|
|
}
|
|
],
|
|
"desc": ""
|
|
}
|
|
},
|
|
"version": "2.7.1"
|
|
} |