diff --git a/vgv b/vgv index b5b9c74..ee18e46 100644 --- a/vgv +++ b/vgv @@ -1 +1 @@ -{"Id":205,"Name":null,"Description":null,"FirmwareVersion":"","InProgress":false,"MessageTypes":[{"Id":5989,"Code":"NOPROX","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;NOPROX;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;NOPROX;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5990,"Code":"REGISTER","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;REGISTER=<>,<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;REGISTER=[^,;]*,[^;,]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5991,"Code":"IS_ACTIVATED","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;IS_ACTIVATED;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;IS_ACTIVATED;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5992,"Code":"PWRF","Name":"Power off","MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;PWRF;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;PWRF;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5993,"Code":"ALSOS","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"VGV-<>;<>;mid=<>;ALSOS;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;ALSOS;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5994,"Code":"completed","Name":"ACK command","MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"ACK-CMD;<>;<>;OK;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^ACK-CMD;[^;]*;[^;;]*;OK;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5995,"Code":"BATL","Name":"Battery Low","MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;BATL;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":"","LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;BATL;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5996,"Code":"NACT","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"+RESP:NACT,<>,<>$","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"\\+RESP:NACT,[^,]*,[^\\$,]*\\$","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5997,"Code":"PWRN","Name":"Power on","MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;PWRN;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;PWRN;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5998,"Code":"ALNM","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"VGV-<>;<>;mid=<>;ALNM;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;ALNM;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5999,"Code":"BATCF","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;BATCF;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;BATCF;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6000,"Code":"PROX","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":2,"Template":"VGV-<>;<>;mid=<>;PROX=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;PROX=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6001,"Code":"CREATE","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;CREATE=<>,<>,<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;CREATE=[^,;]*,[^,,]*,[^;,]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6002,"Code":"COMM","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"<<->>\"Imei\":\"<>\",<<->>","HasTemplateGlobal":false,"ResponseTemplate":"OK","TemplateGlobal":"<<->>VGV-001-Invent<<->>","LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^[^ ]*\"Imei\":\"[^\"]*\",[^ ]*","RegExGlobal":"^[^ ]*VGV-001-Invent[^ ]*","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6003,"Code":"BATE","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":2,"Template":"VGV-<>;<>;mid=<>;BATE;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;BATE;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5982,"Code":"BATCN","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;BATCN;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;BATCN;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5983,"Code":"CYC","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":true,"Type":0,"Template":"VGV-<>;<>;mid=<>;CYC;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;CYC;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5983,\"Code\":\"CYC\",\"Name\":null,\"MessageCode\":\"CYC\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":true,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;CYC;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ACK-MSG;<>;OK;[0a]\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;CYC;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1712653303}],"Tags":[]},{"Id":5984,"Code":"ENC","Name":"Encrypted","MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;enc=<>;$$","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;enc=[^;;]*;$","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5985,"Code":"received","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"ACK-CMD;<>;<>;RCVD;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^ACK-CMD;[^;]*;[^;;]*;RCVD;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5986,"Code":"error","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"ACK-CMD;<>;<>;ERR;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^ACK-CMD;[^;]*;[^;;]*;ERR;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5987,"Code":"NOTEREAD","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;NOTEREAD=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;NOTEREAD=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5988,"Code":"COMM","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"<<->>VGV-001-Invent<<->>\"Imei\":\"<>\",<<->>","HasTemplateGlobal":false,"ResponseTemplate":"OK","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^[^ ]*VGV-001-Invent[^ ]*\"Imei\":\"[^\"]*\",[^ ]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6004,"Code":"ALLDATA","Name":null,"MessageCode":"INFO","NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;ALLDATA=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;ALLDATA=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":6004,\"Code\":\"ALLDATA\",\"Name\":null,\"MessageCode\":\"INFO\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;ALLDATA=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ACK-MSG;<>;OK;[0a]\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;ALLDATA=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710177889},{"Type":1,"NewValue":"{\"Id\":6004,\"Code\":\"ALLDATA\",\"Name\":null,\"MessageCode\":\"INFO\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;ALLDATA=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ACK-MSG;<>;OK;[0a]\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;ALLDATA=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1712653474}],"Tags":[]}],"Commands":[{"Id":4096,"Name":"NonMovement","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"if (params.NonMovement.EnableDisableNonMovement == \"true\") {\n var state = 1;\n} else {\n var state = \"0\";\n}\nvar command = \"ALNM=\" + state + \",\" + params.NonMovement.period;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4096,\"Name\":\"NonMovement\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"if (params.NonMovement.EnableDisableNonMovement == \\\"true\\\") {\\n var state = 1;\\n} else {\\n var state = \\\"0\\\";\\n}\\nvar command = \\\"ALNM=\\\" + state + \\\",\\\" + params.NonMovement.period;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856700}],"Tags":[]},{"Id":4095,"Name":"Set Scanning Enable","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"let doScan = params.Scanning.EnableScanning == \"true\" ? 1 : 0;\nlet aggs = \",\" + params.Scanning.MacIDs;\nvar aggids = params.Scanning.EnableScanning == \"true\" ? aggs : '';\nlet command = \"SCANAGG=\" + doScan + aggids;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4095,\"Name\":\"Set Scanning Enable\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"let doScan = params.Scanning.EnableScanning == \\\"true\\\" ? 1 : 0;\\nlet aggs = \\\",\\\" + params.Scanning.MacIDs;\\nvar aggids = params.Scanning.EnableScanning == \\\"true\\\" ? aggs : '';\\nlet command = \\\"SCANAGG=\\\" + doScan + aggids;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856904}],"Tags":[]},{"Id":4094,"Name":"Device Activated","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"ACTIVATED_FAIL=Unkown Failure.\";\nif (params.DeviceConfig.IVActivated == \"true\") {\n command = \"ACTIVATED_OK\";\n} else {\n command = \"ACTIVATED_FAIL=\" + params.DeviceConfig.IVActivatedFailMessage;\n}\nvar configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4094,\"Name\":\"Device Activated\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"ACTIVATED_FAIL=Unkown Failure.\\\";\\nif (params.DeviceConfig.IVActivated == \\\"true\\\") {\\n command = \\\"ACTIVATED_OK\\\";\\n} else {\\n command = \\\"ACTIVATED_FAIL=\\\" + params.DeviceConfig.IVActivatedFailMessage;\\n}\\nvar configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856680}],"Tags":[]},{"Id":4093,"Name":"SendMACs","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"AGGIDS=\" + params.Scanning.MacIDs;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4093,\"Name\":\"SendMACs\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"AGGIDS=\\\" + params.Scanning.MacIDs;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856815}],"Tags":[]},{"Id":4092,"Name":"Set Config Enable","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"// write your code here...\nif (params.DeviceConfig.ConfigMode == \"true\") {\n enableConfig = \"1\";\n} else {\n enableConfig = \"0\";\n}\nvar command = \"CONFIG=\" + enableConfig;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4092,\"Name\":\"Set Config Enable\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.DeviceConfig.ConfigMode == \\\"true\\\") {\\n enableConfig = \\\"1\\\";\\n} else {\\n enableConfig = \\\"0\\\";\\n}\\nvar command = \\\"CONFIG=\\\" + enableConfig;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856835}],"Tags":[]},{"Id":4091,"Name":"Battery Critical Alert Setting","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"// write your code here...\nif (params.Batteryalerts.EnableBatteryCriticalAlert == \"true\") {\n endis = 1;\n} else {\n endis = \"0\";\n}\nvar command = \"BATAC=\" + endis + \",\" + params.Batteryalerts.BatteryCriticalThreshold;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4091,\"Name\":\"Battery Critical Alert Setting\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.Batteryalerts.EnableBatteryCriticalAlert == \\\"true\\\") {\\n endis = 1;\\n} else {\\n endis = \\\"0\\\";\\n}\\nvar command = \\\"BATAC=\\\" + endis + \\\",\\\" + params.Batteryalerts.BatteryCriticalThreshold;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856589},{"Type":1,"NewValue":"{\"Id\":4091,\"Name\":\"Battery Critical Alert Setting\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.Batteryalerts.EnableBatteryCriticalAlert == \\\"true\\\") {\\n endis = 1;\\n} else {\\n endis = \\\"0\\\";\\n}\\nvar command = \\\"BATAC=\\\" + endis + \\\",\\\" + params.Batteryalerts.BatteryCriticalThreshold;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862278}],"Tags":[]},{"Id":4090,"Name":"Battery Low Alert Setting","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"if (params.Batteryalerts.EnableBatteryLowAlert == \"true\") {\n endis = 1;\n} else {\n endis = \"0\";\n}\nvar command = \"BATAL=\" + endis + \",\" + params.Batteryalerts.BatteryLowThreshold;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4090,\"Name\":\"Battery Low Alert Setting\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"if (params.Batteryalerts.EnableBatteryLowAlert == \\\"true\\\") {\\n endis = 1;\\n} else {\\n endis = \\\"0\\\";\\n}\\nvar command = \\\"BATAL=\\\" + endis + \\\",\\\" + params.Batteryalerts.BatteryLowThreshold;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856616},{"Type":1,"NewValue":"{\"Id\":4090,\"Name\":\"Battery Low Alert Setting\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"if (params.Batteryalerts.EnableBatteryLowAlert == \\\"true\\\") {\\n endis = 1;\\n} else {\\n endis = \\\"0\\\";\\n}\\nvar command = \\\"BATAL=\\\" + endis + \\\",\\\" + params.Batteryalerts.BatteryLowThreshold;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862300}],"Tags":[]},{"Id":4089,"Name":"SOS Number","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"SOSN=\" + params.MakeCall.SOSNumber.replace(\"(\", \"\").replace(\")\", \"\");\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":8,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4089,\"Name\":\"SOS Number\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"SOSN=\\\" + params.MakeCall.SOSNumber.replace(\\\"(\\\", \\\"\\\").replace(\\\")\\\", \\\"\\\");\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":8,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715855955},{"Type":1,"NewValue":"{\"Id\":4089,\"Name\":\"SOS Number\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"SOSN=\\\" + params.MakeCall.SOSNumber.replace(\\\"(\\\", \\\"\\\").replace(\\\")\\\", \\\"\\\");\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":8,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856353},{"Type":1,"NewValue":"{\"Id\":4089,\"Name\":\"SOS Number\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"SOSN=\\\" + params.MakeCall.SOSNumber.replace(\\\"(\\\", \\\"\\\").replace(\\\")\\\", \\\"\\\");\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":8,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862067}],"Tags":[]},{"Id":4088,"Name":"Send Notification","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"NOTE=\" + params.Note.Message;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4088,\"Name\":\"Send Notification\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"NOTE=\\\" + params.Note.Message;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856789}],"Tags":[]},{"Id":4087,"Name":"Battery Charging Alert","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"// write your code here...\nif (params.Batteryalerts.EnableBatteryChargingAlerts == \"true\") {\n batCharging = 1;\n} else {\n batCharging = \"0\";\n}\nvar command = \"BATC=\" + batCharging;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4087,\"Name\":\"Battery Charging Alert\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.Batteryalerts.EnableBatteryChargingAlerts == \\\"true\\\") {\\n batCharging = 1;\\n} else {\\n batCharging = \\\"0\\\";\\n}\\nvar command = \\\"BATC=\\\" + batCharging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856558},{"Type":1,"NewValue":"{\"Id\":4087,\"Name\":\"Battery Charging Alert\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.Batteryalerts.EnableBatteryChargingAlerts == \\\"true\\\") {\\n batCharging = 1;\\n} else {\\n batCharging = \\\"0\\\";\\n}\\nvar command = \\\"BATC=\\\" + batCharging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862254}],"Tags":[]},{"Id":4086,"Name":"SOS Options","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\r\nvar configsSMS = []; // for sms template\r\nvar SOSOptions;\r\nvar Handsfree, Makecall;\r\n//var command = \"SOSO=\" + JSON.stringify(params.SOSOptions.HandsFree);\r\nif (params.MakeCall.EnableDisableMakeCall == \"true\") {\r\n Makecall = 1;\r\n if (params.MakeCall.HandsFree === \"true\") {\r\n Handsfree = \"1\";\r\n } else {\r\n Handsfree = \"0\";\r\n }\r\n} else {\r\n Makecall = \"0\";\r\n Handsfree = \"0\";\r\n}\r\nvar command = \"SOSO=\" + params.MakeCall.Timeout + \",\" + Makecall + \",\" + Handsfree;\r\nvar sequenceNumber = (new Date().getTime()).toString(36);\r\nvar part1 = \"update=\" + sequenceNumber;\r\nconst _crypto = require('crypto');\r\nif (params.Password.Password === \"\") {\r\n var password = serverParams.Imei;\r\n} else {\r\n var password = params.Password.Password;\r\n}\r\nif (params.Password.encryption === \"true\") {\r\n var part2 = encrypt(command, part1, password);\r\n} else {\r\n var part2 = command;\r\n}\r\nAddValue(\"part1\", part1);\r\nAddValue(\"part2\", part2);\r\nAddValue(\"sequenceNumber\", sequenceNumber);\r\nAddValueSMS(\"part1\", part1); //for sms template\r\nAddValueSMS(\"part2\", part2); // for sms template\r\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS //for sms template\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n\r\nfunction AddValue(p1, p2) {\r\n var cvpair = {\r\n code: p1,\r\n value: p2\r\n };\r\n configs.push(cvpair);\r\n}\r\n\r\nfunction AddValueSMS(p1, p2) { //function for sms template\r\n var cvpair = {\r\n code: p1,\r\n value: p2\r\n };\r\n configsSMS.push(cvpair);\r\n}\r\n\r\nfunction encrypt(text, mid, password) {\r\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\r\n const iv = _crypto.randomBytes(16); // random initialization vector\r\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\r\n // set the cipher\r\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\r\n // encrypt text\r\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\r\n // generate output ( encrypted text )\r\n return Buffer.concat([iv, encrypted]).toString('base64');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4086,\"Name\":\"SOS Options\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\r\\nvar configsSMS = []; // for sms template\\r\\nvar SOSOptions;\\r\\nvar Handsfree, Makecall;\\r\\n//var command = \\\"SOSO=\\\" + JSON.stringify(params.SOSOptions.HandsFree);\\r\\nif (params.MakeCall.EnableDisableMakeCall == \\\"true\\\") {\\r\\n Makecall = 1;\\r\\n if (params.MakeCall.HandsFree === \\\"true\\\") {\\r\\n Handsfree = \\\"1\\\";\\r\\n } else {\\r\\n Handsfree = \\\"0\\\";\\r\\n }\\r\\n} else {\\r\\n Makecall = \\\"0\\\";\\r\\n Handsfree = \\\"0\\\";\\r\\n}\\r\\nvar command = \\\"SOSO=\\\" + params.MakeCall.Timeout + \\\",\\\" + Makecall + \\\",\\\" + Handsfree;\\r\\nvar sequenceNumber = (new Date().getTime()).toString(36);\\r\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\r\\nconst _crypto = require('crypto');\\r\\nvar password = params.Password.Password;\\r\\nif (password === \\\"\\\") {\\r\\n var part2 = command;\\r\\n} else {\\r\\n var part2 = encrypt(command, part1, password);\\r\\n}\\r\\nAddValue(\\\"part1\\\", part1);\\r\\nAddValue(\\\"part2\\\", part2);\\r\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\r\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\r\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\r\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS //for sms template\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n\\r\\nfunction AddValue(p1, p2) {\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n configs.push(cvpair);\\r\\n}\\r\\n\\r\\nfunction AddValueSMS(p1, p2) { //function for sms template\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n configsSMS.push(cvpair);\\r\\n}\\r\\n\\r\\nfunction encrypt(text, mid, password) {\\r\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\r\\n const iv = _crypto.randomBytes(16); // random initialization vector\\r\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\r\\n // set the cipher\\r\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\r\\n // encrypt text\\r\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\r\\n // generate output ( encrypted text )\\r\\n return Buffer.concat([iv, encrypted]).toString('base64');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856960}],"Tags":[]},{"Id":4085,"Name":"Real Time Locate","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"POSN\";\nvar configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"request=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4085,\"Name\":\"Real Time Locate\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"POSN\\\";\\nvar configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"request=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856719}],"Tags":[]},{"Id":4084,"Name":"Set Server","TemplateSMS":"","Template":"VGCMD-001;<>;<>;","AckTemplate":null,"Operation":"var configs = [];\r\nsequenceNumber = (new Date().getTime()).toString(36);\r\nvar part1 = \"update=\" + sequenceNumber;\r\nvar command = \"IP=\" + params.SetServer.SetPrimaryServer + ',' + params.SetServer.SetSecondaryServer;\r\nconst _crypto = require('crypto');\r\nif (params.Password.Password === \"\") {\r\n var password = serverParams.Imei;\r\n} else {\r\n var password = params.Password.Password;\r\n}\r\nif (params.Password.encryption === \"true\") {\r\n var part2 = encrypt(command, part1, password);\r\n} else {\r\n var part2 = command;\r\n}\r\nAddValue(\"part1\", part1);\r\nAddValue(\"part2\", part2);\r\nAddValue(\"sequenceNumber\", sequenceNumber);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n\r\nfunction AddValue(p1, p2) {\r\n var cvpair = {\r\n code: p1,\r\n value: p2\r\n };\r\n configs.push(cvpair);\r\n}\r\n\r\nfunction encrypt(text, mid, password) {\r\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\r\n const iv = _crypto.randomBytes(16); // random initialization vector\r\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\r\n // set the cipher\r\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\r\n // encrypt text\r\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\r\n // generate output ( encrypted text )\r\n return Buffer.concat([iv, encrypted]).toString('base64');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":2,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4084,\"Name\":\"Set Server\",\"TemplateSMS\":\"\",\"Template\":\"VGCMD-001;<>;<>;\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\r\\nsequenceNumber = (new Date().getTime()).toString(36);\\r\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\r\\nvar command = \\\"IP=\\\" + params.SetServer.SetPrimaryServer + ',' + params.SetServer.SetSecondaryServer;\\r\\nconst _crypto = require('crypto');\\r\\nvar password = params.Password.Password;\\r\\nif (password === \\\"\\\") {\\r\\n var part2 = command;\\r\\n} else {\\r\\n var part2 = encrypt(command, part1, password);\\r\\n}\\r\\nAddValue(\\\"part1\\\", part1);\\r\\nAddValue(\\\"part2\\\", part2);\\r\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n\\r\\nfunction AddValue(p1, p2) {\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n configs.push(cvpair);\\r\\n}\\r\\n\\r\\nfunction encrypt(text, mid, password) {\\r\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\r\\n const iv = _crypto.randomBytes(16); // random initialization vector\\r\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\r\\n // set the cipher\\r\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\r\\n // encrypt text\\r\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\r\\n // generate output ( encrypted text )\\r\\n return Buffer.concat([iv, encrypted]).toString('base64');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856937}],"Tags":[]},{"Id":4083,"Name":"Reset Device","TemplateSMS":"","Template":"VGCMD-001;<>;<>;","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"RESET\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":2,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4083,\"Name\":\"Reset Device\",\"TemplateSMS\":\"\",\"Template\":\"VGCMD-001;<>;<>;\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"RESET\\\";\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856772}],"Tags":[]},{"Id":4082,"Name":"Cycle Interval","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"CYCCONFIG=\" + params.CycleInterval.CycleInterval;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4082,\"Name\":\"Cycle Interval\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"CYCCONFIG=\\\" + params.CycleInterval.CycleInterval;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856657}],"Tags":[]},{"Id":4081,"Name":"Set Password","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"PW=\" + params.Password.Password;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n // var password = params.Password.Password;\n // use old password if it has been changed to send password update\n let new_password = params.Password.Password;\n let old_password = params.Password.PasswordOld;\n if (new_password === old_password) {\n var password = new_password;\n } else {\n var password = old_password;\n }\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4081,\"Name\":\"Set Password\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"PW=\\\" + params.Password.Password;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n}\\n//if (params.Password.encryption === \\\"true\\\") {\\n// var part2 = encrypt(command, part1, password);\\n//} else {\\nvar part2 = command;\\n//}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715687167},{"Type":1,"NewValue":"{\"Id\":4081,\"Name\":\"Set Password\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"PW=\\\" + params.Password.Password;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = serverParams.Imei;\\n//if (params.Password.encryption === \\\"true\\\") {\\nvar part2 = encrypt(command, part1, password);\\n//} else {\\n// var part2 = command;\\n//}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715860808}],"Tags":[]},{"Id":4097,"Name":"ClearBuffer","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"CLRBUF\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":false,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":4097,\"Name\":\"ClearBuffer\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"CLRBUF\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":false,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710177961},{"Type":1,"NewValue":"{\"Id\":4097,\"Name\":\"ClearBuffer\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"CLRBUF\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713428245},{"Type":1,"NewValue":"{\"Id\":4097,\"Name\":\"ClearBuffer\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"CLRBUF\\\";\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856637},{"Type":1,"NewValue":"{\"Id\":4097,\"Name\":\"ClearBuffer\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"CLRBUF\\\";\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862327}],"Tags":[]},{"Id":4098,"Name":"RequestData","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"REQDATA\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":4098,\"Name\":\"RequestData\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQDATA\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178028},{"Type":1,"NewValue":"{\"Id\":4098,\"Name\":\"RequestData\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQDATA\\\";\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856734}],"Tags":[]},{"Id":4099,"Name":"RequestLog","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"REQLOG\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178130},{"Type":1,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nvar starttime = params.DeviceConfig.StartTimeLog;\\nvar endtime = params.DeviceConfig.EndTimeLog;\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG=\\\" + starttime + \\\",\\\" + endtime;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440200},{"Type":1,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nvar starttime = params.DeviceConfig.StartTimeLog;\\nvar someDate = new Date(starttime);\\nstarttimeInt = someDate.getTime() / 1000;\\nvar endtime = params.DeviceConfig.EndTimeLog;\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG=\\\" + starttimeInt + \\\",\\\" + endtime;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713441651},{"Type":1,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nvar starttimestr = params.DeviceConfig.StartTimeLog;\\nvar starttimedate = new Date(starttimestr);\\nstarttimeInt = starttimedate.getTime() / 1000;\\nvar endtimestr = params.DeviceConfig.EndTimeLog;\\nvar endtimedate = new Date(endtimestr);\\nendtimeInt = endtimedate.getTime() / 1000;\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG=\\\" + starttimeInt + \\\",\\\" + endtimeInt;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713441974},{"Type":1,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nvar starttimestr = params.DeviceConfig.StartTimeLog;\\nvar starttimedate = new Date(starttimestr);\\nstarttimeInt = starttimedate.getTime() / 1000;\\nif (isNan(starttimeInt)) {\\n starttimeInt = '';\\n}\\nvar endtimestr = params.DeviceConfig.EndTimeLog;\\nvar endtimedate = new Date(endtimestr);\\nendtimeInt = endtimedate.getTime() / 1000;\\nif (isNan(endtimeInt)) {\\n endtimeInt = '';\\n}\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG=\\\" + starttimeInt + \\\",\\\" + endtimeInt;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714563558},{"Type":1,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nvar starttimestr = params.DeviceConfig.StartTimeLog;\\nvar starttimedate = new Date(starttimestr);\\nstarttimeInt = starttimedate.getTime() / 1000;\\nif (isNaN(starttimeInt)) {\\n starttimeInt = '';\\n}\\nvar endtimestr = params.DeviceConfig.EndTimeLog;\\nvar endtimedate = new Date(endtimestr);\\nendtimeInt = endtimedate.getTime() / 1000;\\nif (isNaN(endtimeInt)) {\\n endtimeInt = '';\\n}\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG=\\\" + starttimeInt + \\\",\\\" + endtimeInt;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714563687},{"Type":1,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nvar starttimestr = params.DeviceConfig.StartTimeLog;\\nvar starttimedate = new Date(starttimestr);\\nstarttimeInt = starttimedate.getTime() / 1000;\\nif (isNaN(starttimeInt)) {\\n starttimeInt = '';\\n}\\nvar endtimestr = params.DeviceConfig.EndTimeLog;\\nvar endtimedate = new Date(endtimestr);\\nendtimeInt = endtimedate.getTime() / 1000;\\nif (isNaN(endtimeInt)) {\\n endtimeInt = '';\\n}\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG=\\\" + starttimeInt + \\\",\\\" + endtimeInt;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856754}],"Tags":[]},{"Id":4100,"Name":"Set RTLog Enable","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"// write your code here...\nif (params.DeviceConfig.EnableLogging == \"true\") {\n enableLogging = \"1\";\n} else {\n enableLogging = \"0\";\n}\nvar command = \"RTLOG=\" + enableLogging;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":4100,\"Name\":\"Set RTLog Enable\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.DeviceConfig.EnableLogging == \\\"true\\\") {\\n enableLogging = \\\"1\\\";\\n} else {\\n enableLogging = \\\"0\\\";\\n}\\nvar command = \\\"RTLOG=\\\" + enableLogging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178198},{"Type":1,"NewValue":"{\"Id\":4100,\"Name\":\"Set RTLog Enable\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.DeviceConfig.EnableLogging == \\\"true\\\") {\\n enableLogging = \\\"1\\\";\\n} else {\\n enableLogging = \\\"0\\\";\\n}\\nvar command = \\\"RTLOG=\\\" + enableLogging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856881}],"Tags":[]}],"Operations":[{"Id":278,"Name":"VGV","Operation":"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\n // Define array to push device data into. This will be put into the msg array at the end.\n var deviceParams = [];\n var configsToSend = [];\n var tasks = [];\n const _crypto = require('crypto');\n // handle ACK\n if (messageTypeCode == \"ACK\") {\n return \"\";\n }\n if (params.encrypted_data) { // encrypted data so needs decrypting\n var password;\n if (params.imei == \"null\") {\n return msg;\n }\n password = params.imei;\n if (configs.Password.Password === \"\") {\n // use imei as default password when not specified\n } else {\n // use the password\n password = configs.Password.Password\n }\n // handle encrypted messages arriving via SMS\n // if (raw.startsWith('esendex')) {\n // raw = raw.split('esendex')[2];\n // encimei = raw.split(';')[1];\n // imei = parseInt(raw.split(';')[1], 36).toString();\n // AddValue('imei', imei);\n // raw = raw.replace(encimei, imei);\n // password = imei;\n // }\n let message = decrypt(raw, password);\n //ToDo: handle errors messages arriving\n // if (message.startsWith(\"error\")) {\n // ack = \"ERR;\" + params.count_number + \";\";\n // msg.push({\n // 'code': 'ack',\n // 'value': ack\n // });\n // console.log(msg);\n // } \n if (message) {\n // send message internally\n sendMessageToLocalhost(message);\n let ack = \"ACK-MSG;\" + params.count_number + \";OK;\\n\"\n AddValue(\"ack\", ack);\n } else {\n ack = \"unknown message\" + \" - \" + serverParams.imei + \" --- \" + raw;\n AddValue(\"ack\", ack);\n }\n } else { // General Oysta Template\n if (messageTypeLocalCode == \"COMM\") { // a message from Invent!\n const details = JSON.parse(raw);\n // AddValue('imei', details.AppId);\n AddValue('json_in', JSON.stringify(details));\n switch (details.Command) {\n case \"ACTIVATE_OK\":\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\n break;\n case \"ACTIVATE_FAILS\":\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\n break;\n case \"CONFIG\":\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\n break;\n case \"SETSOS\":\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\n break;\n case \"APPSET\":\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\n AddConfig(configIds.Password.Password, details.Data.Password);\n break;\n case \"AGGMACS\":\n if (\"Macs\" in details.Data) {\n let mac_string = '';\n for (mac of details.Data.Macs) {\n mac_string = mac_string + mac + \",\";\n }\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \",\"\n );\n };\n break;\n case \"BLESCANON\":\n if (\"Macs\" in details.Data) {\n let mac_string = '';\n for (mac of details.Data.Macs) {\n mac_string = mac_string + mac + \",\";\n }\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \",\"\n );\n };\n AddConfig(configIds.Scanning.EnableScanning, 'true')\n break;\n case \"BLESCANOFF\":\n AddConfig(configIds.Scanning.EnableScanning, 'false')\n break;\n case \"NOTE\":\n let type = details.Data.Type !== undefined ? details.Data.Type : \"TYPE MISSING\";\n let text = details.Data.Text !== undefined ? details.Data.Text : \"Text Missing\";\n text = text.split(\",\").join(\" \"); // remove commas\n let id = details.Data.Id !== undefined ? details.Data.Id : \"Id Missing\";\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\n let value = time + \",\" + type + \",\" + id + \",\" + text;\n AddConfig(configIds.Note.Message, value)\n break;\n }\n } else if (messageTypeLocalCode == \"REGISTER\") { // Register message\n let ble_mac = params.ble_mac;\n let iccid = params.iccid;\n // write values to readonly settings\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\n // remove this to disable auto-config\n //AddConfig(configIds.DeviceConfig.IVActivated, 'true')\n // will automtaically send notification template with all details.\n } else if (messageTypeLocalCode == \"CREATE\") { // Create message\n // temp fix to filter old messages\n const cutoff = 1707523200000; //10.2.2024\n let message_id_time = parseInt(params.count_number, 36);\n if (message_id_time > cutoff) {\n let ble_mac = params.ble_mac;\n let iccid = params.iccid;\n let new_imei = params.new_imei;\n let message = \"VGV-001;\" + new_imei + \";mid=\" + params.count_number + \";REGISTER=\" + ble_mac + \",\" + iccid + \";\";\n // sendMessageToLocalhost(message); \n tasks = [{\n \"name\": \"VGV\" + new_imei,\n \"option\": \"sync\",\n \"type\": \"createDevice\",\n \"payload\": JSON.stringify({\n \"name\": \"VGV\" + new_imei,\n \"imei\": new_imei,\n \"abortOnError\": false,\n \"init\": true\n }),\n \"order\": 1\n }, {\n \"name\": \"Create VGV\" + new_imei,\n \"option\": \"async\",\n \"type\": \"sendMessage\",\n \"payload\": JSON.stringify({\n \"message\": message\n }),\n \"order\": 2\n }]\n }\n } else {\n // Generate location_accuracy based on raw_accuracy - currently no conversion\n if (!params.raw_accuracy) {\n AddValue('location_accuracy', 9000);\n } else {\n AddValue('location_accuracy', params.raw_accuracy);\n }\n // generate timestamps if they don't exist\n if (!params.event_time) {\n AddValue('event_time', moment.utc().unix());\n }\n if (!params.location_time) {\n AddValue('event_time', moment.utc().unix());\n }\n //if no lat and long are given, set them to 0, 0\n if (!params.latitude_raw) {\n AddValue('latitude', 0);\n } else {\n AddValue('latitude', params.latitude_raw);\n }\n if (!params.longitude_raw) {\n AddValue('longitude', 0);\n } else {\n AddValue('longitude', params.longitude_raw);\n }\n }\n // add messagetTypeLocal to output for templates\n AddValue('local_message_type', messageTypeLocalCode);\n }\n var msg = {\n 'values': deviceParams,\n };\n if (configsToSend.length > 0) {\n msg.configsToSend = configsToSend\n };\n if (tasks.length > 0) {\n msg.tasks = tasks\n };\n // commit values to receiver processor\n console.log(msg);\n\n function sendMessageToLocalhost(str) {\n if (localTesting) {\n console.log(\"Sending message to local host: \" + str);\n } else {\n var server = 'receiver-tcp';\n var c = createConnection(5678, server);\n c.write(`${str}`);\n c.end();\n }\n AddValue(\"ToLocalhost\", str);\n }\n\n function createConnection(port, server) {\n c = net.createConnection(port, server);\n c.on('error', function(error) {\n c = createConnection(port, server);\n });\n return c;\n }\n\n function decrypt(encdata, password) {\n var decrypted;\n var dataarray = encdata.split(\";\");\n if (dataarray.length > 5) {\n return \"\";\n }\n var i;\n var part1 = \"\"; // part1 will hold the type, IMEI and message ID\n if (encdata.startsWith(\"ACK\")) {\n return encdata;\n }\n for (i = 0; i < 3; i++) {\n part1 = part1 + dataarray[i] + \";\";\n }\n var mid = dataarray[2]; // use the message ID to create the salt\n var enctext = dataarray[3].split(\"=\")[1]; // the encypted data\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n // base64 decoding and extract the iv and encrypted data\n const bData = Buffer.from(enctext, 'base64');\n const iv = bData.slice(0, 16); // initial 16 chars\n const text = bData.slice(16); // all the encrypted data\n // derive key using; 32 byte key length (from salted password and mid)\n // decrypt the data in part2 and add to part1\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\n try {\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\n } catch (err) {\n decrypted = undefined;\n }\n return decrypted;\n }\n\n function encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n }\n\n function AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n deviceParams.push(cvpair);\n }\n\n function AddConfig(configName, newvalue) {\n if (newvalue !== undefined) { // don't add if newvalue is undefined\n var cvpair = {\n 'code': configName,\n 'value': newvalue, // ? newvalue : \"Not Defined\" \n 'forced': true\n };\n configsToSend.push(cvpair);\n };\n }\n\n function isASCII(str) {\n return /^[\\x00-\\xFF]*$/.test(str);\n }\n // modify to return the object that contains your data\n return msg;\n}\n// params is not defined locally -> export as module\nif (typeof(params) === 'undefined') {\n module.exports = {\n execute_ops\n }\n} else { // on server use local defined vars\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\n // define global returns\n msg = return_values;\n}","Type":0,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // remove this to disable auto-config\\n //AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n // will automtaically send notification template with all details.\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1710245093},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // remove this to disable auto-config\\n if (serverParams.EnvName) {\\n AddValue(\\\"EnvVar\\\", serverParams.EnvName);\\n }\\n //AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n // will automtaically send notification template with all details.\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1711033993},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // will automtaically Activate on Acceptance\\n if (serverParams.EnvName) {\\n if (serverParams.EnvName === \\\"acceptance\\\") {\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n }\\n }\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1711035615},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // check ICCID is a number\\n if (isNaN(iccid)) {\\n iccid = \\\"invalid ICCID\\\"\\n }\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // will automtaically Activate on Acceptance\\n if (serverParams.EnvName) {\\n if (serverParams.EnvName === \\\"acceptance\\\") {\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n }\\n }\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1714652453},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // will automtaically Activate on Acceptance\\n if (serverParams.EnvName) {\\n if (serverParams.EnvName === \\\"acceptance\\\") {\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n }\\n }\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // check ICCID is a number\\n if (isNaN(iccid)) {\\n iccid = \\\"invalid ICCID\\\"\\n }\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1715246932}]}],"Groups":[{"Id":5606,"Parent":null,"Name":"Settings","Json":"{\"description\":null,\"columns\":2,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5607,"Parent":null,"Name":"Emergency Options","Json":"{\"description\":null,\"columns\":2,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5608,"Parent":null,"Name":"Notification","Json":"{\"description\":null,\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5609,"Parent":null,"Name":"Not Implemented","Json":"{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5610,"Parent":null,"Name":"Admin config","Json":"{ \"description\": \"Admin config\", \"columns\": 2, \"order\": 1, \"listSize\": 1, \"toTranslate\": [ \"name\", \"description\" ]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"ProtocolActionObjects":[]},{"Id":5611,"Parent":null,"Name":"Actions","Json":"{\"description\":\"Power off, real time locate etc.\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5612,"Parent":{"Id":5607,"Name":"Emergency Options","Json":{"description":null,"columns":2,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5612,"Name":"Make Call","Json":{"description":"Emergency phone number for the device","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Make Call","Json":"{\"description\":\"Emergency phone number for the device\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5613,"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Cycle Interval","Json":"{ \"description\": \"Define the period for which the device should send regular location updates, and how frequent those updates are.\", \"columns\": 1, \"order\": 2, \"listSize\": 1, \"toTranslate\": [ \"name\", \"description\" ]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5614,"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Battery alerts","Json":"{ \"description\": \"Battery alerts\", \"columns\": 1, \"order\": 5, \"toTranslate\": [ \"name\", \"description\" ]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5615,"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Scanning","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5616,"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"DeviceConfig","Json":"{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5616,\"Parent\":{\"Id\":5610,\"Name\":\"Admin config\",\"Json\":{\"description\":\"Admin config\",\"columns\":2,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5617,\"Name\":\"Password\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"DeviceConfig\",\"Json\":\"{\\\"description\\\":\\\"Device configuration values.\\\",\\\"columns\\\":1,\\\"order\\\":1,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1714564811}]},{"Id":5617,"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Password","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5618,"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Real Time Locate","Json":"{\"description\":\"Real Time Locate\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5619,"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"No Activity","Json":"{\"description\":\"No Activity\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5620,"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Set Server","Json":"{\"description\":\"Set Server\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"ProtocolActionObjects":[]},{"Id":5621,"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Non Movement","Json":"{\"description\":\"\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5622,"Parent":{"Id":5608,"Name":"Notification","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5622,"Name":"Note","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Note","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]}],"GroupParams":[{"Id":9658,"Group":{"Id":5612,"Name":"Make Call","Json":{"description":"Emergency phone number for the device","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5607,"Name":"Emergency Options","Json":{"description":null,"columns":2,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"HandsFree","Json":"{\"name\":\"HandsFree\",\"default\":\"\",\"description\":\"HandsFree\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"SOS number is called with handsfree\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9631,"Group":{"Id":5612,"Name":"Make Call","Json":{"description":"Emergency phone number for the device","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5607,"Name":"Emergency Options","Json":{"description":null,"columns":2,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Make Call","Json":"{\"name\":\"Enable Disable Make Call\",\"default\":\"\",\"description\":\"Make Call\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9656,"Group":{"Id":5612,"Name":"Make Call","Json":{"description":"Emergency phone number for the device","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5607,"Name":"Emergency Options","Json":{"description":null,"columns":2,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Timeout","Json":"{\"name\":\"Timeout\",\"default\":\"\",\"description\":\"Timeout before sending the Alert.\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Seconds\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9657,"Group":{"Id":5612,"Name":"Make Call","Json":{"description":"Emergency phone number for the device","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5607,"Name":"Emergency Options","Json":{"description":null,"columns":2,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"SOS Number","Json":"{ \"name\": \"SOS Number\", \"default\": \"\", \"description\": \"Number which will be called in the event the SOS button is pressed\", \"type\": \"phone\", \"order\": 1, \"suffix\": null, \"prefix\": null, \"min\": null, \"max\": null, \"minLength\": null, \"maxLength\": null, \"helpText\": \"Number which will be called if the SOS button is pressed ..\", \"options\": [], \"toTranslate\": [ \"name\", \"description\", \"helpText\" ]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9655,"Group":{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Cycle Interval","Json":"{\"name\":\"Cycle Interval\",\"default\":\"\",\"description\":\"Cycle Interval\",\"type\":\"number\",\"suffix\":\"seconds\",\"prefix\":null,\"min\":1,\"max\":1440,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Frequency of location events, in seconds\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9652,"Group":{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Battery Charging Alerts","Json":"{\"name\":\"Enable Battery Charging Alerts\",\"default\":\"true\",\"description\":\"Enable Alerts when charging.\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Alerts will be sent when the users connects or disconnects the device to the charging station.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":4}","Default":"true","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9651,"Group":{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Battery Critical Alert","Json":"{\"name\":\"Enable Battery Critical Alert\",\"default\":\"true\",\"description\":\"Enable Battery Critical Alert\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Sends an Alert when the battery is critically low.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9650,"Group":{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Battery Critical Threshold","Json":"{\"name\":\"Battery Critical Threshold\",\"default\":\"\",\"description\":\"Battery Critical Threshold\",\"type\":\"number\",\"suffix\":\"%\",\"prefix\":null,\"min\":1,\"max\":99,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Percentage at which the device sends a critical battery alert\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9654,"Group":{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Battery Low Threshold","Json":"{\"name\":\"Battery Low Threshold\",\"default\":\"100\",\"description\":\"Battery Low Threshold\",\"type\":\"number\",\"suffix\":\"%\",\"prefix\":null,\"min\":1,\"max\":99,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Percentage at which the device sends a low battery alert\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"100","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9653,"Group":{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Battery Low Alert","Json":"{\"name\":\"Enable Battery Low Alert\",\"default\":\"true\",\"description\":\"Enable Battery Low Alert\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"true","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9649,"Group":{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"MacIDs","Json":"{\"name\":\"MacIDs\",\"default\":\"\",\"description\":\"List of MAC addresses\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Comma separated list of MAC addresses used in the scanning process.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9648,"Group":{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"EnableScanning","Json":"{\"name\":\"EnableScanning\",\"default\":\"false\",\"description\":\"Enable Scanning\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"When enabled will scan for MAC IDs and send a PROX alert if found.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9640,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"IV ActivatedFailMessage","Json":"{\"name\":\"IV ActivatedFailMessage\",\"default\":\"\",\"description\":\"Reason for Activation Failure\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9640,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV ActivatedFailMessage\",\"Json\":\"{\\\"name\\\":\\\"IV ActivatedFailMessage\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reason for Activation Failure\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":8}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440665},{"Type":1,"NewValue":"{\"Id\":9640,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV ActivatedFailMessage\",\"Json\":\"{\\\"name\\\":\\\"IV ActivatedFailMessage\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reason for Activation Failure\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":7}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440730}],"Tags":[]},{"Id":9647,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Reset","Json":"{\"name\":\"Reset\",\"default\":\"\",\"description\":\"Reset Device\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9647,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Reset\",\"Json\":\"{\\\"name\\\":\\\"Reset\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reset Device\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":10}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440673},{"Type":1,"NewValue":"{\"Id\":9647,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Reset\",\"Json\":\"{\\\"name\\\":\\\"Reset\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reset Device\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":10}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440682},{"Type":1,"NewValue":"{\"Id\":9647,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Reset\",\"Json\":\"{\\\"name\\\":\\\"Reset\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reset Device\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":9}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440737},{"Type":1,"NewValue":"{\"Id\":9647,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Reset\",\"Json\":\"{\\\"name\\\":\\\"Reset\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reset Device\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":8}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564715}],"Tags":[]},{"Id":9646,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"BLE MAC","Json":"{\"name\":\"BLE MAC\",\"default\":\"\",\"description\":\"Bluetooth MAC address\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Bluetooth MAC address of the phone. No sepearator characters.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9646,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"BLE MAC\",\"Json\":\"{\\\"name\\\":\\\"BLE MAC\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Bluetooth MAC address\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bluetooth MAC address of the phone. No sepearator characters.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":0}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440632}],"Tags":[]},{"Id":9645,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"ICCID","Json":"{\"name\":\"ICCID\",\"default\":\"\",\"description\":\"SIM ICCID\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The ICCID of the SIM card.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9645,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"ICCID\",\"Json\":\"{\\\"name\\\":\\\"ICCID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"SIM ICCID\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The ICCID of the SIM card.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":6}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440657},{"Type":1,"NewValue":"{\"Id\":9645,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"ICCID\",\"Json\":\"{\\\"name\\\":\\\"ICCID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"SIM ICCID\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The ICCID of the SIM card.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":5}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440722}],"Tags":[]},{"Id":9644,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"BTN MAC","Json":"{\"name\":\"BTN MAC\",\"default\":\"\",\"description\":\"Button MAC\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The MAC address of the Flic button paired with the app.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9644,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"BTN MAC\",\"Json\":\"{\\\"name\\\":\\\"BTN MAC\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Button MAC\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The MAC address of the Flic button paired with the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":1}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440635},{"Type":1,"NewValue":"{\"Id\":9644,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"BTN MAC\",\"Json\":\"{\\\"name\\\":\\\"BTN MAC\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Button MAC\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The MAC address of the Flic button paired with the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564464},{"Type":1,"NewValue":"{\"Id\":9644,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"BTN MAC\",\"Json\":\"{\\\"name\\\":\\\"BTN MAC\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Button MAC\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The MAC address of the Flic button paired with the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":1}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564708}],"Tags":[]},{"Id":9643,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"IV Activated","Json":"{\"name\":\"IV Activated\",\"default\":\"false\",\"description\":\"Invent Activated Ok\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Flag to store if Invent has successfully activated this device.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9643,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV Activated\",\"Json\":\"{\\\"name\\\":\\\"IV Activated\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Invent Activated Ok\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Flag to store if Invent has successfully activated this device.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":7}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440660},{"Type":1,"NewValue":"{\"Id\":9643,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV Activated\",\"Json\":\"{\\\"name\\\":\\\"IV Activated\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Invent Activated Ok\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Flag to store if Invent has successfully activated this device.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":6}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440726}],"Tags":[]},{"Id":9642,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Test Bounce Back","Json":"{\"name\":\"Test Bounce Back\",\"default\":\"false\",\"description\":\"Test Bounce Back\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Bounce incoming messages back as notifications.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440685},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440694},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564300},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564731},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564750}],"Tags":[]},{"Id":9641,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Config Mode","Json":"{\"name\":\"Config Mode\",\"default\":\"false\",\"description\":\"Config Mode\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enables Config mode on in the app to show additional actions and buttons.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9641,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Config Mode\",\"Json\":\"{\\\"name\\\":\\\"Config Mode\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Config Mode\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enables Config mode on in the app to show additional actions and buttons.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":3}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440644}],"Tags":[]},{"Id":9638,"Group":{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Password","Json":"{\"name\":\"Password\",\"default\":\"\",\"description\":\"Password\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Password used to encrypt communication between Device and platform. Uses Imei if empty.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9639,"Group":{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"encryption","Json":"{\"name\":\"encryption\",\"default\":\"true\",\"description\":\"enable encryption for commands\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9639,\"Group\":{\"Id\":5617,\"Name\":\"Password\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"encryption\",\"Json\":\"{\\\"name\\\":\\\"encryption\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"enable encryption for commands\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856989}],"Tags":[]},{"Id":9637,"Group":{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Real Time Locate","Json":"{\"name\":\"Real Time Locate\",\"default\":\"\",\"description\":\"Position Request\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Real Time Locate\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9635,"Group":{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"No Activity","Json":"{\"name\":\"No Activity\",\"default\":\"\",\"description\":\"Set No Activity Events\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":5,\"max\":10080,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Set No Activity Alerts in minutes. If the device does not report in the time frame it triggers a No Activity alert\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9636,"Group":{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable No Activity","Json":"{\"name\":\"Enable Disable No Activity\",\"default\":\"true\",\"description\":\"Enable Disable No Activity\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enable or disable no activity alerts\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9633,"Group":{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Set Secondary Server","Json":"{\"name\":\"Set Secondary Server\",\"default\":\"\",\"description\":\"Select Server\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[{\"value\":\"52.232.85.255:5678\",\"label\":\"Production Secondary\"},{\"value\":\"52.174.17.77:5678\",\"label\":\"Acceptance Secondary\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9634,"Group":{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Set Primary Server","Json":"{\"name\":\"Set Primary Server\",\"default\":\"\",\"description\":\"Set Primary Server\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Select which server you wish the device to communicate to\",\"options\":[{\"value\":\"52.232.85.255:5678\",\"label\":\"Production Primary\"},{\"value\":\"52.174.17.77:5678\",\"label\":\"Acceptance Primary\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9632,"Group":{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable NonMovement","Json":"{\"name\":\"Enable Disable NonMovement\",\"default\":\"true\",\"description\":null,\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9659,"Group":{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"period ","Json":"{\"name\":\"period \",\"default\":\"600\",\"description\":\"Period in seconds which defines \\\"non-movement\\\"\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":5,\"max\":7200,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"600","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9660,"Group":{"Id":5622,"Name":"Note","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5608,"Name":"Notification","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Message","Json":"{\"name\":\"Message\",\"default\":\"\",\"description\":\"Message\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Note as Comma sepearted values with Time(s from epoch), Type (INFO|WARNING|...), ID, Text.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9660,\"Group\":{\"Id\":5622,\"Name\":\"Note\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Message\",\"Json\":\"{\\\"name\\\":\\\"Message\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Message\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Note as Comma sepearted values with Time(s from epoch), Type (BATTERY|REDALERT|...), ID, Text.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564690}],"Tags":[]},{"Id":9661,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Clear Message Buffer","Json":"{\"name\":\"Clear Message Buffer\",\"default\":\"\",\"description\":\"Clear Message Buffer\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Clears the message buffer of unsent messages.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9661,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Clear Message Buffer\",\"Json\":\"{\\\"name\\\":\\\"Clear Message Buffer\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Clear Message Buffer\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Clears the message buffer of unsent messages.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178254},{"Type":0,"NewValue":"{\"Id\":9661,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Clear Message Buffer\",\"Json\":\"{\\\"name\\\":\\\"Clear Message Buffer\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Clear Message Buffer\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Clears the message buffer of unsent messages.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":4097,\"Protocol\":{\"Id\":205,\"Code\":\"VGV\",\"Version\":\"0.2\",\"FirmwareVersion\":\"\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"ClearBuffer\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"CLRBUF\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":false,\"HexString\":false,\"SendAttempts\":1,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178259},{"Type":1,"NewValue":"{\"Id\":9661,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Clear Message Buffer\",\"Json\":\"{\\\"name\\\":\\\"Clear Message Buffer\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Clear Message Buffer\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Clears the message buffer of unsent messages.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":2}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440640}],"Tags":[]},{"Id":9661,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Clear Message Buffer","Json":"{\"name\":\"Clear Message Buffer\",\"default\":\"\",\"description\":\"Clear Message Buffer\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Clears the message buffer of unsent messages.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":4097,"Protocol":{"Id":205,"Code":"VGV","Version":"0.2","FirmwareVersion":"","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"ClearBuffer","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"CLRBUF\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":false,"HexString":false,"SendAttempts":1,"Order":null},"ProtocolActionObjects":[],"Tags":[]},{"Id":9662,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Enable Logging","Json":"{\"name\":\"Enable Logging\",\"default\":\"\",\"description\":\"Enable Realtime logging to Kibana.\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9662,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Logging\",\"Json\":\"{\\\"name\\\":\\\"Enable Logging\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable Realtime logging to Kibana.\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178764},{"Type":0,"NewValue":"{\"Id\":9662,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Logging\",\"Json\":\"{\\\"name\\\":\\\"Enable Logging\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable Realtime logging to Kibana.\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":{\"Id\":4100,\"Protocol\":{\"Id\":205,\"Code\":\"VGV\",\"Version\":\"0.3\",\"FirmwareVersion\":\"\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set RTLog Enable\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.DeviceConfig.EnableLogging == \\\"true\\\") {\\n enableLogging = \\\"1\\\";\\n} else {\\n enableLogging = \\\"0\\\";\\n}\\nvar command = \\\"RTLOG=\\\" + enableLogging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":false,\"SendAttempts\":1,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178770},{"Type":1,"NewValue":"{\"Id\":9662,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Logging\",\"Json\":\"{\\\"name\\\":\\\"Enable Logging\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable Realtime logging to Kibana.\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":4}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440649},{"Type":1,"NewValue":"{\"Id\":9662,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Logging\",\"Json\":\"{\\\"name\\\":\\\"Enable Logging\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Enable Realtime logging to Kibana.\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564447},{"Type":1,"NewValue":"{\"Id\":9662,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Logging\",\"Json\":\"{\\\"name\\\":\\\"Enable Logging\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Enable Realtime logging to Kibana.\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":4}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564711}],"Tags":[]},{"Id":9662,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Enable Logging","Json":"{\"name\":\"Enable Logging\",\"default\":\"\",\"description\":\"Enable Realtime logging to Kibana.\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":{"Id":4100,"Protocol":{"Id":205,"Code":"VGV","Version":"0.3","FirmwareVersion":"","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set RTLog Enable","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"// write your code here...\nif (params.DeviceConfig.EnableLogging == \"true\") {\n enableLogging = \"1\";\n} else {\n enableLogging = \"0\";\n}\nvar command = \"RTLOG=\" + enableLogging;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":false,"SendAttempts":1,"Order":null},"ProtocolActionObjects":[],"Tags":[]},{"Id":9663,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Get Logs","Json":"{\"name\":\"Get Logs\",\"default\":\"\",\"description\":\"Get current Logs from the App.\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Will send logs directly to Kibana.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get current Logs from the App.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178822},{"Type":0,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get current Logs from the App.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":4099,\"Protocol\":{\"Id\":205,\"Code\":\"VGV\",\"Version\":\"0.3\",\"FirmwareVersion\":\"\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":false,\"SendAttempts\":1,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178827},{"Type":1,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get current Logs from the App.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":5}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440653},{"Type":1,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get current Logs from the App.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":10}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440741},{"Type":1,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get Logs from Starttime to Endtime\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana. Use log time (GMT = -1h)\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564419},{"Type":1,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get Logs from Starttime to Endtime\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana. Use log time (GMT = -1h)\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":9}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564717}],"Tags":[]},{"Id":9663,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Get Logs","Json":"{\"name\":\"Get Logs\",\"default\":\"\",\"description\":\"Get current Logs from the App.\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Will send logs directly to Kibana.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":4099,"Protocol":{"Id":205,"Code":"VGV","Version":"0.3","FirmwareVersion":"","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"RequestLog","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"REQLOG\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":false,"SendAttempts":1,"Order":null},"ProtocolActionObjects":[],"Tags":[]},{"Id":9664,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Request Data","Json":"{\"name\":\"Request Data\",\"default\":\"\",\"description\":\"Request All Data command.\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Will return version and other settings from the app.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178894},{"Type":0,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":4087,\"Protocol\":{\"Id\":205,\"Code\":\"VGV\",\"Version\":\"0.3\",\"FirmwareVersion\":\"\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Battery Charging Alert\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.Batteryalerts.EnableBatteryChargingAlerts == \\\"true\\\") {\\n batCharging = 1;\\n} else {\\n batCharging = \\\"0\\\";\\n}\\nvar command = \\\"BATC=\\\" + batCharging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":false,\"SendAttempts\":2,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178899},{"Type":0,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":4098,\"Protocol\":{\"Id\":205,\"Code\":\"VGV\",\"Version\":\"0.3\",\"FirmwareVersion\":\"\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"RequestData\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQDATA\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":false,\"SendAttempts\":1,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178902},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":9}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440669},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":9}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440678},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":8}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440733},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714162948},{"Type":2,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":4087,\"Protocol\":{\"Id\":205,\"Code\":\"VGV\",\"Version\":\"0.7\",\"FirmwareVersion\":\"\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Battery Charging Alert\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.Batteryalerts.EnableBatteryChargingAlerts == \\\"true\\\") {\\n batCharging = 1;\\n} else {\\n batCharging = \\\"0\\\";\\n}\\nvar command = \\\"BATC=\\\" + batCharging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":false,\"SendAttempts\":2,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714162955},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564727},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564753}],"Tags":[]},{"Id":9664,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Request Data","Json":"{\"name\":\"Request Data\",\"default\":\"\",\"description\":\"Request All Data command.\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Will return version and other settings from the app.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":4087,"Protocol":{"Id":205,"Code":"VGV","Version":"0.3","FirmwareVersion":"","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Battery Charging Alert","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"// write your code here...\nif (params.Batteryalerts.EnableBatteryChargingAlerts == \"true\") {\n batCharging = 1;\n} else {\n batCharging = \"0\";\n}\nvar command = \"BATC=\" + batCharging;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":false,"SendAttempts":2,"Order":null},"ProtocolActionObjects":[],"Tags":[]},{"Id":9664,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Request Data","Json":"{\"name\":\"Request Data\",\"default\":\"\",\"description\":\"Request All Data command.\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Will return version and other settings from the app.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":4098,"Protocol":{"Id":205,"Code":"VGV","Version":"0.3","FirmwareVersion":"","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"RequestData","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"REQDATA\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":false,"SendAttempts":1,"Order":null},"ProtocolActionObjects":[],"Tags":[]},{"Id":9665,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Version","Json":"{\"name\":\"Version\",\"default\":\"\",\"description\":\"Current Version of the App.\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Use Button Request Data to update the field.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178950},{"Type":1,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":14}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440688},{"Type":1,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":14}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440698}],"Tags":[]},{"Id":11088,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"StartTimeLog","Json":"{\"name\":\"StartTimeLog\",\"default\":\"\",\"description\":\"StartTime for Logs request\",\"type\":\"datetime\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":11088,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"StartTimeLog\",\"Json\":\"{\\\"name\\\":\\\"StartTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"StartTime for Logs request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713439790},{"Type":1,"NewValue":"{\"Id\":11088,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"StartTimeLog\",\"Json\":\"{\\\"name\\\":\\\"StartTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"StartTime for Logs request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":11}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440677},{"Type":1,"NewValue":"{\"Id\":11088,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"StartTimeLog\",\"Json\":\"{\\\"name\\\":\\\"StartTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"StartTime for Logs request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":11}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440686},{"Type":1,"NewValue":"{\"Id\":11088,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"StartTimeLog\",\"Json\":\"{\\\"name\\\":\\\"StartTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"StartTime for Logs request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":10}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564721}],"Tags":[]},{"Id":11089,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"EndTimeLog","Json":"{\"name\":\"EndTimeLog\",\"default\":\"\",\"description\":\"Endtime for log request\",\"type\":\"datetime\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":11089,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"EndTimeLog\",\"Json\":\"{\\\"name\\\":\\\"EndTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Endtime for log request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713439985},{"Type":1,"NewValue":"{\"Id\":11089,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"EndTimeLog\",\"Json\":\"{\\\"name\\\":\\\"EndTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Endtime for log request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440690},{"Type":1,"NewValue":"{\"Id\":11089,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"EndTimeLog\",\"Json\":\"{\\\"name\\\":\\\"EndTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Endtime for log request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":11}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564724}],"Tags":[]}],"ProtocolChanges":[{"Version":"0.2","UserName":"Sean-Admin","Resource":"MessageType","Name":"ALLDATA","Message":"(Create) (ALLDATA) Created ALLDATA","Timestamp":1710177889},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Command","Name":"ClearBuffer","Message":"(Create) (ClearBuffer) added Clear buffer command","Timestamp":1710177961},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Command","Name":"RequestData","Message":"(Create) (RequestData) REQDATA command","Timestamp":1710178028},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Create) (RequestLog) REQLOG command","Timestamp":1710178130},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Command","Name":"Set RTLog Enable","Message":"(Create) (Set RTLog Enable) RTLOG command","Timestamp":1710178198},{"Version":"0.2","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Clear Message Buffer","Message":"(Create) (Clear Message Buffer) ClearBuffer Button","Timestamp":1710178254},{"Version":"0.2","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Clear Message Buffer","Message":"Associate groupParam Clear Message Buffer to command ClearBuffer","Timestamp":1710178259},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"added ALLDATA and new commands","Timestamp":1710178496},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"(Create) (Enable Logging) RTLOG enable","Timestamp":1710178764},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"Associate groupParam Enable Logging to command Set RTLog Enable","Timestamp":1710178770},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Create) (Get Logs) Request Logs button","Timestamp":1710178822},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"Associate groupParam Get Logs to command RequestLog","Timestamp":1710178827},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Create) (Request Data) REQDATA button","Timestamp":1710178894},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"Associate groupParam Request Data to command Battery Charging Alert","Timestamp":1710178899},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"Associate groupParam Request Data to command RequestData","Timestamp":1710178902},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Create) (Version) Version text field","Timestamp":1710178950},{"Version":"0.3","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"Remaining properties for logs and version","Timestamp":1710178977},{"Version":"0.4","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) updated operations with ALLDATA processing","Timestamp":1710245093},{"Version":"0.4","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"fix for getting version","Timestamp":1710245132},{"Version":"0.5","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) EnvVar test","Timestamp":1711033993},{"Version":"0.5","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) proper implementation for autoactivate on acceptance","Timestamp":1711035615},{"Version":"0.5","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"Auto-register on Acceptance","Timestamp":1711037706},{"Version":"0.6","UserName":"Sean-Admin","Resource":"MessageType","Name":"CYC","Message":"(Update) (CYC) fix for location accuracy in CYC messages","Timestamp":1712653303},{"Version":"0.6","UserName":"Sean-Admin","Resource":"MessageType","Name":"ALLDATA","Message":"(Update) (ALLDATA) fix accuracy in ALLDATA event","Timestamp":1712653474},{"Version":"0.6","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"Fix for location precision on CYC","Timestamp":1712655385},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Command","Name":"ClearBuffer","Message":"(Update) (ClearBuffer) enabling ACk for Clearbuffer","Timestamp":1713428245},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Create) (StartTimeLog) add starttime for logs\n","Timestamp":1713439790},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Create) (EndTimeLog) Added Endtime for log requests","Timestamp":1713439985},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) add start and endtime to REQLOG command","Timestamp":1713440200},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"BLE MAC","Message":"(Update) (BLE MAC) Reorder Group Params","Timestamp":1713440632},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"BTN MAC","Message":"(Update) (BTN MAC) Reorder Group Params","Timestamp":1713440635},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Clear Message Buffer","Message":"(Update) (Clear Message Buffer) Reorder Group Params","Timestamp":1713440640},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Config Mode","Message":"(Update) (Config Mode) Reorder Group Params","Timestamp":1713440644},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"(Update) (Enable Logging) Reorder Group Params","Timestamp":1713440649},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1713440653},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"ICCID","Message":"(Update) (ICCID) Reorder Group Params","Timestamp":1713440657},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"IV Activated","Message":"(Update) (IV Activated) Reorder Group Params","Timestamp":1713440660},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"IV ActivatedFailMessage","Message":"(Update) (IV ActivatedFailMessage) Reorder Group Params","Timestamp":1713440665},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1713440669},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1713440673},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Update) (StartTimeLog) Reorder Group Params","Timestamp":1713440677},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1713440678},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1713440682},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1713440685},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Update) (StartTimeLog) Reorder Group Params","Timestamp":1713440686},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1713440688},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Update) (EndTimeLog) Reorder Group Params","Timestamp":1713440690},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1713440694},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1713440698},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"ICCID","Message":"(Update) (ICCID) Reorder Group Params","Timestamp":1713440722},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"IV Activated","Message":"(Update) (IV Activated) Reorder Group Params","Timestamp":1713440726},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"IV ActivatedFailMessage","Message":"(Update) (IV ActivatedFailMessage) Reorder Group Params","Timestamp":1713440730},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1713440733},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1713440737},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1713440741},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) parse startime to epoch","Timestamp":1713441651},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) parsing endtime to epoch","Timestamp":1713441974},{"Version":"0.7","UserName":"Michael_Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) was requesting. battery alerts wrongly ","Timestamp":1714162948},{"Version":"0.7","UserName":"Michael_Admin","Resource":"GroupParam","Name":"Request Data","Message":"Dissociate groupParam Request Data from command Battery Charging Alert","Timestamp":1714162955},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) REQLOG fix NaN values","Timestamp":1714563558},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) fix isNaN","Timestamp":1714563687},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Params tidy up","Timestamp":1714564300},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) update Get Log labels","Timestamp":1714564419},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"(Update) (Enable Logging) Hide realtime logging","Timestamp":1714564447},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"BTN MAC","Message":"(Update) (BTN MAC) Not in use","Timestamp":1714564464},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Message","Message":"(Update) (Message) updated label","Timestamp":1714564690},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"BTN MAC","Message":"(Update) (BTN MAC) Reorder Group Params","Timestamp":1714564708},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"(Update) (Enable Logging) Reorder Group Params","Timestamp":1714564711},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1714564715},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1714564717},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Update) (StartTimeLog) Reorder Group Params","Timestamp":1714564721},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Update) (EndTimeLog) Reorder Group Params","Timestamp":1714564724},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1714564727},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1714564731},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1714564750},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1714564753},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Group","Name":"DeviceConfig","Message":"(Update) (DeviceConfig) updated label","Timestamp":1714564811},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) ICCID check","Timestamp":1714652453},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) moved ICCID chech to CREATE message","Timestamp":1715246932},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"ICCID check, timerange for logs, hide unused controls","Timestamp":1715256211},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Password","Message":"(Update) (Set Password) changing password command encryption to plain text for now","Timestamp":1715687167},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"SOS Number","Message":"(Update) (SOS Number) remove encrypt checkbox logic","Timestamp":1715855955},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"SOS Number","Message":"(Update) (SOS Number) fix bug","Timestamp":1715856353},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Battery Charging Alert","Message":"(Update) (Battery Charging Alert) remove encrypt checkbox logic","Timestamp":1715856558},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Battery Critical Alert Setting","Message":"(Update) (Battery Critical Alert Setting) remove encrypt checkbox logic","Timestamp":1715856589},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Battery Low Alert Setting","Message":"(Update) (Battery Low Alert Setting) remove encrypt checkbox logic","Timestamp":1715856616},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"ClearBuffer","Message":"(Update) (ClearBuffer) remove encrypt checkbox logic","Timestamp":1715856637},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Cycle Interval","Message":"(Update) (Cycle Interval) remove encrypt checkbox logic","Timestamp":1715856657},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Device Activated","Message":"(Update) (Device Activated) remove encrypt checkbox logic","Timestamp":1715856680},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"NonMovement","Message":"(Update) (NonMovement) remove encrypt checkbox logic","Timestamp":1715856700},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Real Time Locate","Message":"(Update) (Real Time Locate) remove encrypt checkbox logic","Timestamp":1715856719},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"RequestData","Message":"(Update) (RequestData) remove encrypt checkbox logic","Timestamp":1715856734},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) remove encrypt checkbox logic","Timestamp":1715856754},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Reset Device","Message":"(Update) (Reset Device) remove encrypt checkbox logic","Timestamp":1715856772},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Send Notification","Message":"(Update) (Send Notification) remove encrypt checkbox logic","Timestamp":1715856789},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"SendMACs","Message":"(Update) (SendMACs) remove encrypt checkbox logic","Timestamp":1715856815},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Config Enable","Message":"(Update) (Set Config Enable) remove encrypt checkbox logic","Timestamp":1715856835},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set RTLog Enable","Message":"(Update) (Set RTLog Enable) remove encrypt checkbox logic","Timestamp":1715856881},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Scanning Enable","Message":"(Update) (Set Scanning Enable) remove encrypt checkbox logic","Timestamp":1715856904},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Server","Message":"(Update) (Set Server) remove encrypt checkbox logic","Timestamp":1715856937},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"SOS Options","Message":"(Update) (SOS Options) remove encrypt checkbox logic","Timestamp":1715856960},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"encryption","Message":"(Update) (encryption) checkbox not used any more","Timestamp":1715856989},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Password","Message":"(Update) (Set Password) Encrypt PW with IMEI","Timestamp":1715860808},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"SOS Number","Message":"(Update) (SOS Number) Prepending encrypted commands with \"enc=\"","Timestamp":1715862067},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Battery Charging Alert","Message":"(Update) (Battery Charging Alert) prepending encrypted commands with \"enc=\"","Timestamp":1715862254},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Battery Critical Alert Setting","Message":"(Update) (Battery Critical Alert Setting) prepending encrypted commands with \"enc=\"","Timestamp":1715862278},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Battery Low Alert Setting","Message":"(Update) (Battery Low Alert Setting) prepending encrypted commands with \"enc=\"","Timestamp":1715862300},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"ClearBuffer","Message":"(Update) (ClearBuffer) prepending encrypted commands with \"enc=\"","Timestamp":1715862327}],"ProtocolActionObjects":[],"Tags":[{"Id":1956,"Name":"OneCommandSender","BackendAction":"OneCommandSender","Value":"True"}]} \ No newline at end of file +{"Id":205,"Name":null,"Description":null,"FirmwareVersion":"","InProgress":false,"MessageTypes":[{"Id":5989,"Code":"NOPROX","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;NOPROX;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;NOPROX;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5990,"Code":"REGISTER","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;REGISTER=<>,<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;REGISTER=[^,;]*,[^;,]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5991,"Code":"IS_ACTIVATED","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;IS_ACTIVATED;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;IS_ACTIVATED;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5992,"Code":"PWRF","Name":"Power off","MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;PWRF;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;PWRF;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5993,"Code":"ALSOS","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"VGV-<>;<>;mid=<>;ALSOS;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;ALSOS;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5994,"Code":"completed","Name":"ACK command","MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"ACK-CMD;<>;<>;OK;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^ACK-CMD;[^;]*;[^;;]*;OK;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5995,"Code":"BATL","Name":"Battery Low","MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;BATL;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":"","LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;BATL;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5996,"Code":"NACT","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"+RESP:NACT,<>,<>$","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"\\+RESP:NACT,[^,]*,[^\\$,]*\\$","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5997,"Code":"PWRN","Name":"Power on","MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;PWRN;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;PWRN;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5998,"Code":"ALNM","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"VGV-<>;<>;mid=<>;ALNM;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;ALNM;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5999,"Code":"BATCF","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;BATCF;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;BATCF;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6000,"Code":"PROX","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":2,"Template":"VGV-<>;<>;mid=<>;PROX=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;PROX=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6001,"Code":"CREATE","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;CREATE=<>,<>,<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;CREATE=[^,;]*,[^,,]*,[^;,]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6002,"Code":"COMM","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"<<->>\"Imei\":\"<>\",<<->>","HasTemplateGlobal":false,"ResponseTemplate":"OK","TemplateGlobal":"<<->>VGV-001-Invent<<->>","LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^[^ ]*\"Imei\":\"[^\"]*\",[^ ]*","RegExGlobal":"^[^ ]*VGV-001-Invent[^ ]*","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6003,"Code":"BATE","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":2,"Template":"VGV-<>;<>;mid=<>;BATE;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;BATE;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5982,"Code":"BATCN","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;BATCN;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;BATCN;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5983,"Code":"CYC","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":true,"Type":0,"Template":"VGV-<>;<>;mid=<>;CYC;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;CYC;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5983,\"Code\":\"CYC\",\"Name\":null,\"MessageCode\":\"CYC\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":true,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;CYC;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ACK-MSG;<>;OK;[0a]\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":false,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;CYC;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1712653303}],"Tags":[]},{"Id":5984,"Code":"ENC","Name":"Encrypted","MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;enc=<>;$$","HasTemplateGlobal":false,"ResponseTemplate":"<>","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;enc=[^;;]*;$","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5985,"Code":"received","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"ACK-CMD;<>;<>;RCVD;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"Command":null,"CacheImei":false,"RegEx":"^ACK-CMD;[^;]*;[^;;]*;RCVD;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5986,"Code":"error","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":true,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"ACK-CMD;<>;<>;ERR;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^ACK-CMD;[^;]*;[^;;]*;ERR;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5987,"Code":"NOTEREAD","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;NOTEREAD=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;NOTEREAD=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":5988,"Code":"COMM","Name":null,"MessageCode":null,"NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"<<->>VGV-001-Invent<<->>\"Imei\":\"<>\",<<->>","HasTemplateGlobal":false,"ResponseTemplate":"OK","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^[^ ]*VGV-001-Invent[^ ]*\"Imei\":\"[^\"]*\",[^ ]*","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":6004,"Code":"ALLDATA","Name":null,"MessageCode":"INFO","NeedAck":true,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"VGV-<>;<>;mid=<>;ALLDATA=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;","HasTemplateGlobal":false,"ResponseTemplate":"ACK-MSG;<>;OK;[0a]","TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"Command":null,"CacheImei":false,"RegEx":"^VGV-[^;]*;[^;;]*;mid=[^;;]*;ALLDATA=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":6004,\"Code\":\"ALLDATA\",\"Name\":null,\"MessageCode\":\"INFO\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;ALLDATA=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ACK-MSG;<>;OK;[0a]\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;ALLDATA=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710177889},{"Type":1,"NewValue":"{\"Id\":6004,\"Code\":\"ALLDATA\",\"Name\":null,\"MessageCode\":\"INFO\",\"NeedAck\":true,\"IsAck\":false,\"IsFailAck\":false,\"IsAckHexString\":false,\"NoOperation\":false,\"Type\":0,\"Template\":\"VGV-<>;<>;mid=<>;ALLDATA=<>;LOTH=<>,<>,<>,<>,<>,<>;NET=<>;BATP=<>;TIME=<>;\",\"HasTemplateGlobal\":false,\"ResponseTemplate\":\"ACK-MSG;<>;OK;[0a]\",\"TemplateGlobal\":null,\"LongConnection\":false,\"HexString\":false,\"AckFirst\":false,\"ScaipH\":false,\"DoNotSendCommands\":true,\"Command\":null,\"CacheImei\":false,\"RegEx\":\"^VGV-[^;]*;[^;;]*;mid=[^;;]*;ALLDATA=[^;;]*;LOTH=[^,;]*,[^,,]*,[^,,]*,[^,,]*,[^,,]*,[^;,]*;NET=[^;;]*;BATP=[^;;]*;TIME=[^;;]*;\",\"RegExGlobal\":\"\",\"IsDeviceUpdate\":false,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1712653474}],"Tags":[]}],"Commands":[{"Id":4096,"Name":"NonMovement","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"if (params.NonMovement.EnableDisableNonMovement == \"true\") {\n var state = 1;\n} else {\n var state = \"0\";\n}\nvar command = \"ALNM=\" + state + \",\" + params.NonMovement.period;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4096,\"Name\":\"NonMovement\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"if (params.NonMovement.EnableDisableNonMovement == \\\"true\\\") {\\n var state = 1;\\n} else {\\n var state = \\\"0\\\";\\n}\\nvar command = \\\"ALNM=\\\" + state + \\\",\\\" + params.NonMovement.period;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856700}],"Tags":[]},{"Id":4095,"Name":"Set Scanning Enable","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"let doScan = params.Scanning.EnableScanning == \"true\" ? 1 : 0;\nlet aggs = \",\" + params.Scanning.MacIDs;\nvar aggids = params.Scanning.EnableScanning == \"true\" ? aggs : '';\nlet command = \"SCANAGG=\" + doScan + aggids;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4095,\"Name\":\"Set Scanning Enable\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"let doScan = params.Scanning.EnableScanning == \\\"true\\\" ? 1 : 0;\\nlet aggs = \\\",\\\" + params.Scanning.MacIDs;\\nvar aggids = params.Scanning.EnableScanning == \\\"true\\\" ? aggs : '';\\nlet command = \\\"SCANAGG=\\\" + doScan + aggids;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856904}],"Tags":[]},{"Id":4094,"Name":"Device Activated","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"ACTIVATED_FAIL=Unkown Failure.\";\nif (params.DeviceConfig.IVActivated == \"true\") {\n command = \"ACTIVATED_OK\";\n} else {\n command = \"ACTIVATED_FAIL=\" + params.DeviceConfig.IVActivatedFailMessage;\n}\nvar configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4094,\"Name\":\"Device Activated\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"ACTIVATED_FAIL=Unkown Failure.\\\";\\nif (params.DeviceConfig.IVActivated == \\\"true\\\") {\\n command = \\\"ACTIVATED_OK\\\";\\n} else {\\n command = \\\"ACTIVATED_FAIL=\\\" + params.DeviceConfig.IVActivatedFailMessage;\\n}\\nvar configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856680}],"Tags":[]},{"Id":4093,"Name":"SendMACs","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"AGGIDS=\" + params.Scanning.MacIDs;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4093,\"Name\":\"SendMACs\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"AGGIDS=\\\" + params.Scanning.MacIDs;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856815}],"Tags":[]},{"Id":4092,"Name":"Set Config Enable","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"// write your code here...\nif (params.DeviceConfig.ConfigMode == \"true\") {\n enableConfig = \"1\";\n} else {\n enableConfig = \"0\";\n}\nvar command = \"CONFIG=\" + enableConfig;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4092,\"Name\":\"Set Config Enable\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.DeviceConfig.ConfigMode == \\\"true\\\") {\\n enableConfig = \\\"1\\\";\\n} else {\\n enableConfig = \\\"0\\\";\\n}\\nvar command = \\\"CONFIG=\\\" + enableConfig;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856835}],"Tags":[]},{"Id":4091,"Name":"Battery Critical Alert Setting","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"// write your code here...\nif (params.Batteryalerts.EnableBatteryCriticalAlert == \"true\") {\n endis = 1;\n} else {\n endis = \"0\";\n}\nvar command = \"BATAC=\" + endis + \",\" + params.Batteryalerts.BatteryCriticalThreshold;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4091,\"Name\":\"Battery Critical Alert Setting\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.Batteryalerts.EnableBatteryCriticalAlert == \\\"true\\\") {\\n endis = 1;\\n} else {\\n endis = \\\"0\\\";\\n}\\nvar command = \\\"BATAC=\\\" + endis + \\\",\\\" + params.Batteryalerts.BatteryCriticalThreshold;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856589},{"Type":1,"NewValue":"{\"Id\":4091,\"Name\":\"Battery Critical Alert Setting\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.Batteryalerts.EnableBatteryCriticalAlert == \\\"true\\\") {\\n endis = 1;\\n} else {\\n endis = \\\"0\\\";\\n}\\nvar command = \\\"BATAC=\\\" + endis + \\\",\\\" + params.Batteryalerts.BatteryCriticalThreshold;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862278}],"Tags":[]},{"Id":4090,"Name":"Battery Low Alert Setting","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"if (params.Batteryalerts.EnableBatteryLowAlert == \"true\") {\n endis = 1;\n} else {\n endis = \"0\";\n}\nvar command = \"BATAL=\" + endis + \",\" + params.Batteryalerts.BatteryLowThreshold;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4090,\"Name\":\"Battery Low Alert Setting\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"if (params.Batteryalerts.EnableBatteryLowAlert == \\\"true\\\") {\\n endis = 1;\\n} else {\\n endis = \\\"0\\\";\\n}\\nvar command = \\\"BATAL=\\\" + endis + \\\",\\\" + params.Batteryalerts.BatteryLowThreshold;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856616},{"Type":1,"NewValue":"{\"Id\":4090,\"Name\":\"Battery Low Alert Setting\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"if (params.Batteryalerts.EnableBatteryLowAlert == \\\"true\\\") {\\n endis = 1;\\n} else {\\n endis = \\\"0\\\";\\n}\\nvar command = \\\"BATAL=\\\" + endis + \\\",\\\" + params.Batteryalerts.BatteryLowThreshold;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862300}],"Tags":[]},{"Id":4089,"Name":"SOS Number","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"SOSN=\" + params.MakeCall.SOSNumber.replace(\"(\", \"\").replace(\")\", \"\");\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":8,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4089,\"Name\":\"SOS Number\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"SOSN=\\\" + params.MakeCall.SOSNumber.replace(\\\"(\\\", \\\"\\\").replace(\\\")\\\", \\\"\\\");\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":8,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715855955},{"Type":1,"NewValue":"{\"Id\":4089,\"Name\":\"SOS Number\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"SOSN=\\\" + params.MakeCall.SOSNumber.replace(\\\"(\\\", \\\"\\\").replace(\\\")\\\", \\\"\\\");\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":8,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856353},{"Type":1,"NewValue":"{\"Id\":4089,\"Name\":\"SOS Number\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"SOSN=\\\" + params.MakeCall.SOSNumber.replace(\\\"(\\\", \\\"\\\").replace(\\\")\\\", \\\"\\\");\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":8,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862067}],"Tags":[]},{"Id":4088,"Name":"Send Notification","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"NOTE=\" + params.Note.Message;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4088,\"Name\":\"Send Notification\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"NOTE=\\\" + params.Note.Message;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856789}],"Tags":[]},{"Id":4087,"Name":"Battery Charging Alert","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"// write your code here...\nif (params.Batteryalerts.EnableBatteryChargingAlerts == \"true\") {\n batCharging = 1;\n} else {\n batCharging = \"0\";\n}\nvar command = \"BATC=\" + batCharging;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4087,\"Name\":\"Battery Charging Alert\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.Batteryalerts.EnableBatteryChargingAlerts == \\\"true\\\") {\\n batCharging = 1;\\n} else {\\n batCharging = \\\"0\\\";\\n}\\nvar command = \\\"BATC=\\\" + batCharging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856558},{"Type":1,"NewValue":"{\"Id\":4087,\"Name\":\"Battery Charging Alert\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.Batteryalerts.EnableBatteryChargingAlerts == \\\"true\\\") {\\n batCharging = 1;\\n} else {\\n batCharging = \\\"0\\\";\\n}\\nvar command = \\\"BATC=\\\" + batCharging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862254}],"Tags":[]},{"Id":4086,"Name":"SOS Options","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\r\nvar configsSMS = []; // for sms template\r\nvar SOSOptions;\r\nvar Handsfree, Makecall;\r\n//var command = \"SOSO=\" + JSON.stringify(params.SOSOptions.HandsFree);\r\nif (params.MakeCall.EnableDisableMakeCall == \"true\") {\r\n Makecall = 1;\r\n if (params.MakeCall.HandsFree === \"true\") {\r\n Handsfree = \"1\";\r\n } else {\r\n Handsfree = \"0\";\r\n }\r\n} else {\r\n Makecall = \"0\";\r\n Handsfree = \"0\";\r\n}\r\nvar command = \"SOSO=\" + params.MakeCall.Timeout + \",\" + Makecall + \",\" + Handsfree;\r\nvar sequenceNumber = (new Date().getTime()).toString(36);\r\nvar part1 = \"update=\" + sequenceNumber;\r\nconst _crypto = require('crypto');\r\nif (params.Password.Password === \"\") {\r\n var password = serverParams.Imei;\r\n} else {\r\n var password = params.Password.Password;\r\n}\r\nif (params.Password.encryption === \"true\") {\r\n var part2 = encrypt(command, part1, password);\r\n} else {\r\n var part2 = command;\r\n}\r\nAddValue(\"part1\", part1);\r\nAddValue(\"part2\", part2);\r\nAddValue(\"sequenceNumber\", sequenceNumber);\r\nAddValueSMS(\"part1\", part1); //for sms template\r\nAddValueSMS(\"part2\", part2); // for sms template\r\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs,\r\n configsSMS: configsSMS //for sms template\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n\r\nfunction AddValue(p1, p2) {\r\n var cvpair = {\r\n code: p1,\r\n value: p2\r\n };\r\n configs.push(cvpair);\r\n}\r\n\r\nfunction AddValueSMS(p1, p2) { //function for sms template\r\n var cvpair = {\r\n code: p1,\r\n value: p2\r\n };\r\n configsSMS.push(cvpair);\r\n}\r\n\r\nfunction encrypt(text, mid, password) {\r\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\r\n const iv = _crypto.randomBytes(16); // random initialization vector\r\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\r\n // set the cipher\r\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\r\n // encrypt text\r\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\r\n // generate output ( encrypted text )\r\n return Buffer.concat([iv, encrypted]).toString('base64');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4086,\"Name\":\"SOS Options\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\r\\nvar configsSMS = []; // for sms template\\r\\nvar SOSOptions;\\r\\nvar Handsfree, Makecall;\\r\\n//var command = \\\"SOSO=\\\" + JSON.stringify(params.SOSOptions.HandsFree);\\r\\nif (params.MakeCall.EnableDisableMakeCall == \\\"true\\\") {\\r\\n Makecall = 1;\\r\\n if (params.MakeCall.HandsFree === \\\"true\\\") {\\r\\n Handsfree = \\\"1\\\";\\r\\n } else {\\r\\n Handsfree = \\\"0\\\";\\r\\n }\\r\\n} else {\\r\\n Makecall = \\\"0\\\";\\r\\n Handsfree = \\\"0\\\";\\r\\n}\\r\\nvar command = \\\"SOSO=\\\" + params.MakeCall.Timeout + \\\",\\\" + Makecall + \\\",\\\" + Handsfree;\\r\\nvar sequenceNumber = (new Date().getTime()).toString(36);\\r\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\r\\nconst _crypto = require('crypto');\\r\\nvar password = params.Password.Password;\\r\\nif (password === \\\"\\\") {\\r\\n var part2 = command;\\r\\n} else {\\r\\n var part2 = encrypt(command, part1, password);\\r\\n}\\r\\nAddValue(\\\"part1\\\", part1);\\r\\nAddValue(\\\"part2\\\", part2);\\r\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\r\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\r\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\r\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs,\\r\\n configsSMS: configsSMS //for sms template\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n\\r\\nfunction AddValue(p1, p2) {\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n configs.push(cvpair);\\r\\n}\\r\\n\\r\\nfunction AddValueSMS(p1, p2) { //function for sms template\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n configsSMS.push(cvpair);\\r\\n}\\r\\n\\r\\nfunction encrypt(text, mid, password) {\\r\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\r\\n const iv = _crypto.randomBytes(16); // random initialization vector\\r\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\r\\n // set the cipher\\r\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\r\\n // encrypt text\\r\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\r\\n // generate output ( encrypted text )\\r\\n return Buffer.concat([iv, encrypted]).toString('base64');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856960}],"Tags":[]},{"Id":4085,"Name":"Real Time Locate","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"POSN\";\nvar configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"request=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4085,\"Name\":\"Real Time Locate\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"POSN\\\";\\nvar configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"request=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856719}],"Tags":[]},{"Id":4084,"Name":"Set Server","TemplateSMS":"","Template":"VGCMD-001;<>;<>;","AckTemplate":null,"Operation":"var configs = [];\r\nsequenceNumber = (new Date().getTime()).toString(36);\r\nvar part1 = \"update=\" + sequenceNumber;\r\nvar command = \"IP=\" + params.SetServer.SetPrimaryServer + ',' + params.SetServer.SetSecondaryServer;\r\nconst _crypto = require('crypto');\r\nif (params.Password.Password === \"\") {\r\n var password = serverParams.Imei;\r\n} else {\r\n var password = params.Password.Password;\r\n}\r\nif (params.Password.encryption === \"true\") {\r\n var part2 = encrypt(command, part1, password);\r\n} else {\r\n var part2 = command;\r\n}\r\nAddValue(\"part1\", part1);\r\nAddValue(\"part2\", part2);\r\nAddValue(\"sequenceNumber\", sequenceNumber);\r\nvar commandConfigs = {\r\n template: \"main\",\r\n configs: configs\r\n};\r\nmsg.push(JSON.stringify(commandConfigs));\r\n\r\nfunction AddValue(p1, p2) {\r\n var cvpair = {\r\n code: p1,\r\n value: p2\r\n };\r\n configs.push(cvpair);\r\n}\r\n\r\nfunction encrypt(text, mid, password) {\r\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\r\n const iv = _crypto.randomBytes(16); // random initialization vector\r\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\r\n // set the cipher\r\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\r\n // encrypt text\r\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\r\n // generate output ( encrypted text )\r\n return Buffer.concat([iv, encrypted]).toString('base64');\r\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":2,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4084,\"Name\":\"Set Server\",\"TemplateSMS\":\"\",\"Template\":\"VGCMD-001;<>;<>;\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\r\\nsequenceNumber = (new Date().getTime()).toString(36);\\r\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\r\\nvar command = \\\"IP=\\\" + params.SetServer.SetPrimaryServer + ',' + params.SetServer.SetSecondaryServer;\\r\\nconst _crypto = require('crypto');\\r\\nvar password = params.Password.Password;\\r\\nif (password === \\\"\\\") {\\r\\n var part2 = command;\\r\\n} else {\\r\\n var part2 = encrypt(command, part1, password);\\r\\n}\\r\\nAddValue(\\\"part1\\\", part1);\\r\\nAddValue(\\\"part2\\\", part2);\\r\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\r\\nvar commandConfigs = {\\r\\n template: \\\"main\\\",\\r\\n configs: configs\\r\\n};\\r\\nmsg.push(JSON.stringify(commandConfigs));\\r\\n\\r\\nfunction AddValue(p1, p2) {\\r\\n var cvpair = {\\r\\n code: p1,\\r\\n value: p2\\r\\n };\\r\\n configs.push(cvpair);\\r\\n}\\r\\n\\r\\nfunction encrypt(text, mid, password) {\\r\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\r\\n const iv = _crypto.randomBytes(16); // random initialization vector\\r\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\r\\n // set the cipher\\r\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\r\\n // encrypt text\\r\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\r\\n // generate output ( encrypted text )\\r\\n return Buffer.concat([iv, encrypted]).toString('base64');\\r\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856937}],"Tags":[]},{"Id":4083,"Name":"Reset Device","TemplateSMS":"","Template":"VGCMD-001;<>;<>;","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"RESET\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":2,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4083,\"Name\":\"Reset Device\",\"TemplateSMS\":\"\",\"Template\":\"VGCMD-001;<>;<>;\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"RESET\\\";\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":2,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856772}],"Tags":[]},{"Id":4082,"Name":"Cycle Interval","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"CYCCONFIG=\" + params.CycleInterval.CycleInterval;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4082,\"Name\":\"Cycle Interval\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"CYCCONFIG=\\\" + params.CycleInterval.CycleInterval;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856657},{"Type":1,"NewValue":"{\"Id\":4082,\"Name\":\"Cycle Interval\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"CYCCONFIG=\\\" + params.CycleInterval.CycleInterval;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862349}],"Tags":[]},{"Id":4081,"Name":"Set Password","TemplateSMS":"OCA-CMD;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var command = \"PW=\" + params.Password.Password;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n // var password = params.Password.Password;\n // use old password if it has been changed to send password update\n let new_password = params.Password.Password;\n let old_password = params.Password.PasswordOld;\n if (new_password === old_password) {\n var password = new_password;\n } else {\n var password = old_password;\n }\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":2,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":4081,\"Name\":\"Set Password\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"PW=\\\" + params.Password.Password;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n}\\n//if (params.Password.encryption === \\\"true\\\") {\\n// var part2 = encrypt(command, part1, password);\\n//} else {\\nvar part2 = command;\\n//}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715687167},{"Type":1,"NewValue":"{\"Id\":4081,\"Name\":\"Set Password\",\"TemplateSMS\":\"OCA-CMD;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var command = \\\"PW=\\\" + params.Password.Password;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = serverParams.Imei;\\n//if (params.Password.encryption === \\\"true\\\") {\\nvar part2 = encrypt(command, part1, password);\\n//} else {\\n// var part2 = command;\\n//}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":2,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715860808}],"Tags":[]},{"Id":4097,"Name":"ClearBuffer","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"CLRBUF\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":false,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":4097,\"Name\":\"ClearBuffer\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"CLRBUF\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":false,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710177961},{"Type":1,"NewValue":"{\"Id\":4097,\"Name\":\"ClearBuffer\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"CLRBUF\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713428245},{"Type":1,"NewValue":"{\"Id\":4097,\"Name\":\"ClearBuffer\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"CLRBUF\\\";\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856637},{"Type":1,"NewValue":"{\"Id\":4097,\"Name\":\"ClearBuffer\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"CLRBUF\\\";\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = \\\"enc=\\\" + encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715862327}],"Tags":[]},{"Id":4098,"Name":"RequestData","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"REQDATA\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":4098,\"Name\":\"RequestData\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQDATA\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178028},{"Type":1,"NewValue":"{\"Id\":4098,\"Name\":\"RequestData\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQDATA\\\";\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856734}],"Tags":[]},{"Id":4099,"Name":"RequestLog","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"REQLOG\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178130},{"Type":1,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nvar starttime = params.DeviceConfig.StartTimeLog;\\nvar endtime = params.DeviceConfig.EndTimeLog;\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG=\\\" + starttime + \\\",\\\" + endtime;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440200},{"Type":1,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nvar starttime = params.DeviceConfig.StartTimeLog;\\nvar someDate = new Date(starttime);\\nstarttimeInt = someDate.getTime() / 1000;\\nvar endtime = params.DeviceConfig.EndTimeLog;\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG=\\\" + starttimeInt + \\\",\\\" + endtime;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713441651},{"Type":1,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nvar starttimestr = params.DeviceConfig.StartTimeLog;\\nvar starttimedate = new Date(starttimestr);\\nstarttimeInt = starttimedate.getTime() / 1000;\\nvar endtimestr = params.DeviceConfig.EndTimeLog;\\nvar endtimedate = new Date(endtimestr);\\nendtimeInt = endtimedate.getTime() / 1000;\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG=\\\" + starttimeInt + \\\",\\\" + endtimeInt;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713441974},{"Type":1,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nvar starttimestr = params.DeviceConfig.StartTimeLog;\\nvar starttimedate = new Date(starttimestr);\\nstarttimeInt = starttimedate.getTime() / 1000;\\nif (isNan(starttimeInt)) {\\n starttimeInt = '';\\n}\\nvar endtimestr = params.DeviceConfig.EndTimeLog;\\nvar endtimedate = new Date(endtimestr);\\nendtimeInt = endtimedate.getTime() / 1000;\\nif (isNan(endtimeInt)) {\\n endtimeInt = '';\\n}\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG=\\\" + starttimeInt + \\\",\\\" + endtimeInt;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714563558},{"Type":1,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nvar starttimestr = params.DeviceConfig.StartTimeLog;\\nvar starttimedate = new Date(starttimestr);\\nstarttimeInt = starttimedate.getTime() / 1000;\\nif (isNaN(starttimeInt)) {\\n starttimeInt = '';\\n}\\nvar endtimestr = params.DeviceConfig.EndTimeLog;\\nvar endtimedate = new Date(endtimestr);\\nendtimeInt = endtimedate.getTime() / 1000;\\nif (isNaN(endtimeInt)) {\\n endtimeInt = '';\\n}\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG=\\\" + starttimeInt + \\\",\\\" + endtimeInt;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714563687},{"Type":1,"NewValue":"{\"Id\":4099,\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nvar starttimestr = params.DeviceConfig.StartTimeLog;\\nvar starttimedate = new Date(starttimestr);\\nstarttimeInt = starttimedate.getTime() / 1000;\\nif (isNaN(starttimeInt)) {\\n starttimeInt = '';\\n}\\nvar endtimestr = params.DeviceConfig.EndTimeLog;\\nvar endtimedate = new Date(endtimestr);\\nendtimeInt = endtimedate.getTime() / 1000;\\nif (isNaN(endtimeInt)) {\\n endtimeInt = '';\\n}\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG=\\\" + starttimeInt + \\\",\\\" + endtimeInt;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856754}],"Tags":[]},{"Id":4100,"Name":"Set RTLog Enable","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"// write your code here...\nif (params.DeviceConfig.EnableLogging == \"true\") {\n enableLogging = \"1\";\n} else {\n enableLogging = \"0\";\n}\nvar command = \"RTLOG=\" + enableLogging;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":false,"Order":null,"SendAttempts":1,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":4100,\"Name\":\"Set RTLog Enable\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.DeviceConfig.EnableLogging == \\\"true\\\") {\\n enableLogging = \\\"1\\\";\\n} else {\\n enableLogging = \\\"0\\\";\\n}\\nvar command = \\\"RTLOG=\\\" + enableLogging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178198},{"Type":1,"NewValue":"{\"Id\":4100,\"Name\":\"Set RTLog Enable\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.DeviceConfig.EnableLogging == \\\"true\\\") {\\n enableLogging = \\\"1\\\";\\n} else {\\n enableLogging = \\\"0\\\";\\n}\\nvar command = \\\"RTLOG=\\\" + enableLogging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nvar password = params.Password.Password;\\nif (password === \\\"\\\") {\\n var part2 = command;\\n} else {\\n var part2 = encrypt(command, part1, password);\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"CommandToUpdate\":null,\"Parent\":null,\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"HasAck\":true,\"HexString\":false,\"Order\":null,\"SendAttempts\":1,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856881}],"Tags":[]}],"Operations":[{"Id":278,"Name":"VGV","Operation":"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\n // Define array to push device data into. This will be put into the msg array at the end.\n var deviceParams = [];\n var configsToSend = [];\n var tasks = [];\n const _crypto = require('crypto');\n // handle ACK\n if (messageTypeCode == \"ACK\") {\n return \"\";\n }\n if (params.encrypted_data) { // encrypted data so needs decrypting\n var password;\n if (params.imei == \"null\") {\n return msg;\n }\n password = params.imei;\n if (configs.Password.Password === \"\") {\n // use imei as default password when not specified\n } else {\n // use the password\n password = configs.Password.Password\n }\n // handle encrypted messages arriving via SMS\n // if (raw.startsWith('esendex')) {\n // raw = raw.split('esendex')[2];\n // encimei = raw.split(';')[1];\n // imei = parseInt(raw.split(';')[1], 36).toString();\n // AddValue('imei', imei);\n // raw = raw.replace(encimei, imei);\n // password = imei;\n // }\n let message = decrypt(raw, password);\n //ToDo: handle errors messages arriving\n // if (message.startsWith(\"error\")) {\n // ack = \"ERR;\" + params.count_number + \";\";\n // msg.push({\n // 'code': 'ack',\n // 'value': ack\n // });\n // console.log(msg);\n // } \n if (message) {\n // send message internally\n sendMessageToLocalhost(message);\n let ack = \"ACK-MSG;\" + params.count_number + \";OK;\\n\"\n AddValue(\"ack\", ack);\n } else {\n ack = \"unknown message\" + \" - \" + serverParams.imei + \" --- \" + raw;\n AddValue(\"ack\", ack);\n }\n } else { // General Oysta Template\n if (messageTypeLocalCode == \"COMM\") { // a message from Invent!\n const details = JSON.parse(raw);\n // AddValue('imei', details.AppId);\n AddValue('json_in', JSON.stringify(details));\n switch (details.Command) {\n case \"ACTIVATE_OK\":\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\n break;\n case \"ACTIVATE_FAILS\":\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\n break;\n case \"CONFIG\":\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\n break;\n case \"SETSOS\":\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\n break;\n case \"APPSET\":\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\n AddConfig(configIds.Password.Password, details.Data.Password);\n break;\n case \"AGGMACS\":\n if (\"Macs\" in details.Data) {\n let mac_string = '';\n for (mac of details.Data.Macs) {\n mac_string = mac_string + mac + \",\";\n }\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \",\"\n );\n };\n break;\n case \"BLESCANON\":\n if (\"Macs\" in details.Data) {\n let mac_string = '';\n for (mac of details.Data.Macs) {\n mac_string = mac_string + mac + \",\";\n }\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \",\"\n );\n };\n AddConfig(configIds.Scanning.EnableScanning, 'true')\n break;\n case \"BLESCANOFF\":\n AddConfig(configIds.Scanning.EnableScanning, 'false')\n break;\n case \"NOTE\":\n let type = details.Data.Type !== undefined ? details.Data.Type : \"TYPE MISSING\";\n let text = details.Data.Text !== undefined ? details.Data.Text : \"Text Missing\";\n text = text.split(\",\").join(\" \"); // remove commas\n let id = details.Data.Id !== undefined ? details.Data.Id : \"Id Missing\";\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\n let value = time + \",\" + type + \",\" + id + \",\" + text;\n AddConfig(configIds.Note.Message, value)\n break;\n }\n } else if (messageTypeLocalCode == \"REGISTER\") { // Register message\n let ble_mac = params.ble_mac;\n let iccid = params.iccid;\n // write values to readonly settings\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\n // remove this to disable auto-config\n //AddConfig(configIds.DeviceConfig.IVActivated, 'true')\n // will automtaically send notification template with all details.\n } else if (messageTypeLocalCode == \"CREATE\") { // Create message\n // temp fix to filter old messages\n const cutoff = 1707523200000; //10.2.2024\n let message_id_time = parseInt(params.count_number, 36);\n if (message_id_time > cutoff) {\n let ble_mac = params.ble_mac;\n let iccid = params.iccid;\n let new_imei = params.new_imei;\n let message = \"VGV-001;\" + new_imei + \";mid=\" + params.count_number + \";REGISTER=\" + ble_mac + \",\" + iccid + \";\";\n // sendMessageToLocalhost(message); \n tasks = [{\n \"name\": \"VGV\" + new_imei,\n \"option\": \"sync\",\n \"type\": \"createDevice\",\n \"payload\": JSON.stringify({\n \"name\": \"VGV\" + new_imei,\n \"imei\": new_imei,\n \"abortOnError\": false,\n \"init\": true\n }),\n \"order\": 1\n }, {\n \"name\": \"Create VGV\" + new_imei,\n \"option\": \"async\",\n \"type\": \"sendMessage\",\n \"payload\": JSON.stringify({\n \"message\": message\n }),\n \"order\": 2\n }]\n }\n } else {\n // Generate location_accuracy based on raw_accuracy - currently no conversion\n if (!params.raw_accuracy) {\n AddValue('location_accuracy', 9000);\n } else {\n AddValue('location_accuracy', params.raw_accuracy);\n }\n // generate timestamps if they don't exist\n if (!params.event_time) {\n AddValue('event_time', moment.utc().unix());\n }\n if (!params.location_time) {\n AddValue('event_time', moment.utc().unix());\n }\n //if no lat and long are given, set them to 0, 0\n if (!params.latitude_raw) {\n AddValue('latitude', 0);\n } else {\n AddValue('latitude', params.latitude_raw);\n }\n if (!params.longitude_raw) {\n AddValue('longitude', 0);\n } else {\n AddValue('longitude', params.longitude_raw);\n }\n }\n // add messagetTypeLocal to output for templates\n AddValue('local_message_type', messageTypeLocalCode);\n }\n var msg = {\n 'values': deviceParams,\n };\n if (configsToSend.length > 0) {\n msg.configsToSend = configsToSend\n };\n if (tasks.length > 0) {\n msg.tasks = tasks\n };\n // commit values to receiver processor\n console.log(msg);\n\n function sendMessageToLocalhost(str) {\n if (localTesting) {\n console.log(\"Sending message to local host: \" + str);\n } else {\n var server = 'receiver-tcp';\n var c = createConnection(5678, server);\n c.write(`${str}`);\n c.end();\n }\n AddValue(\"ToLocalhost\", str);\n }\n\n function createConnection(port, server) {\n c = net.createConnection(port, server);\n c.on('error', function(error) {\n c = createConnection(port, server);\n });\n return c;\n }\n\n function decrypt(encdata, password) {\n var decrypted;\n var dataarray = encdata.split(\";\");\n if (dataarray.length > 5) {\n return \"\";\n }\n var i;\n var part1 = \"\"; // part1 will hold the type, IMEI and message ID\n if (encdata.startsWith(\"ACK\")) {\n return encdata;\n }\n for (i = 0; i < 3; i++) {\n part1 = part1 + dataarray[i] + \";\";\n }\n var mid = dataarray[2]; // use the message ID to create the salt\n var enctext = dataarray[3].split(\"=\")[1]; // the encypted data\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n // base64 decoding and extract the iv and encrypted data\n const bData = Buffer.from(enctext, 'base64');\n const iv = bData.slice(0, 16); // initial 16 chars\n const text = bData.slice(16); // all the encrypted data\n // derive key using; 32 byte key length (from salted password and mid)\n // decrypt the data in part2 and add to part1\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\n try {\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\n } catch (err) {\n decrypted = undefined;\n }\n return decrypted;\n }\n\n function encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n }\n\n function AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n deviceParams.push(cvpair);\n }\n\n function AddConfig(configName, newvalue) {\n if (newvalue !== undefined) { // don't add if newvalue is undefined\n var cvpair = {\n 'code': configName,\n 'value': newvalue, // ? newvalue : \"Not Defined\" \n 'forced': true\n };\n configsToSend.push(cvpair);\n };\n }\n\n function isASCII(str) {\n return /^[\\x00-\\xFF]*$/.test(str);\n }\n // modify to return the object that contains your data\n return msg;\n}\n// params is not defined locally -> export as module\nif (typeof(params) === 'undefined') {\n module.exports = {\n execute_ops\n }\n} else { // on server use local defined vars\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\n // define global returns\n msg = return_values;\n}","Type":0,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // remove this to disable auto-config\\n //AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n // will automtaically send notification template with all details.\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1710245093},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // remove this to disable auto-config\\n if (serverParams.EnvName) {\\n AddValue(\\\"EnvVar\\\", serverParams.EnvName);\\n }\\n //AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n // will automtaically send notification template with all details.\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1711033993},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // will automtaically Activate on Acceptance\\n if (serverParams.EnvName) {\\n if (serverParams.EnvName === \\\"acceptance\\\") {\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n }\\n }\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1711035615},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // check ICCID is a number\\n if (isNaN(iccid)) {\\n iccid = \\\"invalid ICCID\\\"\\n }\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // will automtaically Activate on Acceptance\\n if (serverParams.EnvName) {\\n if (serverParams.EnvName === \\\"acceptance\\\") {\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n }\\n }\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1714652453},{"Type":1,"NewValue":"{\"Id\":278,\"Name\":\"VGV\",\"Operation\":\"function execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, localTesting) {\\n // Define array to push device data into. This will be put into the msg array at the end.\\n var deviceParams = [];\\n var configsToSend = [];\\n var tasks = [];\\n const _crypto = require('crypto');\\n // handle ACK\\n if (messageTypeCode == \\\"ACK\\\") {\\n return \\\"\\\";\\n }\\n if (params.encrypted_data) { // encrypted data so needs decrypting\\n var password;\\n if (params.imei == \\\"null\\\") {\\n return msg;\\n }\\n password = params.imei;\\n if (configs.Password.Password === \\\"\\\") {\\n // use imei as default password when not specified\\n } else {\\n // use the password\\n password = configs.Password.Password\\n }\\n // handle encrypted messages arriving via SMS\\n // if (raw.startsWith('esendex')) {\\n // raw = raw.split('esendex')[2];\\n // encimei = raw.split(';')[1];\\n // imei = parseInt(raw.split(';')[1], 36).toString();\\n // AddValue('imei', imei);\\n // raw = raw.replace(encimei, imei);\\n // password = imei;\\n // }\\n let message = decrypt(raw, password);\\n //ToDo: handle errors messages arriving\\n // if (message.startsWith(\\\"error\\\")) {\\n // ack = \\\"ERR;\\\" + params.count_number + \\\";\\\";\\n // msg.push({\\n // 'code': 'ack',\\n // 'value': ack\\n // });\\n // console.log(msg);\\n // } \\n if (message) {\\n // send message internally\\n sendMessageToLocalhost(message);\\n let ack = \\\"ACK-MSG;\\\" + params.count_number + \\\";OK;\\\\n\\\"\\n AddValue(\\\"ack\\\", ack);\\n } else {\\n ack = \\\"unknown message\\\" + \\\" - \\\" + serverParams.imei + \\\" --- \\\" + raw;\\n AddValue(\\\"ack\\\", ack);\\n }\\n } else { // General Oysta Template\\n if (messageTypeLocalCode == \\\"COMM\\\") { // a message from Invent!\\n const details = JSON.parse(raw);\\n // AddValue('imei', details.AppId);\\n AddValue('json_in', JSON.stringify(details));\\n switch (details.Command) {\\n case \\\"ACTIVATE_OK\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n break;\\n case \\\"ACTIVATE_FAILS\\\":\\n AddConfig(configIds.DeviceConfig.IVActivated, 'false');\\n AddConfig(configIds.DeviceConfig.IVActivatedFailMessage, details.Data.Text);\\n break;\\n case \\\"CONFIG\\\":\\n AddConfig(configIds.DeviceConfig.ConfigMode, details.Data.EnableConfig ? 'true' : 'false');\\n break;\\n case \\\"SETSOS\\\":\\n AddConfig(configIds.MakeCall.SOSNumber, details.Data.SosNumber);\\n AddConfig(configIds.MakeCall.HandsFree, details.Data.SosHandsfree ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.EnableDisableMakeCall, details.Data.SosCallEnabled ? 'true' : 'false');\\n AddConfig(configIds.MakeCall.Timeout, details.Data.SosTimeout);\\n break;\\n case \\\"APPSET\\\":\\n AddConfig(configIds.CycleInterval.CycleInterval, details.Data.CycConfig);\\n AddConfig(configIds.Batteryalerts.EnableBatteryLowAlert, details.Data.BatteryLowAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryLowThreshold, details.Data.BatteryLowThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryCriticalAlert, details.Data.BatteryCriticalAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.Batteryalerts.BatteryCriticalThreshold, details.Data.BatteryCriticalThreshold);\\n AddConfig(configIds.Batteryalerts.EnableBatteryChargingAlerts, details.Data.BatteryChargingAlarmEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.EnableDisableNonMovement, details.Data.NoMotionAlertEnabled ? 'true' : 'false');\\n AddConfig(configIds.NonMovement.period, details.Data.NoMotionPeriod);\\n AddConfig(configIds.Password.Password, details.Data.Password);\\n break;\\n case \\\"AGGMACS\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n break;\\n case \\\"BLESCANON\\\":\\n if (\\\"Macs\\\" in details.Data) {\\n let mac_string = '';\\n for (mac of details.Data.Macs) {\\n mac_string = mac_string + mac + \\\",\\\";\\n }\\n AddConfig(configIds.Scanning.MacIDs, mac_string.slice(0, mac_string.length - 1) // remove trailing \\\",\\\"\\n );\\n };\\n AddConfig(configIds.Scanning.EnableScanning, 'true')\\n break;\\n case \\\"BLESCANOFF\\\":\\n AddConfig(configIds.Scanning.EnableScanning, 'false')\\n break;\\n case \\\"NOTE\\\":\\n let type = details.Data.Type !== undefined ? details.Data.Type : \\\"TYPE MISSING\\\";\\n let text = details.Data.Text !== undefined ? details.Data.Text : \\\"Text Missing\\\";\\n text = text.split(\\\",\\\").join(\\\" \\\"); // remove commas\\n let id = details.Data.Id !== undefined ? details.Data.Id : \\\"Id Missing\\\";\\n let time = details.Data.Time !== undefined ? details.Data.Time.toString() : '0';\\n let value = time + \\\",\\\" + type + \\\",\\\" + id + \\\",\\\" + text;\\n AddConfig(configIds.Note.Message, value)\\n break;\\n }\\n } else if (messageTypeLocalCode == \\\"REGISTER\\\") { // Register message\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // write values to readonly settings\\n AddConfig(configIds.DeviceConfig.BLEMAC, ble_mac);\\n AddConfig(configIds.DeviceConfig.ICCID, iccid);\\n // will automtaically Activate on Acceptance\\n if (serverParams.EnvName) {\\n if (serverParams.EnvName === \\\"acceptance\\\") {\\n AddConfig(configIds.DeviceConfig.IVActivated, 'true')\\n }\\n }\\n } else if (messageTypeLocalCode == \\\"CREATE\\\") { // Create message\\n // temp fix to filter old messages\\n const cutoff = 1707523200000; //10.2.2024\\n let message_id_time = parseInt(params.count_number, 36);\\n if (message_id_time > cutoff) {\\n let ble_mac = params.ble_mac;\\n let iccid = params.iccid;\\n // check ICCID is a number\\n if (isNaN(iccid)) {\\n iccid = \\\"invalid ICCID\\\"\\n }\\n let new_imei = params.new_imei;\\n let message = \\\"VGV-001;\\\" + new_imei + \\\";mid=\\\" + params.count_number + \\\";REGISTER=\\\" + ble_mac + \\\",\\\" + iccid + \\\";\\\";\\n // sendMessageToLocalhost(message); \\n tasks = [{\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"option\\\": \\\"sync\\\",\\n \\\"type\\\": \\\"createDevice\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"name\\\": \\\"VGV\\\" + new_imei,\\n \\\"imei\\\": new_imei,\\n \\\"abortOnError\\\": false,\\n \\\"init\\\": true\\n }),\\n \\\"order\\\": 1\\n }, {\\n \\\"name\\\": \\\"Create VGV\\\" + new_imei,\\n \\\"option\\\": \\\"async\\\",\\n \\\"type\\\": \\\"sendMessage\\\",\\n \\\"payload\\\": JSON.stringify({\\n \\\"message\\\": message\\n }),\\n \\\"order\\\": 2\\n }]\\n }\\n } else if (messageTypeLocalCode == \\\"ALLDATA\\\") { // Create message\\n // InterlliCare converts \\\" to ' when parsing, so convert back\\n let json_str = changeSingleQuoteToDouble(params.all_data);\\n let all_data = JSON.parse(json_str);\\n if (\\\"version\\\" in all_data) {\\n AddConfig(configIds.DeviceConfig.Version, all_data.version);\\n }\\n } else {\\n // Generate location_accuracy based on raw_accuracy - currently no conversion\\n if (!params.raw_accuracy) {\\n AddValue('location_accuracy', 9000);\\n } else {\\n AddValue('location_accuracy', params.raw_accuracy);\\n }\\n // generate timestamps if they don't exist\\n if (!params.event_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n if (!params.location_time) {\\n AddValue('event_time', moment.utc().unix());\\n }\\n //if no lat and long are given, set them to 0, 0\\n if (!params.latitude_raw) {\\n AddValue('latitude', 0);\\n } else {\\n AddValue('latitude', params.latitude_raw);\\n }\\n if (!params.longitude_raw) {\\n AddValue('longitude', 0);\\n } else {\\n AddValue('longitude', params.longitude_raw);\\n }\\n }\\n // add messagetTypeLocal to output for templates\\n AddValue('local_message_type', messageTypeLocalCode);\\n }\\n var msg = {\\n 'values': deviceParams,\\n };\\n if (configsToSend.length > 0) {\\n msg.configsToSend = configsToSend\\n };\\n if (tasks.length > 0) {\\n msg.tasks = tasks\\n };\\n // commit values to receiver processor\\n console.log(msg);\\n\\n function sendMessageToLocalhost(str) {\\n if (localTesting) {\\n console.log(\\\"Sending message to local host: \\\" + str);\\n } else {\\n var server = '127.0.0.1'; // replace with 'receiver-tcp' tp load balance\\n var c = createConnection(5678, server);\\n c.write(`${str}`);\\n c.end();\\n }\\n AddValue(\\\"ToLocalhost\\\", str);\\n }\\n\\n function createConnection(port, server) {\\n c = net.createConnection(port, server);\\n c.on('error', function(error) {\\n c = createConnection(port, server);\\n });\\n return c;\\n }\\n\\n function decrypt(encdata, password) {\\n var decrypted;\\n var dataarray = encdata.split(\\\";\\\");\\n if (dataarray.length > 5) {\\n return \\\"\\\";\\n }\\n var i;\\n var part1 = \\\"\\\"; // part1 will hold the type, IMEI and message ID\\n if (encdata.startsWith(\\\"ACK\\\")) {\\n return encdata;\\n }\\n for (i = 0; i < 3; i++) {\\n part1 = part1 + dataarray[i] + \\\";\\\";\\n }\\n var mid = dataarray[2]; // use the message ID to create the salt\\n var enctext = dataarray[3].split(\\\"=\\\")[1]; // the encypted data\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n // base64 decoding and extract the iv and encrypted data\\n const bData = Buffer.from(enctext, 'base64');\\n const iv = bData.slice(0, 16); // initial 16 chars\\n const text = bData.slice(16); // all the encrypted data\\n // derive key using; 32 byte key length (from salted password and mid)\\n // decrypt the data in part2 and add to part1\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n const decipher = _crypto.createDecipheriv('aes-256-cbc', key, iv);\\n try {\\n decrypted = part1 + decipher.update(text, 'binary', 'utf8') + decipher.final('utf8');\\n } catch (err) {\\n decrypted = undefined;\\n }\\n return decrypted;\\n }\\n\\n function encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n }\\n\\n function AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n deviceParams.push(cvpair);\\n }\\n\\n function AddConfig(configName, newvalue) {\\n if (newvalue !== undefined) { // don't add if newvalue is undefined\\n var cvpair = {\\n 'code': configName,\\n 'value': newvalue, // ? newvalue : \\\"Not Defined\\\" \\n 'forced': true\\n };\\n configsToSend.push(cvpair);\\n };\\n }\\n\\n function changeSingleQuoteToDouble(jsonStr) {\\n if (jsonStr === undefined) {\\n return undefined;\\n }\\n let outStr = \\\"\\\";\\n for (let c of jsonStr) {\\n if (c.charCodeAt(0) == 39) { // replace single quote with double quote\\n outStr = outStr + String.fromCharCode(34);\\n } else {\\n outStr += c;\\n }\\n };\\n return outStr;\\n }\\n\\n function isASCII(str) {\\n return /^[\\\\x00-\\\\xFF]*$/.test(str);\\n }\\n // modify to return the object that contains your data\\n return msg;\\n}\\n// params is not defined locally -> export as module\\nif (typeof(params) === 'undefined') {\\n module.exports = {\\n execute_ops\\n }\\n} else { // on server use local defined vars\\n let return_values = execute_ops(moment, msg, params, rawFromBytes, raw, oystaTemplate, globalTemplate, arrays, commandsToExecute, serverParams, messageTypeCode, messageTypeLocalCode, messageTypeName, configs, configIds, commandsWaiting, false)\\n // define global returns\\n msg = return_values;\\n}\",\"Type\":0,\"ProtocolActionObjects\":[]}","Timestamp":1715246932}]}],"Groups":[{"Id":5606,"Parent":null,"Name":"Settings","Json":"{\"description\":null,\"columns\":2,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5607,"Parent":null,"Name":"Emergency Options","Json":"{\"description\":null,\"columns\":2,\"order\":3,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5608,"Parent":null,"Name":"Notification","Json":"{\"description\":null,\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5609,"Parent":null,"Name":"Not Implemented","Json":"{\"description\":null,\"columns\":1,\"order\":6,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5610,"Parent":null,"Name":"Admin config","Json":"{ \"description\": \"Admin config\", \"columns\": 2, \"order\": 1, \"listSize\": 1, \"toTranslate\": [ \"name\", \"description\" ]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"ProtocolActionObjects":[]},{"Id":5611,"Parent":null,"Name":"Actions","Json":"{\"description\":\"Power off, real time locate etc.\",\"columns\":1,\"order\":5,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5612,"Parent":{"Id":5607,"Name":"Emergency Options","Json":{"description":null,"columns":2,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5612,"Name":"Make Call","Json":{"description":"Emergency phone number for the device","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Make Call","Json":"{\"description\":\"Emergency phone number for the device\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5613,"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Cycle Interval","Json":"{ \"description\": \"Define the period for which the device should send regular location updates, and how frequent those updates are.\", \"columns\": 1, \"order\": 2, \"listSize\": 1, \"toTranslate\": [ \"name\", \"description\" ]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5614,"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Battery alerts","Json":"{ \"description\": \"Battery alerts\", \"columns\": 1, \"order\": 5, \"toTranslate\": [ \"name\", \"description\" ]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5615,"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Scanning","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5616,"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"DeviceConfig","Json":"{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":5616,\"Parent\":{\"Id\":5610,\"Name\":\"Admin config\",\"Json\":{\"description\":\"Admin config\",\"columns\":2,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Device configuration values.\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},{\"Id\":5617,\"Name\":\"Password\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]}]},\"Name\":\"DeviceConfig\",\"Json\":\"{\\\"description\\\":\\\"Device configuration values.\\\",\\\"columns\\\":1,\\\"order\\\":1,\\\"listSize\\\":1,\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\"]}\",\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"ProtocolActionObjects\":[]}","Timestamp":1714564811}]},{"Id":5617,"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Password","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5618,"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Real Time Locate","Json":"{\"description\":\"Real Time Locate\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5619,"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"No Activity","Json":"{\"description\":\"No Activity\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5620,"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Set Server","Json":"{\"description\":\"Set Server\",\"columns\":1,\"order\":4,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"ProtocolActionObjects":[]},{"Id":5621,"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Non Movement","Json":"{\"description\":\"\",\"columns\":1,\"order\":2,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":5622,"Parent":{"Id":5608,"Name":"Notification","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5622,"Name":"Note","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Note","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]}],"GroupParams":[{"Id":9658,"Group":{"Id":5612,"Name":"Make Call","Json":{"description":"Emergency phone number for the device","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5607,"Name":"Emergency Options","Json":{"description":null,"columns":2,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"HandsFree","Json":"{\"name\":\"HandsFree\",\"default\":\"\",\"description\":\"HandsFree\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"SOS number is called with handsfree\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9631,"Group":{"Id":5612,"Name":"Make Call","Json":{"description":"Emergency phone number for the device","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5607,"Name":"Emergency Options","Json":{"description":null,"columns":2,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable Make Call","Json":"{\"name\":\"Enable Disable Make Call\",\"default\":\"\",\"description\":\"Make Call\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9656,"Group":{"Id":5612,"Name":"Make Call","Json":{"description":"Emergency phone number for the device","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5607,"Name":"Emergency Options","Json":{"description":null,"columns":2,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Timeout","Json":"{\"name\":\"Timeout\",\"default\":\"\",\"description\":\"Timeout before sending the Alert.\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Seconds\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9657,"Group":{"Id":5612,"Name":"Make Call","Json":{"description":"Emergency phone number for the device","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5607,"Name":"Emergency Options","Json":{"description":null,"columns":2,"order":3,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"SOS Number","Json":"{ \"name\": \"SOS Number\", \"default\": \"\", \"description\": \"Number which will be called in the event the SOS button is pressed\", \"type\": \"phone\", \"order\": 1, \"suffix\": null, \"prefix\": null, \"min\": null, \"max\": null, \"minLength\": null, \"maxLength\": null, \"helpText\": \"Number which will be called if the SOS button is pressed ..\", \"options\": [], \"toTranslate\": [ \"name\", \"description\", \"helpText\" ]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9655,"Group":{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Cycle Interval","Json":"{\"name\":\"Cycle Interval\",\"default\":\"\",\"description\":\"Cycle Interval\",\"type\":\"number\",\"suffix\":\"seconds\",\"prefix\":null,\"min\":1,\"max\":1440,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Frequency of location events, in seconds\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9652,"Group":{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Battery Charging Alerts","Json":"{\"name\":\"Enable Battery Charging Alerts\",\"default\":\"true\",\"description\":\"Enable Alerts when charging.\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Alerts will be sent when the users connects or disconnects the device to the charging station.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":4}","Default":"true","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9651,"Group":{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Battery Critical Alert","Json":"{\"name\":\"Enable Battery Critical Alert\",\"default\":\"true\",\"description\":\"Enable Battery Critical Alert\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Sends an Alert when the battery is critically low.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":0}","Default":"true","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9650,"Group":{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Battery Critical Threshold","Json":"{\"name\":\"Battery Critical Threshold\",\"default\":\"\",\"description\":\"Battery Critical Threshold\",\"type\":\"number\",\"suffix\":\"%\",\"prefix\":null,\"min\":1,\"max\":99,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Percentage at which the device sends a critical battery alert\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":1}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9654,"Group":{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Battery Low Threshold","Json":"{\"name\":\"Battery Low Threshold\",\"default\":\"100\",\"description\":\"Battery Low Threshold\",\"type\":\"number\",\"suffix\":\"%\",\"prefix\":null,\"min\":1,\"max\":99,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Percentage at which the device sends a low battery alert\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":3}","Default":"100","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9653,"Group":{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Battery Low Alert","Json":"{\"name\":\"Enable Battery Low Alert\",\"default\":\"true\",\"description\":\"Enable Battery Low Alert\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"true","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9649,"Group":{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"MacIDs","Json":"{\"name\":\"MacIDs\",\"default\":\"\",\"description\":\"List of MAC addresses\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Comma separated list of MAC addresses used in the scanning process.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9648,"Group":{"Id":5615,"Name":"Scanning","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5606,"Name":"Settings","Json":{"description":null,"columns":2,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5613,"Name":"Cycle Interval","Json":{"description":"Define the period for which the device should send regular location updates, and how frequent those updates are.","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5614,"Name":"Battery alerts","Json":{"description":"Battery alerts","columns":1,"order":5,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"EnableScanning","Json":"{\"name\":\"EnableScanning\",\"default\":\"false\",\"description\":\"Enable Scanning\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"When enabled will scan for MAC IDs and send a PROX alert if found.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9640,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"IV ActivatedFailMessage","Json":"{\"name\":\"IV ActivatedFailMessage\",\"default\":\"\",\"description\":\"Reason for Activation Failure\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9640,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV ActivatedFailMessage\",\"Json\":\"{\\\"name\\\":\\\"IV ActivatedFailMessage\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reason for Activation Failure\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":8}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440665},{"Type":1,"NewValue":"{\"Id\":9640,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV ActivatedFailMessage\",\"Json\":\"{\\\"name\\\":\\\"IV ActivatedFailMessage\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reason for Activation Failure\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":7}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440730}],"Tags":[]},{"Id":9647,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Reset","Json":"{\"name\":\"Reset\",\"default\":\"\",\"description\":\"Reset Device\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9647,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Reset\",\"Json\":\"{\\\"name\\\":\\\"Reset\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reset Device\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":10}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440673},{"Type":1,"NewValue":"{\"Id\":9647,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Reset\",\"Json\":\"{\\\"name\\\":\\\"Reset\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reset Device\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":10}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440682},{"Type":1,"NewValue":"{\"Id\":9647,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Reset\",\"Json\":\"{\\\"name\\\":\\\"Reset\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reset Device\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":9}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440737},{"Type":1,"NewValue":"{\"Id\":9647,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Reset\",\"Json\":\"{\\\"name\\\":\\\"Reset\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Reset Device\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":8}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564715}],"Tags":[]},{"Id":9646,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"BLE MAC","Json":"{\"name\":\"BLE MAC\",\"default\":\"\",\"description\":\"Bluetooth MAC address\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Bluetooth MAC address of the phone. No sepearator characters.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9646,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"BLE MAC\",\"Json\":\"{\\\"name\\\":\\\"BLE MAC\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Bluetooth MAC address\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bluetooth MAC address of the phone. No sepearator characters.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":0}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440632}],"Tags":[]},{"Id":9645,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"ICCID","Json":"{\"name\":\"ICCID\",\"default\":\"\",\"description\":\"SIM ICCID\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The ICCID of the SIM card.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"],\"order\":2}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9645,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"ICCID\",\"Json\":\"{\\\"name\\\":\\\"ICCID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"SIM ICCID\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The ICCID of the SIM card.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":6}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440657},{"Type":1,"NewValue":"{\"Id\":9645,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"ICCID\",\"Json\":\"{\\\"name\\\":\\\"ICCID\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"SIM ICCID\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The ICCID of the SIM card.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":5}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440722}],"Tags":[]},{"Id":9644,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"BTN MAC","Json":"{\"name\":\"BTN MAC\",\"default\":\"\",\"description\":\"Button MAC\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":true,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The MAC address of the Flic button paired with the app.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9644,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"BTN MAC\",\"Json\":\"{\\\"name\\\":\\\"BTN MAC\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Button MAC\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The MAC address of the Flic button paired with the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":1}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440635},{"Type":1,"NewValue":"{\"Id\":9644,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"BTN MAC\",\"Json\":\"{\\\"name\\\":\\\"BTN MAC\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Button MAC\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The MAC address of the Flic button paired with the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564464},{"Type":1,"NewValue":"{\"Id\":9644,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"BTN MAC\",\"Json\":\"{\\\"name\\\":\\\"BTN MAC\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Button MAC\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":true,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"The MAC address of the Flic button paired with the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":1}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564708}],"Tags":[]},{"Id":9643,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"IV Activated","Json":"{\"name\":\"IV Activated\",\"default\":\"false\",\"description\":\"Invent Activated Ok\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Flag to store if Invent has successfully activated this device.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9643,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV Activated\",\"Json\":\"{\\\"name\\\":\\\"IV Activated\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Invent Activated Ok\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Flag to store if Invent has successfully activated this device.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":7}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440660},{"Type":1,"NewValue":"{\"Id\":9643,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"IV Activated\",\"Json\":\"{\\\"name\\\":\\\"IV Activated\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Invent Activated Ok\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Flag to store if Invent has successfully activated this device.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":6}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440726}],"Tags":[]},{"Id":9642,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Test Bounce Back","Json":"{\"name\":\"Test Bounce Back\",\"default\":\"false\",\"description\":\"Test Bounce Back\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Bounce incoming messages back as notifications.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440685},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440694},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564300},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564731},{"Type":1,"NewValue":"{\"Id\":9642,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Test Bounce Back\",\"Json\":\"{\\\"name\\\":\\\"Test Bounce Back\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"Test Bounce Back\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Bounce incoming messages back as notifications.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564750}],"Tags":[]},{"Id":9641,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Config Mode","Json":"{\"name\":\"Config Mode\",\"default\":\"false\",\"description\":\"Config Mode\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enables Config mode on in the app to show additional actions and buttons.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9641,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Config Mode\",\"Json\":\"{\\\"name\\\":\\\"Config Mode\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Config Mode\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Enables Config mode on in the app to show additional actions and buttons.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":3}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440644}],"Tags":[]},{"Id":9638,"Group":{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Password","Json":"{\"name\":\"Password\",\"default\":\"\",\"description\":\"Password\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Password used to encrypt communication between Device and platform. Uses Imei if empty.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9639,"Group":{"Id":5617,"Name":"Password","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5610,"Name":"Admin config","Json":{"description":"Admin config","columns":2,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"encryption","Json":"{\"name\":\"encryption\",\"default\":\"true\",\"description\":\"enable encryption for commands\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9639,\"Group\":{\"Id\":5617,\"Name\":\"Password\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"encryption\",\"Json\":\"{\\\"name\\\":\\\"encryption\\\",\\\"default\\\":\\\"true\\\",\\\"description\\\":\\\"enable encryption for commands\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1715856989}],"Tags":[]},{"Id":9637,"Group":{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Real Time Locate","Json":"{\"name\":\"Real Time Locate\",\"default\":\"\",\"description\":\"Position Request\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Real Time Locate\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9635,"Group":{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"No Activity","Json":"{\"name\":\"No Activity\",\"default\":\"\",\"description\":\"Set No Activity Events\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":5,\"max\":10080,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Set No Activity Alerts in minutes. If the device does not report in the time frame it triggers a No Activity alert\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9636,"Group":{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable No Activity","Json":"{\"name\":\"Enable Disable No Activity\",\"default\":\"true\",\"description\":\"Enable Disable No Activity\",\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Enable or disable no activity alerts\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9633,"Group":{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Set Secondary Server","Json":"{\"name\":\"Set Secondary Server\",\"default\":\"\",\"description\":\"Select Server\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[{\"value\":\"52.232.85.255:5678\",\"label\":\"Production Secondary\"},{\"value\":\"52.174.17.77:5678\",\"label\":\"Acceptance Secondary\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9634,"Group":{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Set Primary Server","Json":"{\"name\":\"Set Primary Server\",\"default\":\"\",\"description\":\"Set Primary Server\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Select which server you wish the device to communicate to\",\"options\":[{\"value\":\"52.232.85.255:5678\",\"label\":\"Production Primary\"},{\"value\":\"52.174.17.77:5678\",\"label\":\"Acceptance Primary\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9632,"Group":{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Enable Disable NonMovement","Json":"{\"name\":\"Enable Disable NonMovement\",\"default\":\"true\",\"description\":null,\"type\":\"enable\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"true","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9659,"Group":{"Id":5621,"Name":"Non Movement","Json":{"description":"","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5609,"Name":"Not Implemented","Json":{"description":null,"columns":1,"order":6,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[{"Id":5618,"Name":"Real Time Locate","Json":{"description":"Real Time Locate","columns":1,"order":2,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5619,"Name":"No Activity","Json":{"description":"No Activity","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":5620,"Name":"Set Server","Json":{"description":"Set Server","columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"period ","Json":"{\"name\":\"period \",\"default\":\"600\",\"description\":\"Period in seconds which defines \\\"non-movement\\\"\",\"type\":\"number\",\"suffix\":null,\"prefix\":null,\"min\":5,\"max\":7200,\"futureOnly\":false,\"integerOnly\":true,\"isReadOnly\":false,\"isHidden\":true,\"minLength\":null,\"maxLength\":null,\"helpText\":\"\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"600","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":9660,"Group":{"Id":5622,"Name":"Note","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":5608,"Name":"Notification","Json":{"description":null,"columns":1,"order":4,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Message","Json":"{\"name\":\"Message\",\"default\":\"\",\"description\":\"Message\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Note as Comma sepearted values with Time(s from epoch), Type (INFO|WARNING|...), ID, Text.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":1,"NewValue":"{\"Id\":9660,\"Group\":{\"Id\":5622,\"Name\":\"Note\",\"Json\":{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":false,\"Deleted\":false,\"Children\":[]},\"Name\":\"Message\",\"Json\":\"{\\\"name\\\":\\\"Message\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Message\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Note as Comma sepearted values with Time(s from epoch), Type (BATTERY|REDALERT|...), ID, Text.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564690}],"Tags":[]},{"Id":9661,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Clear Message Buffer","Json":"{\"name\":\"Clear Message Buffer\",\"default\":\"\",\"description\":\"Clear Message Buffer\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Clears the message buffer of unsent messages.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9661,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Clear Message Buffer\",\"Json\":\"{\\\"name\\\":\\\"Clear Message Buffer\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Clear Message Buffer\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Clears the message buffer of unsent messages.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178254},{"Type":0,"NewValue":"{\"Id\":9661,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Clear Message Buffer\",\"Json\":\"{\\\"name\\\":\\\"Clear Message Buffer\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Clear Message Buffer\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Clears the message buffer of unsent messages.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":4097,\"Protocol\":{\"Id\":205,\"Code\":\"VGV\",\"Version\":\"0.2\",\"FirmwareVersion\":\"\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"ClearBuffer\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"CLRBUF\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":false,\"HexString\":false,\"SendAttempts\":1,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178259},{"Type":1,"NewValue":"{\"Id\":9661,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Clear Message Buffer\",\"Json\":\"{\\\"name\\\":\\\"Clear Message Buffer\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Clear Message Buffer\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Clears the message buffer of unsent messages.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":2}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440640}],"Tags":[]},{"Id":9661,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Clear Message Buffer","Json":"{\"name\":\"Clear Message Buffer\",\"default\":\"\",\"description\":\"Clear Message Buffer\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Clears the message buffer of unsent messages.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":4097,"Protocol":{"Id":205,"Code":"VGV","Version":"0.2","FirmwareVersion":"","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"ClearBuffer","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"CLRBUF\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":false,"HexString":false,"SendAttempts":1,"Order":null},"ProtocolActionObjects":[],"Tags":[]},{"Id":9662,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Enable Logging","Json":"{\"name\":\"Enable Logging\",\"default\":\"\",\"description\":\"Enable Realtime logging to Kibana.\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9662,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Logging\",\"Json\":\"{\\\"name\\\":\\\"Enable Logging\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable Realtime logging to Kibana.\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178764},{"Type":0,"NewValue":"{\"Id\":9662,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Logging\",\"Json\":\"{\\\"name\\\":\\\"Enable Logging\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable Realtime logging to Kibana.\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"false\",\"Command\":{\"Id\":4100,\"Protocol\":{\"Id\":205,\"Code\":\"VGV\",\"Version\":\"0.3\",\"FirmwareVersion\":\"\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Set RTLog Enable\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.DeviceConfig.EnableLogging == \\\"true\\\") {\\n enableLogging = \\\"1\\\";\\n} else {\\n enableLogging = \\\"0\\\";\\n}\\nvar command = \\\"RTLOG=\\\" + enableLogging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":false,\"SendAttempts\":1,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178770},{"Type":1,"NewValue":"{\"Id\":9662,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Logging\",\"Json\":\"{\\\"name\\\":\\\"Enable Logging\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Enable Realtime logging to Kibana.\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":4}\",\"Default\":\"false\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440649},{"Type":1,"NewValue":"{\"Id\":9662,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Logging\",\"Json\":\"{\\\"name\\\":\\\"Enable Logging\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Enable Realtime logging to Kibana.\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564447},{"Type":1,"NewValue":"{\"Id\":9662,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Enable Logging\",\"Json\":\"{\\\"name\\\":\\\"Enable Logging\\\",\\\"default\\\":\\\"false\\\",\\\"description\\\":\\\"Enable Realtime logging to Kibana.\\\",\\\"type\\\":\\\"checkbox\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":true,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":4}\",\"Default\":\"true\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564711}],"Tags":[]},{"Id":9662,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Enable Logging","Json":"{\"name\":\"Enable Logging\",\"default\":\"\",\"description\":\"Enable Realtime logging to Kibana.\",\"type\":\"checkbox\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"false","Command":{"Id":4100,"Protocol":{"Id":205,"Code":"VGV","Version":"0.3","FirmwareVersion":"","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Set RTLog Enable","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"// write your code here...\nif (params.DeviceConfig.EnableLogging == \"true\") {\n enableLogging = \"1\";\n} else {\n enableLogging = \"0\";\n}\nvar command = \"RTLOG=\" + enableLogging;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":false,"SendAttempts":1,"Order":null},"ProtocolActionObjects":[],"Tags":[]},{"Id":9663,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Get Logs","Json":"{\"name\":\"Get Logs\",\"default\":\"\",\"description\":\"Get current Logs from the App.\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Will send logs directly to Kibana.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get current Logs from the App.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178822},{"Type":0,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get current Logs from the App.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":4099,\"Protocol\":{\"Id\":205,\"Code\":\"VGV\",\"Version\":\"0.3\",\"FirmwareVersion\":\"\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"RequestLog\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQLOG\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":false,\"SendAttempts\":1,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178827},{"Type":1,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get current Logs from the App.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":5}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440653},{"Type":1,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get current Logs from the App.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":10}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440741},{"Type":1,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get Logs from Starttime to Endtime\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana. Use log time (GMT = -1h)\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564419},{"Type":1,"NewValue":"{\"Id\":9663,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Get Logs\",\"Json\":\"{\\\"name\\\":\\\"Get Logs\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Get Logs from Starttime to Endtime\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will send logs directly to Kibana. Use log time (GMT = -1h)\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":9}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564717}],"Tags":[]},{"Id":9663,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Get Logs","Json":"{\"name\":\"Get Logs\",\"default\":\"\",\"description\":\"Get current Logs from the App.\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Will send logs directly to Kibana.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":4099,"Protocol":{"Id":205,"Code":"VGV","Version":"0.3","FirmwareVersion":"","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"RequestLog","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"REQLOG\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":false,"SendAttempts":1,"Order":null},"ProtocolActionObjects":[],"Tags":[]},{"Id":9664,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Request Data","Json":"{\"name\":\"Request Data\",\"default\":\"\",\"description\":\"Request All Data command.\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Will return version and other settings from the app.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178894},{"Type":0,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":4087,\"Protocol\":{\"Id\":205,\"Code\":\"VGV\",\"Version\":\"0.3\",\"FirmwareVersion\":\"\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Battery Charging Alert\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.Batteryalerts.EnableBatteryChargingAlerts == \\\"true\\\") {\\n batCharging = 1;\\n} else {\\n batCharging = \\\"0\\\";\\n}\\nvar command = \\\"BATC=\\\" + batCharging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":false,\"SendAttempts\":2,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178899},{"Type":0,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":4098,\"Protocol\":{\"Id\":205,\"Code\":\"VGV\",\"Version\":\"0.3\",\"FirmwareVersion\":\"\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"RequestData\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"var configs = [];\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nvar command = \\\"REQDATA\\\";\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":false,\"SendAttempts\":1,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178902},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":9}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440669},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":9}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440678},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":8}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440733},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714162948},{"Type":2,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":{\"Id\":4087,\"Protocol\":{\"Id\":205,\"Code\":\"VGV\",\"Version\":\"0.7\",\"FirmwareVersion\":\"\",\"Product\":null,\"AvailableVersions\":[],\"HistoryVersions\":[],\"IsChanged\":true},\"Name\":\"Battery Charging Alert\",\"TemplateSMS\":\"VGCMD-001;<>;<>;\",\"Template\":\"VGCMD-001;<>;<>;[0a]\",\"AckTemplate\":null,\"Operation\":\"// write your code here...\\nif (params.Batteryalerts.EnableBatteryChargingAlerts == \\\"true\\\") {\\n batCharging = 1;\\n} else {\\n batCharging = \\\"0\\\";\\n}\\nvar command = \\\"BATC=\\\" + batCharging;\\nvar configs = [];\\nvar configsSMS = []; // for sms template\\nsequenceNumber = (new Date().getTime()).toString(36);\\nvar part1 = \\\"update=\\\" + sequenceNumber;\\nconst _crypto = require('crypto');\\nif (params.Password.Password === \\\"\\\") {\\n var password = serverParams.Imei;\\n} else {\\n var password = params.Password.Password;\\n}\\nif (params.Password.encryption === \\\"true\\\") {\\n var part2 = encrypt(command, part1, password);\\n} else {\\n var part2 = command;\\n}\\nAddValue(\\\"part1\\\", part1);\\nAddValue(\\\"part2\\\", part2);\\nAddValue(\\\"sequenceNumber\\\", sequenceNumber);\\nAddValueSMS(\\\"part1\\\", part1); //for sms template\\nAddValueSMS(\\\"part2\\\", part2); // for sms template\\nAddValueSMS(\\\"sequenceNumber\\\", sequenceNumber); // for sms template\\nvar commandConfigs = {\\n template: \\\"main\\\",\\n configs: configs,\\n configsSMS: configsSMS //for sms template\\n};\\nmsg.push(JSON.stringify(commandConfigs));\\n\\nfunction AddValueSMS(p1, p2) { //function for sms template\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configsSMS.push(cvpair);\\n}\\n\\nfunction AddValue(p1, p2) {\\n var cvpair = {\\n code: p1,\\n value: p2\\n };\\n configs.push(cvpair);\\n}\\n\\nfunction encrypt(text, mid, password) {\\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\\n const iv = _crypto.randomBytes(16); // random initialization vector\\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\\n // set the cipher\\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\\n // encrypt text\\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\\n // generate output ( encrypted text )\\n return Buffer.concat([iv, encrypted]).toString('base64');\\n}\",\"AvoidResending\":false,\"FollowParentSentType\":false,\"SendingType\":0,\"CommandToUpdateId\":null,\"ParentId\":null,\"Parent\":null,\"HasAck\":true,\"HexString\":false,\"SendAttempts\":2,\"Order\":null},\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714162955},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564727},{"Type":1,"NewValue":"{\"Id\":9664,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Request Data\",\"Json\":\"{\\\"name\\\":\\\"Request Data\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Request All Data command.\\\",\\\"type\\\":\\\"button\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Will return version and other settings from the app.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":13}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564753}],"Tags":[]},{"Id":9664,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Request Data","Json":"{\"name\":\"Request Data\",\"default\":\"\",\"description\":\"Request All Data command.\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Will return version and other settings from the app.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":4087,"Protocol":{"Id":205,"Code":"VGV","Version":"0.3","FirmwareVersion":"","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"Battery Charging Alert","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"// write your code here...\nif (params.Batteryalerts.EnableBatteryChargingAlerts == \"true\") {\n batCharging = 1;\n} else {\n batCharging = \"0\";\n}\nvar command = \"BATC=\" + batCharging;\nvar configs = [];\nvar configsSMS = []; // for sms template\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nAddValueSMS(\"part1\", part1); //for sms template\nAddValueSMS(\"part2\", part2); // for sms template\nAddValueSMS(\"sequenceNumber\", sequenceNumber); // for sms template\nvar commandConfigs = {\n template: \"main\",\n configs: configs,\n configsSMS: configsSMS //for sms template\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValueSMS(p1, p2) { //function for sms template\n var cvpair = {\n code: p1,\n value: p2\n };\n configsSMS.push(cvpair);\n}\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":false,"SendAttempts":2,"Order":null},"ProtocolActionObjects":[],"Tags":[]},{"Id":9664,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Request Data","Json":"{\"name\":\"Request Data\",\"default\":\"\",\"description\":\"Request All Data command.\",\"type\":\"button\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Will return version and other settings from the app.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":{"Id":4098,"Protocol":{"Id":205,"Code":"VGV","Version":"0.3","FirmwareVersion":"","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"RequestData","TemplateSMS":"VGCMD-001;<>;<>;","Template":"VGCMD-001;<>;<>;[0a]","AckTemplate":null,"Operation":"var configs = [];\nsequenceNumber = (new Date().getTime()).toString(36);\nvar part1 = \"update=\" + sequenceNumber;\nvar command = \"REQDATA\";\nconst _crypto = require('crypto');\nif (params.Password.Password === \"\") {\n var password = serverParams.Imei;\n} else {\n var password = params.Password.Password;\n}\nif (params.Password.encryption === \"true\") {\n var part2 = encrypt(command, part1, password);\n} else {\n var part2 = command;\n}\nAddValue(\"part1\", part1);\nAddValue(\"part2\", part2);\nAddValue(\"sequenceNumber\", sequenceNumber);\nvar commandConfigs = {\n template: \"main\",\n configs: configs\n};\nmsg.push(JSON.stringify(commandConfigs));\n\nfunction AddValue(p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n configs.push(cvpair);\n}\n\nfunction encrypt(text, mid, password) {\n var salt = _crypto.pbkdf2Sync(mid, 'salt', 1000, 64, 'sha1');\n const iv = _crypto.randomBytes(16); // random initialization vector\n const key = _crypto.pbkdf2Sync(password, salt, 3145, 32, 'sha1');\n // set the cipher\n const cipher = _crypto.createCipheriv('aes-256-cbc', key, iv);\n // encrypt text\n const encrypted = Buffer.concat([cipher.update(text, 'utf8'), cipher.final()]);\n // generate output ( encrypted text )\n return Buffer.concat([iv, encrypted]).toString('base64');\n}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":false,"SendAttempts":1,"Order":null},"ProtocolActionObjects":[],"Tags":[]},{"Id":9665,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"Version","Json":"{\"name\":\"Version\",\"default\":\"\",\"description\":\"Current Version of the App.\",\"type\":\"text\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Use Button Request Data to update the field.\",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1710178950},{"Type":1,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":14}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440688},{"Type":1,"NewValue":"{\"Id\":9665,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"Version\",\"Json\":\"{\\\"name\\\":\\\"Version\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Current Version of the App.\\\",\\\"type\\\":\\\"text\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":\\\"Use Button Request Data to update the field.\\\",\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":14}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440698}],"Tags":[]},{"Id":11088,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"StartTimeLog","Json":"{\"name\":\"StartTimeLog\",\"default\":\"\",\"description\":\"StartTime for Logs request\",\"type\":\"datetime\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":11088,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"StartTimeLog\",\"Json\":\"{\\\"name\\\":\\\"StartTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"StartTime for Logs request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713439790},{"Type":1,"NewValue":"{\"Id\":11088,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"StartTimeLog\",\"Json\":\"{\\\"name\\\":\\\"StartTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"StartTime for Logs request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":11}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440677},{"Type":1,"NewValue":"{\"Id\":11088,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"StartTimeLog\",\"Json\":\"{\\\"name\\\":\\\"StartTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"StartTime for Logs request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":11}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440686},{"Type":1,"NewValue":"{\"Id\":11088,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"StartTimeLog\",\"Json\":\"{\\\"name\\\":\\\"StartTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"StartTime for Logs request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":10}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564721}],"Tags":[]},{"Id":11089,"Group":{"Id":5616,"Name":"DeviceConfig","Json":{"description":"Reset the device with default factory values","columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[]},"Name":"EndTimeLog","Json":"{\"name\":\"EndTimeLog\",\"default\":\"\",\"description\":\"Endtime for log request\",\"type\":\"datetime\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":false,\"integerOnly\":false,\"isReadOnly\":false,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":null,\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[{"Type":0,"NewValue":"{\"Id\":11089,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"EndTimeLog\",\"Json\":\"{\\\"name\\\":\\\"EndTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Endtime for log request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"]}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713439985},{"Type":1,"NewValue":"{\"Id\":11089,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"EndTimeLog\",\"Json\":\"{\\\"name\\\":\\\"EndTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Endtime for log request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":12}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1713440690},{"Type":1,"NewValue":"{\"Id\":11089,\"Group\":{\"Id\":5616,\"Name\":\"DeviceConfig\",\"Json\":{\"description\":\"Reset the device with default factory values\",\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]},\"Parent\":null,\"Device\":null,\"DeviceRelated\":false,\"IsList\":false,\"IsAdminOnly\":true,\"Deleted\":false,\"Children\":[]},\"Name\":\"EndTimeLog\",\"Json\":\"{\\\"name\\\":\\\"EndTimeLog\\\",\\\"default\\\":\\\"\\\",\\\"description\\\":\\\"Endtime for log request\\\",\\\"type\\\":\\\"datetime\\\",\\\"suffix\\\":null,\\\"prefix\\\":null,\\\"min\\\":null,\\\"max\\\":null,\\\"futureOnly\\\":false,\\\"integerOnly\\\":false,\\\"isReadOnly\\\":false,\\\"isHidden\\\":false,\\\"minLength\\\":null,\\\"maxLength\\\":null,\\\"helpText\\\":null,\\\"options\\\":[],\\\"toTranslate\\\":[\\\"name\\\",\\\"description\\\",\\\"helpText\\\"],\\\"order\\\":11}\",\"Default\":\"\",\"Command\":null,\"ProtocolActionObjects\":[],\"Tags\":[]}","Timestamp":1714564724}],"Tags":[]}],"ProtocolChanges":[{"Version":"0.2","UserName":"Sean-Admin","Resource":"MessageType","Name":"ALLDATA","Message":"(Create) (ALLDATA) Created ALLDATA","Timestamp":1710177889},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Command","Name":"ClearBuffer","Message":"(Create) (ClearBuffer) added Clear buffer command","Timestamp":1710177961},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Command","Name":"RequestData","Message":"(Create) (RequestData) REQDATA command","Timestamp":1710178028},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Create) (RequestLog) REQLOG command","Timestamp":1710178130},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Command","Name":"Set RTLog Enable","Message":"(Create) (Set RTLog Enable) RTLOG command","Timestamp":1710178198},{"Version":"0.2","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Clear Message Buffer","Message":"(Create) (Clear Message Buffer) ClearBuffer Button","Timestamp":1710178254},{"Version":"0.2","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Clear Message Buffer","Message":"Associate groupParam Clear Message Buffer to command ClearBuffer","Timestamp":1710178259},{"Version":"0.2","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"added ALLDATA and new commands","Timestamp":1710178496},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"(Create) (Enable Logging) RTLOG enable","Timestamp":1710178764},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"Associate groupParam Enable Logging to command Set RTLog Enable","Timestamp":1710178770},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Create) (Get Logs) Request Logs button","Timestamp":1710178822},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"Associate groupParam Get Logs to command RequestLog","Timestamp":1710178827},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Create) (Request Data) REQDATA button","Timestamp":1710178894},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"Associate groupParam Request Data to command Battery Charging Alert","Timestamp":1710178899},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"Associate groupParam Request Data to command RequestData","Timestamp":1710178902},{"Version":"0.3","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Create) (Version) Version text field","Timestamp":1710178950},{"Version":"0.3","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"Remaining properties for logs and version","Timestamp":1710178977},{"Version":"0.4","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) updated operations with ALLDATA processing","Timestamp":1710245093},{"Version":"0.4","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"fix for getting version","Timestamp":1710245132},{"Version":"0.5","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) EnvVar test","Timestamp":1711033993},{"Version":"0.5","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) proper implementation for autoactivate on acceptance","Timestamp":1711035615},{"Version":"0.5","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"Auto-register on Acceptance","Timestamp":1711037706},{"Version":"0.6","UserName":"Sean-Admin","Resource":"MessageType","Name":"CYC","Message":"(Update) (CYC) fix for location accuracy in CYC messages","Timestamp":1712653303},{"Version":"0.6","UserName":"Sean-Admin","Resource":"MessageType","Name":"ALLDATA","Message":"(Update) (ALLDATA) fix accuracy in ALLDATA event","Timestamp":1712653474},{"Version":"0.6","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"Fix for location precision on CYC","Timestamp":1712655385},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Command","Name":"ClearBuffer","Message":"(Update) (ClearBuffer) enabling ACk for Clearbuffer","Timestamp":1713428245},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Create) (StartTimeLog) add starttime for logs\n","Timestamp":1713439790},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Create) (EndTimeLog) Added Endtime for log requests","Timestamp":1713439985},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) add start and endtime to REQLOG command","Timestamp":1713440200},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"BLE MAC","Message":"(Update) (BLE MAC) Reorder Group Params","Timestamp":1713440632},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"BTN MAC","Message":"(Update) (BTN MAC) Reorder Group Params","Timestamp":1713440635},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Clear Message Buffer","Message":"(Update) (Clear Message Buffer) Reorder Group Params","Timestamp":1713440640},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Config Mode","Message":"(Update) (Config Mode) Reorder Group Params","Timestamp":1713440644},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"(Update) (Enable Logging) Reorder Group Params","Timestamp":1713440649},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1713440653},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"ICCID","Message":"(Update) (ICCID) Reorder Group Params","Timestamp":1713440657},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"IV Activated","Message":"(Update) (IV Activated) Reorder Group Params","Timestamp":1713440660},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"IV ActivatedFailMessage","Message":"(Update) (IV ActivatedFailMessage) Reorder Group Params","Timestamp":1713440665},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1713440669},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1713440673},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Update) (StartTimeLog) Reorder Group Params","Timestamp":1713440677},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1713440678},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1713440682},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1713440685},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Update) (StartTimeLog) Reorder Group Params","Timestamp":1713440686},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1713440688},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Update) (EndTimeLog) Reorder Group Params","Timestamp":1713440690},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1713440694},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Version","Message":"(Update) (Version) Reorder Group Params","Timestamp":1713440698},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"ICCID","Message":"(Update) (ICCID) Reorder Group Params","Timestamp":1713440722},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"IV Activated","Message":"(Update) (IV Activated) Reorder Group Params","Timestamp":1713440726},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"IV ActivatedFailMessage","Message":"(Update) (IV ActivatedFailMessage) Reorder Group Params","Timestamp":1713440730},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1713440733},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1713440737},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1713440741},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) parse startime to epoch","Timestamp":1713441651},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) parsing endtime to epoch","Timestamp":1713441974},{"Version":"0.7","UserName":"Michael_Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) was requesting. battery alerts wrongly ","Timestamp":1714162948},{"Version":"0.7","UserName":"Michael_Admin","Resource":"GroupParam","Name":"Request Data","Message":"Dissociate groupParam Request Data from command Battery Charging Alert","Timestamp":1714162955},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) REQLOG fix NaN values","Timestamp":1714563558},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) fix isNaN","Timestamp":1714563687},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Params tidy up","Timestamp":1714564300},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) update Get Log labels","Timestamp":1714564419},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"(Update) (Enable Logging) Hide realtime logging","Timestamp":1714564447},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"BTN MAC","Message":"(Update) (BTN MAC) Not in use","Timestamp":1714564464},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Message","Message":"(Update) (Message) updated label","Timestamp":1714564690},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"BTN MAC","Message":"(Update) (BTN MAC) Reorder Group Params","Timestamp":1714564708},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Enable Logging","Message":"(Update) (Enable Logging) Reorder Group Params","Timestamp":1714564711},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Reset","Message":"(Update) (Reset) Reorder Group Params","Timestamp":1714564715},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Get Logs","Message":"(Update) (Get Logs) Reorder Group Params","Timestamp":1714564717},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"StartTimeLog","Message":"(Update) (StartTimeLog) Reorder Group Params","Timestamp":1714564721},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"EndTimeLog","Message":"(Update) (EndTimeLog) Reorder Group Params","Timestamp":1714564724},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1714564727},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1714564731},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Test Bounce Back","Message":"(Update) (Test Bounce Back) Reorder Group Params","Timestamp":1714564750},{"Version":"0.7","UserName":"Sean-Admin","Resource":"GroupParam","Name":"Request Data","Message":"(Update) (Request Data) Reorder Group Params","Timestamp":1714564753},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Group","Name":"DeviceConfig","Message":"(Update) (DeviceConfig) updated label","Timestamp":1714564811},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) ICCID check","Timestamp":1714652453},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Operation","Name":"VGV","Message":"(Update) (VGV) moved ICCID chech to CREATE message","Timestamp":1715246932},{"Version":"0.7","UserName":"Sean-Admin","Resource":"Protocol","Name":null,"Message":"ICCID check, timerange for logs, hide unused controls","Timestamp":1715256211},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Password","Message":"(Update) (Set Password) changing password command encryption to plain text for now","Timestamp":1715687167},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"SOS Number","Message":"(Update) (SOS Number) remove encrypt checkbox logic","Timestamp":1715855955},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"SOS Number","Message":"(Update) (SOS Number) fix bug","Timestamp":1715856353},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Battery Charging Alert","Message":"(Update) (Battery Charging Alert) remove encrypt checkbox logic","Timestamp":1715856558},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Battery Critical Alert Setting","Message":"(Update) (Battery Critical Alert Setting) remove encrypt checkbox logic","Timestamp":1715856589},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Battery Low Alert Setting","Message":"(Update) (Battery Low Alert Setting) remove encrypt checkbox logic","Timestamp":1715856616},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"ClearBuffer","Message":"(Update) (ClearBuffer) remove encrypt checkbox logic","Timestamp":1715856637},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Cycle Interval","Message":"(Update) (Cycle Interval) remove encrypt checkbox logic","Timestamp":1715856657},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Device Activated","Message":"(Update) (Device Activated) remove encrypt checkbox logic","Timestamp":1715856680},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"NonMovement","Message":"(Update) (NonMovement) remove encrypt checkbox logic","Timestamp":1715856700},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Real Time Locate","Message":"(Update) (Real Time Locate) remove encrypt checkbox logic","Timestamp":1715856719},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"RequestData","Message":"(Update) (RequestData) remove encrypt checkbox logic","Timestamp":1715856734},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"RequestLog","Message":"(Update) (RequestLog) remove encrypt checkbox logic","Timestamp":1715856754},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Reset Device","Message":"(Update) (Reset Device) remove encrypt checkbox logic","Timestamp":1715856772},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Send Notification","Message":"(Update) (Send Notification) remove encrypt checkbox logic","Timestamp":1715856789},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"SendMACs","Message":"(Update) (SendMACs) remove encrypt checkbox logic","Timestamp":1715856815},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Config Enable","Message":"(Update) (Set Config Enable) remove encrypt checkbox logic","Timestamp":1715856835},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set RTLog Enable","Message":"(Update) (Set RTLog Enable) remove encrypt checkbox logic","Timestamp":1715856881},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Scanning Enable","Message":"(Update) (Set Scanning Enable) remove encrypt checkbox logic","Timestamp":1715856904},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Server","Message":"(Update) (Set Server) remove encrypt checkbox logic","Timestamp":1715856937},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"SOS Options","Message":"(Update) (SOS Options) remove encrypt checkbox logic","Timestamp":1715856960},{"Version":"0.8","UserName":"Sean-Admin","Resource":"GroupParam","Name":"encryption","Message":"(Update) (encryption) checkbox not used any more","Timestamp":1715856989},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Set Password","Message":"(Update) (Set Password) Encrypt PW with IMEI","Timestamp":1715860808},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"SOS Number","Message":"(Update) (SOS Number) Prepending encrypted commands with \"enc=\"","Timestamp":1715862067},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Battery Charging Alert","Message":"(Update) (Battery Charging Alert) prepending encrypted commands with \"enc=\"","Timestamp":1715862254},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Battery Critical Alert Setting","Message":"(Update) (Battery Critical Alert Setting) prepending encrypted commands with \"enc=\"","Timestamp":1715862278},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Battery Low Alert Setting","Message":"(Update) (Battery Low Alert Setting) prepending encrypted commands with \"enc=\"","Timestamp":1715862300},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"ClearBuffer","Message":"(Update) (ClearBuffer) prepending encrypted commands with \"enc=\"","Timestamp":1715862327},{"Version":"0.8","UserName":"Sean-Admin","Resource":"Command","Name":"Cycle Interval","Message":"(Update) (Cycle Interval) prepending encrypted commands with \"enc=\"","Timestamp":1715862349}],"ProtocolActionObjects":[],"Tags":[{"Id":1956,"Name":"OneCommandSender","BackendAction":"OneCommandSender","Value":"True"}]} \ No newline at end of file