{ "controllers": [ { "_id": "000066589b42bcfe", "enable": 1, "protocol": "AllenBradley MicroCip", "name": "ek_chemical", "samplePeriod": 10, "enablepollCycle": 0, "desc": "", "expired": 1000, "args": { "connectTimeOut": 10000, "slot": 0 }, "enableDebug": 0, "endpoint": "192.168.1.12:44818" } ], "measures": [ { "name": "chemical_ratio_spt", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "FLOAT", "addr": "SPT_Chemical_Ratio", "decimal": 2, "readWrite": "rw", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "000066589bc93f2e" }, { "name": "discharge_pressure", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "FLOAT", "addr": "Val_Discharge_PSI_Scaled", "decimal": 2, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "000166589bc99765" }, { "name": "flow_meter_01_flow_rate", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "FLOAT", "addr": "Val_FlowMeter_FR_1", "decimal": 2, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "000266589bc9245c" }, { "name": "flow_meter_02_flow_rate", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "FLOAT", "addr": "Val_FlowMeter_FR_2", "decimal": 2, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "000366589bc9dddb" }, { "name": "flow_meter_03_flow_rate", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "FLOAT", "addr": "Val_FlowMeter_FR_3", "decimal": 2, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "000466589bc9a028" }, { "name": "plains_inlet_flow_rate", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "FLOAT", "addr": "VaL_Plains_Inlet_FR", "decimal": 2, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "000566589bc91d40" }, { "name": "plains_inlet_h2s", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "FLOAT", "addr": "Val_Plains_Inlet_H2S_Reading", "decimal": 2, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "000666589bc9a4e6" }, { "name": "plains_inlet_h2s_5m_average", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "FLOAT", "addr": "Val_Plains_Inlet_H2S_5m_AVG", "decimal": 2, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "000766589bc92ce8" }, { "name": "plains_inlet_h2s_average", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "FLOAT", "addr": "Val_Plains_Inlet_H2S_AVG", "decimal": 2, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "000866589bc9a201" }, { "name": "plains_outlet_flow_rate", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "FLOAT", "addr": "Val_Plains_Outlet_FR", "decimal": 2, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "000966589bc9584b" }, { "name": "plains_outlet_h2s", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "FLOAT", "addr": "Val_Plains_Outlet_H2S_Reading", "decimal": 2, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "000a66589bc965af" }, { "name": "tank_01_level", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "FLOAT", "addr": "Val_Tank_Level_1", "decimal": 2, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "000b66589bc9439d" }, { "name": "vfd_01_auto", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "FBK_VFD_1_Auto_Mode", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "000c66589bc92c39" }, { "name": "vfd_01_config_mode", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "FBK_VFD_1_Configuration_Mode", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "000d66589bc9f184" }, { "name": "vfd_01_direction_cmd", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "CMD_VFD_1_Direction", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "000e66589bc9368b" }, { "name": "vfd_01_enable_cmd", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "CMD_VFD_1_Enable", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "000f66589bc923e3" }, { "name": "vfd_01_fault_reset_cmd", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "CMD_VFD_1_Fault_Reset", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "001066589bc9c20c" }, { "name": "vfd_01_faulted_alm", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "AL0_VFD_1_Faulted", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "001166589bc970bd" }, { "name": "vfd_01_general_enable", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "FBK_VFD_1_General_Enable", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "001266589bc91594" }, { "name": "vfd_01_job", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "FBK_VFD_1_Jog", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "001366589bc9ef01" }, { "name": "vfd_01_jog_cmd", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "CMD_VFD_1_Jog", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "001466589bc9d355" }, { "name": "vfd_01_quick_stop", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "FBK_VFD_1_Quick_Stop", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "001566589bc9b028" }, { "name": "vfd_01_quick_stop_cmd", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "CMD_VFD_1_QuickStop", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "001666589bc934a5" }, { "name": "vfd_01_remote_cmd", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "CMD_VFD_1_Remote", "bitMap": 0, "reverseBit": 0, "readWrite": "rw", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "001766589bc9472b" }, { "name": "vfd_01_remote_control", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "FBK_VFD_1_Remote_Control", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "001866589bc9cc2e" }, { "name": "vfd_01_run_cmd", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "CMD_VFD_1_Run", "bitMap": 0, "reverseBit": 0, "readWrite": "rw", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "001966589bc98a77" }, { "name": "vfd_01_run", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "FBK_VFD_1_Run_Command", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "001a66589bc919bc" }, { "name": "vfd_01_second_ramp", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "FBK_VFD_1_Second_Ramp", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "001b66589bc9e40c" }, { "name": "vfd_01_second_ramp_cmd", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "CMD_VFD_1_Second_Ramp", "bitMap": 0, "reverseBit": 0, "readWrite": "rw", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "001c66589bc977b8" }, { "name": "vfd_01_speed_direction", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "FBK_VFD_1_Speed_Direction", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "001d66589bc98c0c" }, { "name": "vfd_01_run_status", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "FBK_VFD_1_Run_Status", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "001e66589bc92774" }, { "name": "vfd_01_status", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "FBK_VFD_1_Status", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "001f66589bc95808" }, { "name": "vfd_01_status_alm", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "AL0_VFD_1_Alarm_Status", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "002066589bc97836" }, { "name": "vfd_01_undervoltage_alm", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "AL0_VFD_1_Undervoltage", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "002166589bc9ec91" }, { "name": "vfd_02_auto", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "FBK_VFD_2_Auto_Mode", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "002266589bc99cb2" }, { "name": "vfd_02_config_mode", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "FBK_VFD_2_Configuration_Mode", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "002366589bc9643c" }, { "name": "vfd_02_direction_cmd", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "CMD_VFD_2_Direction", "bitMap": 0, "reverseBit": 0, "readWrite": "rw", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "002466589bc9c242" }, { "name": "vfd_02_enable_cmd", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "CMD_VFD_2_Enable", "bitMap": 0, "reverseBit": 0, "readWrite": "rw", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "002566589bc960ba" }, { "name": "vfd_02_fault_reset_cmd", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "CMD_VFD_2_Fault_Reset", "bitMap": 0, "reverseBit": 0, "readWrite": "rw", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "002666589bc9e32f" }, { "name": "vfd_02_faulted_alm", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "AL0_VFD_2_Faulted", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "002766589bc9a5c1" }, { "name": "vfd_02_general_enable", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "FBK_VFD_2_General_Enable", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "002866589bc9c9e8" }, { "name": "vfd_02_job", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "FBK_VFD_2_Jog", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "002966589bc9fc99" }, { "name": "vfd_02_jog_cmd", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "CMD_VFD_2_Jog", "bitMap": 0, "reverseBit": 0, "readWrite": "rw", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "002a66589bc96c0e" }, { "name": "vfd_02_quick_stop", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "FBK_VFD_2_Quick_Stop", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "002b66589bc9748e" }, { "name": "vfd_02_quick_stop_cmd", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "CMD_VFD_2_QuickStop", "bitMap": 0, "reverseBit": 0, "readWrite": "rw", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "002c66589bc95239" }, { "name": "vfd_02_remote_cmd", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "CMD_VFD_2_Remote", "bitMap": 0, "reverseBit": 0, "readWrite": "rw", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "002d66589bc935ed" }, { "name": "vfd_02_remote_control", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "FBK_VFD_2_Remote_Control", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "002e66589bc985b5" }, { "name": "vfd_02_run", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "FBK_VFD_2_Run_Command", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "002f66589bc993b0" }, { "name": "vfd_02_run_cmd", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "CMD_VFD_2_Run", "bitMap": 0, "reverseBit": 0, "readWrite": "rw", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "003066589bc90b94" }, { "name": "vfd_02_second_ramp", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "FBK_VFD_2_Second_Ramp", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "003166589bc9a6f0" }, { "name": "vfd_02_second_ramp_cmd", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "CMD_VFD_2_Second_Ramp", "bitMap": 0, "reverseBit": 0, "readWrite": "rw", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "003266589bc98a64" }, { "name": "vfd_02_speed_direction", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "FBK_VFD_2_Speed_Direction", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "003366589bc90d1a" }, { "name": "vfd_02_run_status", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "FBK_VFD_2_Run_Status", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "003466589bc9b147" }, { "name": "vfd_02_status", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "FBK_VFD_2_Status", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "003566589bc9ef3b" }, { "name": "vfd_02_status_alm", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "AL0_VFD_2_Alarm_Status", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "003666589bc9a48c" }, { "name": "vfd_02_undervoltage_alm", "ctrlName": "ek_chemical", "group": "default", "uploadType": "periodic", "dataType": "BIT", "addr": "AL0_VFD_2_Undervoltage", "bitMap": 0, "reverseBit": 0, "readWrite": "ro", "unit": "", "desc": "", "storageLwTSDB": 0, "transformType": 0, "_id": "003766589bc9455c" } ], "alarmLables": [ "default" ], "alarms": [], "groups": [ { "name": "default", "uploadInterval": 600, "LwTSDBSize": 150000, "strategy": 1, "historyDataPath": "/var/user/data/dbhome/device_supervisor/LwTSDB", "historyDataMode": "gateway", "enablePerOnchange": 0, "_id": "0000665879c1f9c2" } ], "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, "cacheMode": "gateway", "debugLogMode": "gateway", "logNum": 2, "logSize": 1 }, "clouds": [ { "cacheSize": 10000, "enable": 1, "name": "default", "type": "Standard MQTT", "args": { "host": "www.enxlekkocloud.com", "port": 1883, "clientId": "ae-#1", "auth": 1, "tls": 0, "cleanSession": 0, "mqttVersion": "v3.1.1", "keepalive": 60, "key": "", "cert": "", "rootCA": "", "verifyServer": 0, "verifyClient": 0, "username": "aemqtt", "passwd": "aemqtt@1903", "willQos": 0, "willRetain": 0, "willTopic": "", "willPayload": "", "tlsAuth": "caSelfSigned" }, "uploadRules": [], "_id": "0000665879c1013e" } ], "quickfaas": { "genericFuncs": [], "uploadFuncs": [ { "qos": 1, "funcName": "sendData", "script": "# Enter your python code.\nimport json, os, time\nfrom datetime import datetime as dt\nfrom common.Logger import logger\nfrom quickfaas.remotebus import publish\nfrom quickfaas.global_dict import get as get_params\nfrom quickfaas.global_dict import _set_global_args\nfrom mobiuspi_lib.gps import GPS\n\ndef reboot():\n #basic = Basic()\n logger.info(\"!\" * 10 + \"REBOOTING DEVICE\" + \"!\"*10)\n r = os.popen(\"kill -s SIGHUP `cat /var/run/python/supervisord.pid`\").read()\n logger.info(f\"REBOOT : {r}\")\n\ndef checkFileExist(filename):\n path = \"/var/user/files\"\n if not os.path.exists(path):\n logger.info(\"no folder making files folder in var/user\")\n os.makedirs(path)\n with open(path + \"/\" + filename, \"a\") as f:\n json.dump({}, f)\n if not os.path.exists(path + \"/\" + filename):\n logger.info(\"no creds file making creds file\")\n with open(path + \"/\" + filename, \"a\") as f:\n json.dump({}, f)\n\ndef convertDStoJSON(ds):\n j = dict()\n for x in ds:\n j[x[\"key\"]] = x[\"value\"]\n return j\n\ndef convertJSONtoDS(j):\n d = []\n for key in j.keys():\n d.append({\"key\": key, \"value\": j[key]})\n return d\n\ndef checkCredentialConfig():\n logger.info(\"CHECKING CONFIG\")\n cfgpath = \"/var/user/cfg/device_supervisor/device_supervisor.cfg\"\n credspath = \"/var/user/files/creds.json\"\n cfg = dict()\n with open(cfgpath, \"r\") as f:\n cfg = json.load(f)\n clouds = cfg.get(\"clouds\")\n logger.info(clouds)\n #if not configured then try to configure from stored values\n if clouds[0][\"args\"][\"clientId\"] == \"unknown\" or clouds[0][\"args\"][\"username\"] == \"unknown\" or not clouds[0][\"args\"][\"passwd\"] or clouds[0][\"args\"][\"passwd\"] == \"unknown\":\n checkFileExist(\"creds.json\")\n with open(credspath, \"r\") as c:\n creds = json.load(c)\n if creds:\n logger.info(\"updating config with stored data\")\n clouds[0][\"args\"][\"clientId\"] = creds[\"clientId\"]\n clouds[0][\"args\"][\"username\"] = creds[\"userName\"]\n clouds[0][\"args\"][\"passwd\"] = creds[\"password\"]\n cfg[\"clouds\"] = clouds\n cfg = checkParameterConfig(cfg)\n with open(cfgpath, \"w\", encoding='utf-8') as n:\n json.dump(cfg, n, indent=1, ensure_ascii=False)\n reboot()\n else:\n #assuming clouds is filled out, if data is different then assume someone typed in something new and store it, if creds is empty fill with clouds' data\n checkFileExist(\"creds.json\")\n with open(credspath, \"r\") as c:\n logger.info(\"updating stored file with new data\")\n cfg = checkParameterConfig(cfg)\n with open(cfgpath, \"w\", encoding='utf-8') as n:\n json.dump(cfg, n, indent=1, ensure_ascii=False)\n creds = json.load(c)\n if creds:\n if creds[\"clientId\"] != clouds[0][\"args\"][\"clientId\"]:\n creds[\"clientId\"] = clouds[0][\"args\"][\"clientId\"]\n if creds[\"userName\"] != clouds[0][\"args\"][\"username\"]:\n creds[\"userName\"] = clouds[0][\"args\"][\"username\"]\n if creds[\"password\"] != clouds[0][\"args\"][\"passwd\"]:\n creds[\"password\"] = clouds[0][\"args\"][\"passwd\"]\n else:\n creds[\"clientId\"] = clouds[0][\"args\"][\"clientId\"]\n creds[\"userName\"] = clouds[0][\"args\"][\"username\"]\n creds[\"password\"] = clouds[0][\"args\"][\"passwd\"]\n with open(credspath, \"w\") as cw:\n json.dump(creds,cw)\n\ndef checkParameterConfig(cfg):\n logger.info(\"Checking Parameters!!!!\")\n paramspath = \"/var/user/files/params.json\"\n cfgparams = convertDStoJSON(cfg.get(\"labels\"))\n #check stored values \n checkFileExist(\"params.json\")\n with open(paramspath, \"r\") as f:\n logger.info(\"Opened param storage file\")\n params = json.load(f)\n if params:\n if cfgparams != params:\n #go through each param\n #if not \"unknown\" and cfg and params aren't the same take from cfg likely updated manually\n #if key in cfg but not in params copy to params\n logger.info(\"equalizing params between cfg and stored\")\n for key in cfgparams.keys():\n try:\n if cfgparams[key] != params[key] and cfgparams[key] != \"unknown\":\n params[key] = cfgparams[key]\n except:\n params[key] = cfgparams[key]\n cfg[\"labels\"] = convertJSONtoDS(params)\n _set_global_args(convertJSONtoDS(params))\n with open(paramspath, \"w\") as p:\n json.dump(params, p)\n else:\n with open(paramspath, \"w\") as p:\n logger.info(\"initializing param file with params in memory\")\n json.dump(convertDStoJSON(get_params()), p)\n cfg[\"labels\"] = get_params()\n \n return cfg\n\ndef getGPS():\n # Create a gps instance\n gps = GPS()\n\n # Retrieve GPS information\n position_status = gps.get_position_status()\n logger.debug(\"position_status: \")\n logger.debug(position_status)\n latitude = position_status[\"latitude\"].split(\" \")\n longitude = position_status[\"longitude\"].split(\" \")\n lat_dec = int(latitude[0][:-1]) + (float(latitude[1][:-1])/60)\n lon_dec = int(longitude[0][:-1]) + (float(longitude[1][:-1])/60)\n if latitude[2] == \"S\":\n lat_dec = lat_dec * -1\n if longitude[2] == \"W\":\n lon_dec = lon_dec * -1\n #lat_dec = round(lat_dec, 7)\n #lon_dec = round(lon_dec, 7)\n logger.info(\"HERE IS THE GPS COORDS\")\n logger.info(f\"LATITUDE: {lat_dec}, LONGITUDE: {lon_dec}\")\n speedKnots = position_status[\"speed\"].split(\" \")\n speedMPH = float(speedKnots[0]) * 1.151\n return (f\"{lat_dec:.8f}\",f\"{lon_dec:.8f}\",f\"{speedMPH:.2f}\")\n\ndef chunk_payload(payload, chunk_size=20):\n if \"values\" in payload:\n # Original format: {\"ts\": ..., \"values\": {...}}\n chunked_values = list(payload[\"values\"].items())\n for i in range(0, len(chunked_values), chunk_size):\n yield {\n \"ts\": payload[\"ts\"],\n \"values\": dict(chunked_values[i:i+chunk_size])\n }\n else:\n # New format: {\"key1\": \"value1\", \"key2\": \"value2\"}\n chunked_keys = list(payload.keys())\n for i in range(0, len(chunked_keys), chunk_size):\n yield {k: payload[k] for k in chunked_keys[i:i+chunk_size]}\n\ndef sendData(message):\n #logger.debug(message)\n try:\n checkCredentialConfig()\n except Exception as e:\n logger.error(e)\n payload = {\"ts\": (round(dt.timestamp(dt.now())/600)*600)*1000, \"values\": {}}\n attributes_payload = {}\n for measure in message[\"measures\"]:\n try:\n logger.debug(measure)\n if measure[\"health\"] == 1:\n if \"_spt\" in measure[\"name\"]:\n attributes_payload[measure[\"name\"]] = measure[\"value\"]\n payload[\"values\"][measure[\"name\"]] = measure[\"value\"] \n except Exception as e:\n logger.error(e)\n\n try:\n payload[\"values\"][\"latitude\"], payload[\"values\"][\"longitude\"], payload[\"values\"][\"speed\"] = getGPS()\n except:\n logger.error(\"Could not get GPS coordinates\")\n\n for chunk in chunk_payload(payload=payload):\n publish(__topic__, json.dumps(chunk), __qos__)\n time.sleep(2)\n \n attributes_payload[\"latestReportTime\"] = (round(dt.timestamp(dt.now())/600)*600)*1000\n for chunk in chunk_payload(payload=attributes_payload):\n publish(\"v1/devices/me/attributes\", json.dumps(chunk), __qos__)\n time.sleep(2)\n \n", "name": "sendData", "trigger": "measure_event", "topic": "v1/devices/me/telemetry", "msgType": 0, "cloudName": "default", "groups": [ "default" ] } ], "downloadFuncs": [ { "name": "receiveCommands", "topic": "v1/devices/me/rpc/request/+", "qos": 1, "funcName": "receiveCommand", "payload_type": "JSON", "script": "import json, time\nfrom datetime import datetime as dt\nfrom quickfaas.measure import recall, write\nfrom quickfaas.remotebus import publish\nfrom common.Logger import logger\n\n# Helper function to split the payload into chunks\ndef chunk_payload(payload, chunk_size=20):\n chunked_values = list(payload[\"values\"].items())\n for i in range(0, len(chunked_values), chunk_size):\n yield {\n \"ts\": payload[\"ts\"],\n \"values\": dict(chunked_values[i:i+chunk_size])\n }\n\ndef sync():\n #get new values and send\n payload = {\"ts\": round(dt.timestamp(dt.now()))*1000, \"values\": {}}\n topic = \"v1/devices/me/telemetry\"\n try:\n data = recall()#json.loads(recall().decode(\"utf-8\"))\n except Exception as e:\n logger.error(e)\n logger.debug(data)\n for controller in data:\n for measure in controller[\"measures\"]:\n #publish measure\n payload[\"values\"][measure[\"name\"]] = measure[\"value\"]\n logger.debug(\"Sending on topic: {}\".format(topic))\n logger.debug(\"Sending value: {}\".format(payload))\n for chunk in chunk_payload(payload=payload):\n publish(topic, json.dumps(chunk), 1)\n time.sleep(2)\n\ndef writeplctag(value):\n #value in the form {\"measurement\": , \"value\": }\n try:\n #value = json.loads(value.replace(\"'\",'\"'))\n logger.info(value)\n #payload format: [{\"name\": \"advvfdipp\", \"measures\": [{\"name\": \"manualfrequencysetpoint\", \"value\": 49}]}]\n message = [{\"name\": \"ek_chemical\", \"measures\":[{\"name\":value[\"measurement\"], \"value\": value[\"value\"]}]}]\n resp = write(message) \n logger.info(\"RETURN FROM WRITE: {}\".format(resp))\n return True\n except Exception as e:\n logger.error(e)\n return False\n \ndef receiveCommand(topic, payload, wizard_api):\n try:\n logger.debug(topic)\n logger.info(json.loads(payload))\n p = json.loads(payload)\n command = p[\"method\"]\n commands = {\n \"sync\": sync,\n \"writeplctag\": writeplctag,\n } \n if command == \"setPLCTag\":\n result = commands[\"writeplctag\"](p[\"params\"])\n if result:\n sync()\n #commands[command](p[\"mac\"].lower(),p[\"payload\"][\"value\"], wizard_api)\n #logger.debug(command)\n ack(topic.split(\"/\")[-1], wizard_api)\n except Exception as e:\n logger.error(e)\n \n\ndef ack(msgid, wizard_api):\n #logger.debug(msgid)\n #logger.debug(mac)\n #logger.debug(name)\n #logger.debug(value)\n wizard_api.mqtt_publish(\"v1/devices/me/rpc/response/\" + str(msgid), json.dumps({\"msg\": {\"time\": time.time()}, \"metadata\": \"\", \"msgType\": \"\"}))", "msgType": 0, "cloudName": "default", "trigger": "command_event" } ] }, "labels": [ { "key": "SN", "value": "GF5022404048343", "_id": "0000665879c18ccf" }, { "key": "MAC", "value": "ec:6e:79:02:68:e5", "_id": "0001665879c18390" } ], "modbusSlave": { "enable": 0, "protocol": "Modbus-TCP", "port": 502, "slaveAddr": 1, "int16Ord": "ab", "int32Ord": "abcd", "float32Ord": "abcd", "maxConnection": 5, "useRawvalue": 1, "mapping_table": [] }, "modbusRTUSlave": { "enable": 0, "protocol": "Modbus-RTU", "coms": "rs485", "slaveAddr": 1, "int16Ord": "ab", "int32Ord": "abcd", "float32Ord": "abcd", "useRawvalue": 1, "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", "useRawvalue": 1, "asduLen": 2, "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", "useRawvalue": 1, "protocolMode": 0, "mappingTable": { "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", "pubsub": 0, "certificate": "None", "privateKey": "None", "useRawvalue": 1, "mapping_table": [] }, "sl651Slave": { "enable": 0, "centerAaddr": 1, "remoteAddr": "", "addrCode": "", "password": "", "platform_list": [], "useRawvalue": 1, "mapping_table": [] }, "hj212Client": { "enable": 0, "useRawvalue": 1, "platform_list": [], "block_list": [], "mapping_table": [] }, "bacnetServer": { "enable": 0, "protocol": "BACnet/IP", "deviceId": 0, "port": 47808, "bbmdEnable": 0, "useRawvalue": 1, "mapping_table": [] }, "Dnp3Server": { "enable": 0, "protocol": "Dnp3-TCP", "slaveAddr": 1, "masterAddr": 2, "port": 20000, "useRawvalue": 1, "enableUnsol": 0, "maxFrasize": 4096, "layerTimeout": 1000, "linkRetry": 5, "enableLink": 0, "mapping_table": [] }, "southMetadata": {}, "bindMetadata": {}, "bindConfig": { "enable": 0, "bind": { "modelId": "", "modelName": "", "srcId": "", "srcName": "", "devId": "", "devName": "" }, "varGroups": [], "variables": [], "alerts": [] }, "templates": {}, "version": "3.0.1" }