{ "controllers": [ { "protocol": "EtherNet/IP", "name": "advvfdipp", "args": {}, "samplePeriod": 10, "expired": 10000, "endpoint": "192.168.1.10:44818" } ], "groups": [ { "name": "default", "uploadInterval": 600, "reference": 44 } ], "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "name": "pidcontrolmode", "ctrlName": "advvfdipp", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "sts_PID_Control", "decimal": 2, "len": 1, "readWrite": "ro", "unit": "", "desc": "", "transformType": 0, "maxValue": "", "minValue": "", "maxScaleValue": "", "minScaleValue": "", "gain": "", "offset": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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": "" }, { "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 }, { "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 } ], "alarms": [], "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" } ] }, "clouds": [ { "cacheSize": 100, "enable": 1, "type": "Standard MQTT", "args": { "host": "mq194.imistaway.net", "port": 1883, "clientId": "unknown", "auth": 1, "tls": 0, "cleanSession": 1, "mqttVersion": "v3.1.1", "keepalive": 120, "key": "", "cert": "", "rootCA": "", "verifyServer": 0, "verifyClient": 0, "username": "unknown", "passwd": "unknown", "authType": 1 }, "name": "default" } ], "labels": [ { "key": "SN", "value": "GF5022137006251" }, { "key": "MAC", "value": "00:18:05:1a:e5:36" } ], "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\nfrom common.Logger import logger\nfrom quickfaas.remotebus import publish\nimport re, uuid\nfrom paho.mqtt import client\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 for measure in message[\"measures\"]:\n try:\n logger.debug(measure)\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 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\"], p[\"payload\"][\"name\"].split(\".\")[1], p[\"payload\"][\"value\"], wizard_api)\n\ndef ack(msgid, mac, name, value, wizard_api):\n #logger.debug(mac)\n mac = \"\".join(mac.split(\":\")[:-2])\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(mac,name, value), \"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" } ] }, "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": 15, "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": [] }, "bindConfig": { "enable": 0, "bind": { "modelId": "", "modelName": "", "srcId": "", "srcName": "", "devId": "", "devName": "" }, "varGroups": [], "variables": [], "alerts": [] }, "southMetadata": {}, "bindMetadata": { "version": "", "timestamp": "" } }