From 3adc0d70eadcd757660763480009b9e0ef1ca52d Mon Sep 17 00:00:00 2001 From: oysta_admin Date: Mon, 17 Feb 2025 14:51:20 +0000 Subject: [PATCH] Initial Commit --- dingtek-smoke | 1 + 1 file changed, 1 insertion(+) create mode 100644 dingtek-smoke diff --git a/dingtek-smoke b/dingtek-smoke new file mode 100644 index 0000000..10f989f --- /dev/null +++ b/dingtek-smoke @@ -0,0 +1 @@ +{"Id":155,"Name":null,"Description":null,"FirmwareVersion":"","InProgress":true,"MessageTypes":[{"Id":3662,"Code":"COMM","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":true,"NoOperation":false,"Type":0,"Template":"","HasTemplateGlobal":true,"ResponseTemplate":"80029999010181","TemplateGlobal":"800026<>","LongConnection":false,"HexString":true,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"","RegExGlobal":"^800026[^ ]*","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3664,"Code":"ALTAM","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"DINGTEK-ALTAM;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^DINGTEK-ALTAM;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3665,"Code":"BATL","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":2,"Template":"DINGTEK-BATL;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":false,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^DINGTEK-BATL;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3666,"Code":"CYC","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"DINGTEK-CYC;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^DINGTEK-CYC;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3667,"Code":"INFO","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":true,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"DINGTEK-INFO;<>;<>;<>;<>;<>;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":{"Id":2309,"Protocol":{"Id":155,"Code":"Dingtek Smoke","Version":"0.2","FirmwareVersion":"","Product":null,"AvailableVersions":[],"HistoryVersions":[],"IsChanged":true},"Name":"cycle","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nAddValue(\"command\", \"8002999901\" + (('00' + Number(params.Cycles.Cycle).toString(16)).slice(-2)) + \"81\");\n//AddValue(\"command\", \"8002999908003C81\");\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}","AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"CommandToUpdateId":null,"ParentId":null,"Parent":null,"HasAck":true,"HexString":true,"SendAttempts":20,"Order":null},"CacheImei":false,"RegEx":"^DINGTEK-INFO;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3663,"Code":"ALSM","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":1,"Template":"DINGTEK-ALSM;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^DINGTEK-ALSM;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]},{"Id":3785,"Code":"TEST","Name":null,"MessageCode":null,"NeedAck":false,"IsAck":false,"IsFailAck":false,"IsAckHexString":false,"NoOperation":false,"Type":0,"Template":"DINGTEK-TEST;<>;<>;<>;<>;<>;","HasTemplateGlobal":false,"ResponseTemplate":null,"TemplateGlobal":null,"LongConnection":false,"HexString":false,"AckFirst":false,"ScaipH":false,"DoNotSendCommands":true,"ProtocolsLibraryMethod":null,"ProtocolsLibraryMethodArgs":null,"Command":null,"CacheImei":false,"RegEx":"^DINGTEK-TEST;[^;]*;[^;;]*;[^;;]*;[^;;]*;[^;;]*;","RegExGlobal":"","IsDeviceUpdate":false,"ProtocolActionObjects":[],"Tags":[]}],"Commands":[{"Id":2311,"Name":"server","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nAddValue(\"command\", \"8002999906\" + params.ServerConfig.Server + \"81\");\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}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":false,"HexString":false,"Order":null,"SendAttempts":5,"ProtocolActionObjects":[],"Tags":[]},{"Id":2312,"Name":"batteryAlertLevel","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nAddValue(\"command\", \"8002999905\" + (('00' + Number(params.Battery.alertlevel).toString(16)).slice(-2)) + \"81\");\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}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":false,"HexString":false,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]},{"Id":2309,"Name":"cycle","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nAddValue(\"command\", \"8002999901\" + (('00' + Number(params.Cycles.Cycle).toString(16)).slice(-2)) + \"81\");\n//AddValue(\"command\", \"8002999908003C81\");\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}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":true,"HexString":true,"Order":null,"SendAttempts":20,"ProtocolActionObjects":[],"Tags":[]},{"Id":2313,"Name":"band","TemplateSMS":null,"Template":"<>","AckTemplate":null,"Operation":"var configs = [];\nAddValue(\"command\", \"800299990H\" + params.Band.band + \"81\");\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}","CommandToUpdate":null,"Parent":null,"AvoidResending":false,"FollowParentSentType":false,"SendingType":0,"HasAck":false,"HexString":false,"Order":null,"SendAttempts":4,"ProtocolActionObjects":[],"Tags":[]}],"Operations":[{"Id":159,"Name":"smoke","Operation":"if (typeof localTesting === \"undefined\") {\n var localTesting = \"False\";\n}\nvar packetHead = rawFromBytes.slice(0, 2);\nvar forcedBit = rawFromBytes.slice(2, 4);\nvar deviceTyoe = rawFromBytes.slice(4, 6);\nvar reportType = rawFromBytes.slice(6, 8);\nvar packetLength = Number.parseInt(rawFromBytes.slice(8, 10), 16);\nvar endPacket = 10 + packetLength + packetLength;\nvar payload = rawFromBytes.slice(10, endPacket);\nvar packetTail = rawFromBytes.slice(12, 14);\nvar dataToReceiver = [];\nvar codeValues = [];\ndebug(\"packetHead = \" + packetHead);\ndebug(\"forcedBit = \" + forcedBit);\ndebug(\"deviceTyoe = \" + deviceTyoe);\ndebug(\"reportType = \" + reportType);\ndebug(\"packetLength = \" + packetLength);\nif (globalTemplate == \"True\") {\n switch (reportType) {\n case '01':\n var imei = \"\";\n var temp = 0.0;\n temp = Number.parseInt(payload.slice(0, 2), 16);\n if (temp > 127) temp = temp - 256;\n smokeStatus = payload.slice(2, 3);\n tamperStatus = payload.slice(3, 4);\n batteryStatus = payload.slice(5, 6);\n debug(\"smokeStatus =\" + smokeStatus);\n if (smokeStatus == \"1\") {\n eventNameTag = \"ALSM\";\n } else if (smokeStatus == \"2\") {\n eventNameTag = \"TEST\";\n } else if (tamperStatus == \"1\") {\n eventNameTag = \"ALTAM\";\n } else if (batteryStatus == \"1\") {\n eventNameTag = \"BATL\";\n } else {\n eventNameTag = \"CYC\";\n }\n batteryVoltage = Number.parseInt(payload.slice(6, 10), 16);\n rsrp = Buffer.from(payload.slice(10, 18), 'hex').readFloatLE();\n imei = payload.slice(18, 34).substring(1);\n timeStamp = Number.parseInt(payload.slice(34, 42), 16);\n frameCount = Number.parseInt(payload.slice(42, 46), 16);\n tail = payload.slice(46, 48);\n message = \"DINGTEK-\" + eventNameTag + ';' + imei + ';' + timeStamp + ';' + temp + ';' + rsrp + \";\" + batteryVoltage + \";\";\n break;\n case '02':\n eventNameTag = \"CYC\";\n var imei = \"\";\n var temp = 0.0;\n temp = Number.parseInt(payload.slice(0, 2), 16);\n if (temp > 127) temp = temp - 256;\n smokeStatus = payload.slice(2, 3);\n tamperStatus = payload.slice(3, 4);\n batteryStatus = payload.slice(4, 5);\n batteryVoltage = Number.parseInt(payload.slice(6, 10), 16);\n rsrp = Buffer.from(payload.slice(10, 18), 'hex').readFloatLE();\n imei = payload.slice(18, 34).substring(1);\n timeStamp = Number.parseInt(payload.slice(34, 42), 16);\n frameCount = Number.parseInt(payload.slice(42, 46), 16);\n tail = payload.slice(46, 48);\n message = \"DINGTEK-\" + eventNameTag + ';' + imei + ';' + timeStamp + ';' + temp + ';' + rsrp + \";\" + batteryVoltage + \";\";\n break;\n case '03':\n eventNameTag = \"INFO\";\n firmware = Number.parseInt(payload.slice(0, 2), 16) + \".\" + Number.parseInt(payload.slice(2, 4), 16);\n periodicTime = Number.parseInt(payload.slice(4, 6), 16);\n cycleTime = Number.parseInt(payload.slice(6, 10), 16);\n batteryThreshold = Number.parseInt(payload.slice(10, 12), 16);\n simNumber = payload.slice(13, 28);\n serverMode = payload.slice(28, 30);\n semicolon1 = payload.indexOf('3B', 30);\n semicolon2 = payload.indexOf('3B', semicolon1 + 1);\n serverAddress = hex_to_ascii(payload.slice(30, semicolon1));\n serverPort = Number.parseInt(payload.slice(semicolon1 + 2, semicolon2), 16);\n imei = payload.slice(semicolon2 + 2, semicolon2 + 18).substring(1);\n tail = payload.slice(semicolon2 + 18, semicolon2 + 20);\n message = \"DINGTEK-\" + eventNameTag + ';' + imei + ';' + moment.utc().unix() + ';' + firmware + ';' + periodicTime + ';' + cycleTime + \";\" + batteryThreshold + \";\";\n message = message + simNumber + \";\" + serverMode + \";\" + serverAddress + \";\" + serverPort + \";\";\n break;\n }\n sendMessageToLocalhostNoWait(message);\n AddValue(codeValues, \"imei\", imei);\n AddValue(codeValues, 'protocol_template', 'Dingtek_Smoke');\n AddValue(codeValues, 'product', serverParams.ProductName);\n} else {\n AddValue(codeValues, 'protocol_template', 'Dingtek_Smoke');\n AddValue(codeValues, 'product', serverParams.ProductName);\n}\nvar dataToReceiver = {\n 'values': codeValues\n};\nconsole.log(dataToReceiver);\n\nfunction AddValue(msgArray, p1, p2) {\n var cvpair = {\n code: p1,\n value: p2\n };\n msgArray.push(cvpair);\n}\n\nfunction hex_to_ascii(str1) {\n var hex = str1.toString();\n var str = '';\n for (var n = 0; n < hex.length; n += 2) {\n str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));\n }\n return str;\n}\n\nfunction debug(str) {\n if (localTesting === \"True\") {\n console.log(str);\n }\n}\n\nfunction sendMessageToLocalhostNoWait(str) { // sends message to system, closing connection after\n var server;\n if (localTesting === \"True\") {\n console.log('local testing - sending to acceptance server the message ... ');\n console.log(str);\n server = '52.174.17.77';\n } else {\n server = '127.0.0.1';\n }\n var c = net.createConnection(5678, server);\n c.on('error', function(error) {\n c = net.createConnection(5678, server);\n });\n c.write(`${str}`);\n c.end();\n}","Type":0,"ProtocolActionObjects":[]}],"Groups":[{"Id":4101,"Parent":null,"Name":"Admin Settings","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"ProtocolActionObjects":[]},{"Id":4102,"Parent":null,"Name":"Features","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":4103,"Parent":{"Id":4101,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":4103,"Name":"Server Config","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4107,"Name":"Band","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Server Config","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":4104,"Parent":{"Id":4102,"Name":"Features","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":[{"Id":4104,"Name":"Cycles","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4105,"Name":"Battery","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Cycles","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":4105,"Parent":{"Id":4102,"Name":"Features","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":[{"Id":4104,"Name":"Cycles","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4105,"Name":"Battery","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Battery","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]},{"Id":4107,"Parent":{"Id":4101,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":4103,"Name":"Server Config","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},{"Id":4107,"Name":"Band","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Name":"Band","Json":"{\"description\":null,\"columns\":1,\"order\":1,\"listSize\":1,\"toTranslate\":[\"name\",\"description\"]}","DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"ProtocolActionObjects":[]}],"GroupParams":[{"Id":5705,"Group":{"Id":4103,"Name":"Server Config","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":4101,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":4107,"Name":"Band","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Server","Json":"{\"name\":\"Server\",\"default\":\"\",\"description\":\"Destination where device should send data\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Which of the Oysta servers should the device send data to - default Production. \",\"options\":[{\"value\":\"52.174.17.77;5678;\",\"label\":\"Acceptance\"},{\"value\":\"52.232.85.255;5678;\",\"label\":\"Production\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":5706,"Group":{"Id":4104,"Name":"Cycles","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":4102,"Name":"Features","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":[{"Id":4105,"Name":"Battery","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"Cycle","Json":"{\"name\":\"Cycle\",\"default\":\"\",\"description\":\"Cycle period in hours\",\"type\":\"number\",\"suffix\":\"hours\",\"prefix\":null,\"min\":1,\"max\":168,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"The device will send in a regular status report ( cycle ) after the number of hours specified. The default is 24, so once every day. Note Changing may affect Battery Life \",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":5707,"Group":{"Id":4105,"Name":"Battery","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":4102,"Name":"Features","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":[{"Id":4104,"Name":"Cycles","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"alert level","Json":"{\"name\":\"alert level\",\"default\":\"\",\"description\":\"battery percentage for low battery alert\",\"type\":\"number\",\"suffix\":\"%\",\"prefix\":null,\"min\":1,\"max\":99,\"futureOnly\":null,\"integerOnly\":true,\"isReadOnly\":null,\"isHidden\":null,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Battery percentage at which the device should send in an alert saying the battery needs to be replaced. 20% is the default and should generally not be changed. \",\"options\":[],\"toTranslate\":[\"name\",\"description\",\"helpText\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]},{"Id":5708,"Group":{"Id":4107,"Name":"Band","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":{"Id":4101,"Name":"Admin Settings","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Parent":null,"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":true,"Deleted":false,"Children":[{"Id":4103,"Name":"Server Config","Json":{"description":null,"columns":1,"order":1,"listSize":1,"toTranslate":["name","description"]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]}]},"Device":null,"DeviceRelated":false,"IsList":false,"IsAdminOnly":false,"Deleted":false,"Children":[]},"Name":"band","Json":"{\"name\":\"band\",\"default\":\"\",\"description\":\"Which network band should the device use ( 20 for UK usage)\",\"type\":\"select\",\"suffix\":null,\"prefix\":null,\"min\":null,\"max\":null,\"futureOnly\":null,\"integerOnly\":null,\"isReadOnly\":null,\"isHidden\":false,\"minLength\":null,\"maxLength\":null,\"helpText\":\"Which network band should the device use ( 20 for UK usage), this should generally not be changed. \",\"options\":[{\"value\":\"00\",\"label\":\"All\"},{\"value\":\"03\",\"label\":\"3\"},{\"value\":\"05\",\"label\":\"5\"},{\"value\":\"08\",\"label\":\"8\"},{\"value\":\"14\",\"label\":\"20\"}],\"toTranslate\":[\"name\",\"description\",\"helpText\",\"label\"]}","Default":"","Command":null,"ProtocolActionObjects":[],"Tags":[]}],"ProtocolChanges":[],"ProtocolActionObjects":[],"Tags":[]} \ No newline at end of file